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

16
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]=sin(X[j]);
U1[0][j]=sin(X[i]);
}
double Koeff;
Koeff=a*dt/pow(dx, 2.0);
int t;
double *x= new double[(int)nx]; // для ответа в функции
tdma_h()
for(t=1; t<nt; t++){
for(i=0; i<nxbase; i++){
A[i]=-Koeff;
B[i]=1+2*Koeff;
C[i]=-Koeff;
F[i]=U[t-1][i];
}
// левые граничные условия
A[0]=0;
B[0]=-1;
C[0]=1;
F[0]=dx*exp(-a*T[t]);
// правые граничные условия
A[(int)nxbase]=-1;
B[(int)nxbase]=1;
C[(int)nxbase]=0;
F[(int)nxbase]=-dx*exp(-a*T[t]);
// вызов функции прогонки
tdma_h(A,B,C,F,x,nx);
for(i=0; i<nx; i++){
U[t][i]=x[i];
}
1...,8,9,10,11,12,13,14,15,16,17 19,20,21,22,23,24,25,26,27,28,...52
Powered by FlippingBook