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

29
Основной цикл алгоритма решения рассматриваемой задачи (1.1)-
(1.4) на основе ее конечно-разностного представления начального
условия, численной схемы Кранка-Николсона для дифференциального
уравнения параболического типа (1.21) с начальным условием (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]=-Koeff;
C[0]=Koeff-1;
F[0]=(Koeff-1)*U[t-1][1]-
Koeff/2*(U[t-1][2]+U[t-1][0])
+Koeff*dx*exp(-a*T[t]);
// правые граничные условия
A[(int)nxbase]=Koeff-1;
B[(int)nxbase]=-Koeff;
C[(int)nxbase]=0;
F[(int)nxbase]=(Koeff-1)*
U[t-1][(int)nxbase-1]-Koeff/2*
(U[t-1][(int)nxbase]+U[t-1][(int)nxbase-2])
+Koeff*dx*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...,21,22,23,24,25,26,27,28,29,30 32,33,34,35,36,37,38,39,40,41,...52
Powered by FlippingBook