Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Расчет водонасыщенных грунтовых оснований. Монография
.pdf
Приложение 2
2
а
Программное приложение для определения параметра
> #Блок инициализации констант
> N:= 7; #размерность
Z := 8.15;
fsigma := 0.0233542; # значение фикции sigma0
sigma0 := 0.054; # значение sigma0
tsigma := 0.0234583; # конечное значения sigma
Digits := 10; # точность выводимых значе-
ний
alpha := 0.069507782;
> #Блок инициализации параметров P, T, t и a (от 0 до
N)
# array - используется, так как индексация у этой
структуры может начинаться с нуля (0..N а не 1..N)
> t := array(0..N, [0, 0.1, 0.9, 4, 14, 70, 150,
227]);
> P := array(0..N, [infinity, 8.1007826976189,
0.97991767639357, 0.24588582509378,
0.0804781361485954, 0.0086764099896161,
0.0023543136698075, 0]);
121

> T := array(0..7, [0, 1.986, 6.306 , 10.413, 24.453,
54.412, 139.067, 227.332]);
> a := array(0..8, [0, 0.243002367, -0.015693306, -
0.017811474, -0.006226422, -0.001965216, -
0.001686047, -0.000545756, 0]);
> # задание функции расчета a2
f:=(idx)->(-1/Z)*ln(1fsigma/sigma0*(1+sum(a[ii]*(1/P[idx]*(exp(1)^(P[idx]*T[ii-1]) - exp(1)^(-P[idx]*T[ii]))),
ii=1..7)));
> #Вычисление последнего элемента A
Alast := (-1/Z)*ln(1-tsigma/sigma0);
122

> #Построение массива А
A := array(1..N, [seq(f(i), i=1..N-1), Alast]);
> #Вычисление С нулевого
C0 := A[N]/alpha-1;
> #Построение массива С. С(нулевое) ставится в конец
массива получаем (С1..СN-1, С0)
funcC := (idx)->(A[idx]/alpha - 1)*P[idx];
C := seq(funcC(i), i=1..N-1), C0;
> #Функция заполнения полей матрицы (не касается последней строки матрицы)
matrixFunc := (i, j)->evalf(exp(1)^(-P[i]*t[j-1]) exp(1)^(-P[i]*t[j]));
> #Процедура построения матрицы, для основного тела
матрицы - вызывается функция описанная выше
#Последняя строка матрицы заполняется как (T1, T2-
T1...)
buildMatrix := proc(i, j)
if (i<N) then
matrixFunc(i, j)
elif j=1 then
t[1]
else
t[j]-t[j-1]
end if;
end proc;
123

#Процедура округления маленьких чисел, используя константу epsilon
roundToZero := proc(val)
if (abs(val) < epsilon) then
0
else
val
end if;
end proc;
> #Построение матрицы N на N используя процедуру
buildMatrix
M := matrix(N, N, buildMatrix);
124

> #Решение системы. Использует построенную матрицу и
последовательность С
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));
> plot(funcD(x), x=0..230);
125

Приложение 3
s
E
1
Программное приложение для определения параметра
> #Блок инициализации констант (N, пси, и других)
> N := 7; #размерность
Z := 0;
Za := 8.15; #Z для расчета массива a[i]
sigma := 0.054; # значение sigma0
tsigma := 0.0234583;
Digits := 10; #точность выводимых значений
alpha := 0.069507782;
H := 10;
omega := 0.124399;
> #Блок инициализации параметров 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]);
> P := array(0..N, [infinity, 8.2873889706053,
0.96609795368344, 0.285466183166673,
126

0.0912067168620717, 0.0138748108690414,
0.0043427829407659, 0]);
> Pa := array(0..N, [infinity, 8.1007826976189,
0.97991767639357, 0.24588582509378,
0.0804781361485954, 0.0086764099896161,
0.0023543136698075, 0]);
> tnum := 7; #Количество заданных Т элементов (автома-
тически подставляется в формулу "сумма от 1 до tnum")
t := array(0..tnum, [0, 0.1, 0.9, 4, 14, 70, 150,
227]);
> b := array(1..N, [0.231362355, 0.455142243,
0.144900436, -0.042625511, -0.003097535213, -
0.002704241826, -0.000186732]);
127

> #Формула для вычисления массива a[i]
funcA := (Pai)->alpha*(1+sum(b[i]*(1/Pai*exp(1)^(Pai*t[i-1]) - 1/Pai*exp(1)^(-Pai*t[i])), i=1..tnum));
> Alast := -1/Za*ln(1-tsigma/sigma);
a := array(1..N, [seq(funcA(Pa[j]), j=1..N-1),
Alast]);
> # Блок ввода дополнительных данных (массивов tau и
d) для расчета массива w
tauNum := 8; #количество элементов в задаваемом мас-
сиве tau (автоматически подставляется в формулу расчета суммы)
tau := array(0..tauNum, [0, 20, 41, 103, 131, 162,
223, 345, 360]);
> dNum := 8; #количество элементов в задаваемом мас-
сиве d, должно быть не менее чем tauNum
d := array(0..dNum, [0, 0.053084028, 0.024183742,
0.013227728, 0.008354741, 0.004735283, 0.002700723,
0.001579463, 0]);
128

> #функция для расчета элементов массива w
funcW := (Pii)->omega*(1+sum(d[i]*(exp(1)^(Pii*tau[i-1])/Pii - exp(1)^(-Pii*tau[i])/Pii),
i=1..tauNum));
> wLast := 0.516141;
w := array(1..N, [seq(funcW(P[ii]), ii=1..N-1),
wLast]);
> # Так как Pi зарезервированное имя, Pi обозначим как
Kappa;
# Задание функции расчета, расчет последнего элемента
массива и самого массива
funcKappa := (ww, aa)>evalf((ww*aa)/(sigma*(exp(1)^(-aa*Z) - exp(1)^(aa*H))));
kappa0 := evalf((omega*alpha)/(sigma*(exp(1)^(-Z*alpha) - exp(1)^(-alpha*H))));
kappa := array(0..N, [kappa0, seq(funcKappa(w[i],
a[i]), i=1..N)]);
129

> #Функция заполнения полей матрицы (не кaсается по-
следней строки матрицы)
matrixFunc := (i, j)->evalf(exp(1)^(-P[i]*T[j-1]) exp(1)^(-P[i]*T[j]));
> #Процедура построения матрицы, для основного тела
матрицы - вызывается функция описанная выше
#Последняя строка матрицы заполняется как (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);
130
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
