Язык С++ как инструмент моделирования на основе решения дифференциальных уравнений в частных производных - page 32

30
Основной цикл алгоритма решения рассматриваемой задачи (1.1)-
(1.4) на основе ее конечно-разностного представления начального
условия, численной схемы Кранка-Николсона для дифференциального
уравнения параболического типа (1.22) с начальным условием (1.4) и
двухточечной аппроксимации граничных условий со вторым порядком
точности по координате.
for(t=1; t<nt; t++){
for(i=1; i<nxbase; i++){
A[i]=-Koeff/2;
B[i]=1+Koeff;
C[i]=-Koeff/2;
F[i]=U[t-1][i]+Koeff/2*
(U[t-1][i-1]-2*U[t-1][i]+
U[t-1][i+1]);
}
// левые граничные условия
A[0]=0;
B[0]=1+Koeff;
C[0]=-Koeff;
F[0]=(1-Koeff)*U[t-1][0]+
Koeff*U[t-1][1]-
+Koeff*dx*(exp(-a*T[t-1])+exp(-a*T[t]));
// правые граничные условия
A[(int)nxbase]=-Koeff;
B[(int)nxbase]=1+Koeff;
C[(int)nxbase]=0;
F[(int)nxbase]=(1-Koeff)*
U[t-1][(int)nxbase]+Koeff*
U[t-1][(int)nxbase-1]-
Koeff*dx*(exp(-a*T[t-1])+exp(-a*T[t]));
// вызов функции прогонки
tdma_h(A,B,C,F,x,nx);
for(i=0; i<nx; i++){
U[t][i]=x[i];
}
}
/*
//расчет в цикле всей поверхности:
for(t=0; t<nt-1; t++){
for(i=1; i<nx-1; i++){
U[t+1][i]=U[t][i]+dt/dx/dx*a*
(U[t][i+1]-2*U[t][i]+U[t][i-1]);//////+++
}
U[t+1][0]=U[t+1][1]-dx*exp(-a*T[t+1]);////////+++
U[t+1][(int)nx-1]=U[t+1][(int)nx-2]-
dx*exp(-a*T[t+1]);
}
1...,22,23,24,25,26,27,28,29,30,31 33,34,35,36,37,38,39,40,41,42,...52
Powered by FlippingBook