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

40
double Koeff;
Koeff=pow(dt/dx, 2.0);
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.8).
//при t начальном U=sin(X):
for(j=0; j<nx; j++){
U[0][j]=exp(2.0*dx*j);
U[1][j]=U[0][j];
}
double Koeff;
Koeff=pow(dt/dx, 2.0);
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...,32,33,34,35,36,37,38,39,40,41 43,44,45,46,47,48,49,50,51,...52
Powered by FlippingBook