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

9
Программная реализация основной части алгоритма решения
рассматриваемой задачи (1.1)-(1.4) на основе ее конечно-разностного
представления начального условия, явной схемы для дифференциального
уравнения параболического типа (1.6) с начальным условием (1.4) и
трехточечной аппроксимации граничных условий со вторым порядком
точности по координате.
//расчет в цикле всей поверхности:
int t;
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]=1./3.*(4.*U[t+1][1]-U[t+1][2]-
2.*dx*exp(-a*T[t+1]));
//U[t+1][1]-dx*exp(-a*T[t+1]);
U[t+1][(int)nx-1]=1./3.*(4.*U[t+1][(int)nx-2]-
U[t+1][(int)nx-3]-2.*dx*exp(-a*T[t+1]));
//U[t+1][(int)nx-2]-dx*exp(-a*T[t+1]);
}
Программная реализация основной части алгоритма решения
рассматриваемой задачи (1.1)-(1.4) на основе ее конечно-разностного
представления начального условия, явной схемы для дифференциального
уравнения параболического типа (1.6) с начальным условием (1.4) и
двухточечной аппроксимации граничных условий со вторым порядком
точности по координате.
//расчет в цикле всей поверхности:
int t;
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]=(2.*a*dt/pow(dx,2.))*U[t][1]+
(1.-2.*a*dt/pow(dx,2.))*U[t][0]-
(2.*a*dt/dx)*exp(-a*T[t+1]);/////////////////+++
U[t+1][(int)nx-1]=(2.*a*dt/pow(dx,2.))*U[t][(int)nx-2]+
(1.-2.*a*dt/pow(dx,2.))*U[t][(int)nx-1]-
(2.*a*dt/dx)*exp(-a*T[t+1]);
}
1...,2,3,4,5,6,7,8,9,10 12,13,14,15,16,17,18,19,20,21,...52
Powered by FlippingBook