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

20
// вызов функции прогонки
tdma_h(A,B,C,F,x,nx);
for(i=0; i<nx; i++){
U[t][i]=x[i];
}
}
/*
//расчет в цикле всей поверхности:
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]=U[t+1][1]-dx*exp(-a*T[t+1]);////////+++
U[t+1][(int)nx-1]=U[t+1][(int)nx-2]-
dx*exp(-a*T[t+1]);
}
Основной цикл алгоритма решения рассматриваемой задачи (1.1)-
(1.4) на основе ее конечно-разностного представления начального
условия,
неявной
схемы
для
дифференциального
уравнения
параболического типа (1.11) с начальным условием (1.4) и двухточечной
аппроксимации граничных условий со вторым порядком точности по
координате.
for(t=1; t<nt; t++){
for(i=1; 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+2*Koeff;
C[0]=2*Koeff;
F[0]=2*Koeff*dx*exp(-a*T[t])-U[t-1][0];
// правые граничные условия
A[(int)nxbase]=2*Koeff;
B[(int)nxbase]=-2*Koeff-1;
C[(int)nxbase]=0;
F[(int)nxbase]=2*Koeff*dx*exp(-a*T[t])-
U[t-1][(int)nxbase];
// вызов функции прогонки
tdma_h(A,B,C,F,x,nx);
for(i=0; i<nx; i++){
U[t][i]=x[i];
}
}
1...,12,13,14,15,16,17,18,19,20,21 23,24,25,26,27,28,29,30,31,32,...52
Powered by FlippingBook