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

42
int t;
for(t=1; t<nt-1; t++){
for(i=1; i<nx-1; i++){
U[t+1][i]=Koeff*U[t][i-1]-U[t-1][i]+
(2-2*Koeff-5*pow(dt,2.0))*U[t][i]+
Koeff*U[t][i+1];
}
U[t+1][0]=(U[t+1][2]-4*U[t+1][1])/(-3-4*dx);
U[t+1][(int)nx-1]=(4*U[t+1][(int)nx-2]-
U[t+1][(int)nx-3])/(3-4*dx);
}
Основной цикл алгоритма решения рассматриваемой задачи (2.1)-
(2.5) на основе ее конечно-разностного представления начального
условия, явной схемы крест для дифференциального уравнения
гиперболического типа с первым начальным условием (2.4), с
аппроксимацией второго начального условия (2.5) вторым порядком
точности по времени и двухточечной аппроксимации граничных условий
с первым порядком точности по координате (2.11).
//при t начальном
for(j=0; j<nx; j++){
U[0][j]=exp(2.0*dx*j);
}
for(i=1;i<nx-1;i++){
U[1][i]=0.5*Koeff*U[0][i-1]
+(1-Koeff-2.5*pow(dt,2.0))*U[0][i]
+0.5*Koeff*U[0][i+1];
}
U[1][0]=(1-Koeff-2.5*pow(dt,2.0)-2*dx*Koeff)*
U[0][0]+Koeff*U[0][1];
U[1][(int)nx-1]=(1-Koeff-2.5*pow(dt,2.0)+
2*dx*Koeff)*U[0][(int)nx-1]+Koeff*U[0][(int)nx-2];
int t;
for(t=1; t<nt-1; t++){
for(i=1; i<nx-1; i++){
U[t+1][i]=Koeff*U[t][i-1]-U[t-1][i]+
(2-2*Koeff-5*pow(dt,2.0))*U[t][i]+
Koeff*U[t][i+1];
}
U[t+1][0]=-U[t-1][0]+(2-4*dx*Koeff-2*Koeff-
5*pow(dt,2.0))*U[t][0]+2*Koeff*U[t][1];
U[t+1][(int)nx-1]=2*Koeff*U[t][(int)nx-2]+
(2+4*dx*Koeff-2*Koeff-5*pow(dt,2.0))*
U[t][(int)nx-1]-U[t-1][(int)nx-1];
}
1...,34,35,36,37,38,39,40,41,42,43 45,46,47,48,49,50,51,52
Powered by FlippingBook