偏微分のプログラムについてです.
(∂^2 u)/(∂x^2 )+(∂^2 u)/(∂y^2 )=2(x^2+y^2 )
境界上でu(0,y)=u(x,0)=0,u(1,y)=y^2,u(x,1)=x^2である.点(0.5,0.5)の値を求めよ.その際きざみ幅を幾つか変化させることで,反復回数がどのように変化するか確かめよ.
という問題です.自分で以下のプログラムを作ったのですが,コンパイルされません.ぜひどこがおかしいか教えてください.
#include<stdio.h>
#define EPS 10e-6
#define N 100
#define M 100
main(void){
int i,j;
int n=19,m=19,r=0;
double h,x0,S;
double u1[N][M],u2[N][M];
h=2.0/(n+1);
for(i=0;i<n+2;i++){
for(j=0;j<m+2;j++){
u1[i][j]=0.0;
}
}
do{
for(i=0;i<n+2;i++){
u2[i][0]=0.0;
u2[i][m+1]=0.0;
}
for(j=0;j<m+2;j++){
u2[0][j]=0.0;
u2[n+1][j]=0.0;
}
for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
u2[i][j]=(u1[i-1][j]+u1[i][j+1]+u1[i+1][j]+u1[i][j-1]+2.0*h*h)/4.0;
}
}
r++;
S=fabs(u1[(n+1)/2][(m+1)/2]-u2[(m+1)/2][(m+1)/2]);
for(i=0;i<n+2;i++){
for(j=1;j<m+1;j++){
u1[i][j]=u2[i][j];
}
}
}
while(S>EPS);
x0=u2[(n+2)/2][(m+2)/2];
printf("きざみ幅=%lf\n",h);
printf("反復回数=%d\n",r);
printf("点(0.5,0.5)=%lf\n",x0);
}
お礼
注文してしまいました。 ファンもつけることのできるサイズにしてしまいました。 ご返答、ありがとうございました。
補足
お手数出なければそのあたりも教えていただけるとありがたいです。