Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Расчет водонасыщенных грунтовых оснований. Монография
.pdf
> #Расчет правой части системы линейных уравнений.
C := seq((kappa[i]/kappa[0]-1)*P[i], i=1..N-1),
kappa[N]/kappa[0]-1;
> #Решение системы. Используется построенную матрицу и
последовательность С
res := linalg[linsolve](M, vector([C]));
> #Конвертация полученного решения в array (так как
array индексируется от нуля)
d := array(0..N+1, [0, seq(res[i], i=1..N), 0]);
> funcD := (idx)->alpha*(1-sum((d[j]-d[j+1])*(idxT[j])*Heaviside(idx-T[j]), j=0..N));
131

> plot(funcD(x), x=0..400);
132

Приложение 4
Программное приложение для определения деформированного
состояния водонасыщенных оснований
> #Блок инициализации констант (N, пси, и других)
> N := 7; #размерность
Z := 0;
Za := 8.15; #Z для расчета массива
a[i]
sigma0 := 0.054; # значение sigma0
fSigma := 0.0234583; # значение фикции
sigma(0)
Digits := 10; #точность выводимых зна-
чений
alpha := 0.069507782;
H := 10;
omega := 0.124399;
ТОЧКИ КОЛЛОКАЦИИ ДЛЯ ФУНКЦИИ Us
# Блок инициализации параметров P, T, t и a (от 0 до
N)
# array - используется, так как индексация у этой
структуры может начинаться с нуля (0..N а не 1..N)
T := array(0..N, [0, 0.09, 0.81, 3.24, 11.34, 56.7,
168.76, 360]);
133

> P := array(0..N, [infinity, 8.2873889706053,
0.96609795368344, 0.285466183166673,
0.0912067168620717, 0.0138748108690414,
0.0043427829407659, 0]);
ФУНКЦИЯ a2
Pa := array(0..N, [infinity, 8.1007826976189,
0.97991767639357, 0.24588582509378,
0.0804781361485954, 0.0086764099896161,
0.0023543136698075, 0]);
> taNum := 7; #Количество заданных Т элемен-
тов (автоматически подставляется в формулу "сумма от
1 до tnum")
ta := array(0..taNum, [0, 0.1, 0.9, 4, 14, 70, 150,
227]);
134

> d := array(1..N, [0.231362355, 0.455142243,
0.144900436, -0.042625511, -0.003097535213, -
0.002704241826, -0.000186732]);
> #Формула для вычисления массива a[i]
funcA := (Pai)->alpha*(1+sum(d[i]*(1/Pai*exp(1)^(Pai*ta[i-1]) - 1/Pai*exp(1)^(-Pai*ta[i])), i=1..taNum));
> Alast := -1/Za*ln(1-fSigma/sigma0);
a := array(1..N, [seq(funcA(Pa[j]), j=1..N-1),
Alast]);
ФУНКЦИЯ 1/Es
# Блок ввода дополнительных данных (массивов te и k)
для расчета массива w
teNum := 7; #количество элементов в задаваемом массиве te (получаем te массив от 0 до teNum)
te := array(0..teNum, [0, 0.09, 0.81, 3.24, 11.34,
56.7, 168.76, 360]);
135

> kNum := teNum; #количество элементов в задаваемом
массиве k, должно быть не менее чем teNum
k := array(1..kNum, [0.12455654905, 0.19567986381,
0.11861439511, 0.06974564691, 0.025686294387,
0.00561547079, 0.00186715393]);
> Pe := array(0..N, [infinity, 8.2873889706053,
0.96609795368344, 0.285466183166673,
0.0912067168620717, 0.0138748108690414,
0.0043427829407659, 0]);
> W0 := 0.31963159724; # W0 - обозначение для П0
Wlast := 1.32862761809; # Wlast - обозначение для по-
следнего элемента П. (при N=7, последний элемент будет П7)
> #функция для расчета элементов массива w
funcW := (PE)->W0*(1+sum(k[i]*(exp(1)^(-PE*te[i-1]) exp(1)^(-PE*te[i]))/PE, i=1..teNum));
> W := array(0..N, [W0, seq(funcW(P[ii]), ii=1..N-1),
Wlast]);
136

> F := 0.054;
nu := 0.35;
r := 0.001;
R := 50;
> #функция для расчета элементов массива U
funcU := (Wi, Ai)->evalf(F*2/Pi*Wi*(nu*(1+nu)+(1nu*(1+nu)*Ai*r)*exp(1)^(-Ai*r)*(ln(R/r) +
Ai*r+(Ai*r)^2/4 + (Ai*r)^3/18 + (Ai*r)^4/96)));
>
> u := array(0..N, [funcU(W0, alpha) , seq(funcU(W[j],
a[j]), j=1..N)]);
> #Функция заполнения полей матрицы (не касается последней строки матрицы)
matrixFunc := (i, j)->evalf(exp(1)^(-P[i]*T[j-1]) exp(1)^(-P[i]*T[j]));
137

> #Процедура построения матрицы, для основного тела
матрицы - вызывается функция описанная выше
#Последняя строка матрицы заполняется как (T1, T2-
T1...)
buildMatrix := proc(i, j)
if (i<N) and (j<=N) then
matrixFunc(i, j)
elif j=1 then
T[j]
else
T[j]-T[j-1]
end if;
end proc;
> #Построение матрицы N на N используя процедуру
buildMatrix
M := matrix(N, N, buildMatrix);
138

> #Расчет правой части системы линейных уравнений.
C := seq((u[i]/u[0]-1)*P[i], i=1..N-1), u[N]/u[0]-1;
> #Решение системы. Используется построенную матрицу и
последовательность С
res := linalg[linsolve](M, vector([C]));
> #Конвертация полученного решения в array (так как
array индексируется от нуля)
g := array(0..N+1, [0, seq(res[i], i=1..N), 0]);
> funcD := (idx)->u[0]*(1-sum((g[j]-g[j+1])*(idxT[j])*Heaviside(idx-T[j]), j=0..N));
139

> plot(funcD(x), x=0..400);
140
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
