Численные методы решения прикладных задач - page 268

268
double
x[52],t[202],u[52][202],R[52][202];
int
i,j,N,K;
ofstream
outfile;
outfile.open(
"rezz.xls"
,
ios
::out);
N=50;
K=200;
L=5;
T=3;
a=0.4;
eps=0.1;
h=L/N;
delta=T/K;
cout<<
"h="
<<h<<endl;
cout<<
"delta="
<<delta<<endl;
//Формируем массив х и первый столбец матрицы решений U
for
(i=0;i<=N+1;i++)
{
x[i]=(i-1)*h;
u[i][1]=fi(x[i]);
}
//Формируем массив t, первую и последнюю строки матрицы решений U из граничных условий
for
(j=1;j<=K+1;j++)
{
t[j]=(j-1)*delta;
u[1][j]=myu(t[j]);
u[N+1][j]=nyu(t[j]);
}
// Определяем матрицу ошибок, заполняем ее нулями
R[N+1][K+1]=0;
gam=a*a*delta/h*h;
r=1;
k=0;
//Решим сисиему методом Зейделя
while
(r>eps)
{
for
(i=2;i<=N;i++)
for
(j=2;j<=K+1;j++)
{
R[i][j]=fabs(u[i][j]-gam/(1+2*gam)*(u[i-1][j]+u[i+1][j])-u[i][j-
1]/(1+2*gam)-delta*f(x[i],t[j])/(1+2*gam));
u[i][j]=gam/(1+2*gam)*(u[i-1][j]+u[i+1][j])+u[i][j-
1]/(1+2*gam)+delta*f(x[i],t[j])/(1+2*gam);
}
r=R[1][1];
for
(i=1;i<=N+1;i++)
for
(j=1;j<=K+1;j++)
if
(R[i][j]>r)
r=R[i][j];
//Увеличение колистчества итераций
k=k+1;
}
cout<<
"k="
<<k;
for
(i=1;i<=N;i++)
{
for
(j=1;j<=K;j++)
{
cout<<
"\t"
<<u[i][j];
outfile<<
"\t"
<<u[i][j];
}
cout<<endl;
outfile<<endl;
}
outfile.close();
return
0;}
I...,258,259,260,261,262,263,264,265,266,267 269,270,271,272,273,274,275,276,277,278,...284
Powered by FlippingBook