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

37
{
double Xsize=1, Tsize=1,
nt=10, nxbase=10,
dx=Xsize/nxbase, dt=Tsize/nt,
nx=nxbase+1;
int i,j;
double *X= new double[(int)nx];
for(i=0; i<nx; i++){
X[i]=i*dx;
cout<<i<<" "<<X[i]<<endl;
}
//double U=0;
nt=nt+1;
double *T= new double[(int)nt];
for(i=0; i<nt; i++){
T[i]=i*dt;
cout<<i<<" "<<T[i]<<endl;
}
// задаем U начальные:
double** U = new double*[(int)nt];
for ( i = 0; i < nt; i++) {
U[i] = new double[(int)nx];
}
double** U1 = new double*[(int)nt];
for ( i = 0; i < nt; i++) {
U1[i] = new double[(int)nx];
}
// сначала все нули:
for(i=0; i<nt; i++){
for(j=0; j<nx; j++){
U[i][j]=0;
}
}
//при 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]+
1...,29,30,31,32,33,34,35,36,37,38 40,41,42,43,44,45,46,47,48,49,...52
Powered by FlippingBook