この一次元拡散方程式を解くコードを作成する。
体系はx=0を中心として十分大きく取り、初期条件は時間t=0(s)でx=0のみf=1、他の領域はf=0とする。
そのコードを用い、いろいろな拡散係数Dについて計算を行いモンテカルロ法の結果と比較・検討を行う。
#include <stdio.h>
int main(void)
{
int i,n,a,nn;
double va[1000]={0.000};
double vb[1000]={0.000};
double vc[1000]={0.000}};
double wa[1000]={0.000};
double wb[1000]={0.000};
double wc[1000]={0.000};
double D;
va[500]=1;
vb[500]=1;
vc[500]=1;
FILE *one;
one=fopen("result.xls","w");
FILE *two;
two=fopen("date.txt","r");
fscanf(two,"%4lf",&D);
for(a=1;a<=3;a++){
switch (a){
case 1:
nn=200;
break;
case 2:
nn=1000;
break;
case 3:
nn=5000;
break;
}
for(n=0;n<=nn;n++){
for(i=350;i<=650;i++){
switch
(nn){
case
200:
wa[i]=va[i]+D*(va[i-1]-2*va[i]+va[i+1]);
break;
case
1000:
wb[i]=vb[i]+D*(vb[i-1]-2*vb[i]+vb[i+1]);
break;
case
5000:
wc[i]=vc[i]+D*(vc[i-1]-2*vc[i]+vc[i+1]);
break;
}
}
for(i=350;i<=650;i++){
va[i]=wa[i];
vb[i]=wb[i];
vc[i]=wc[i];
}
}
}
for(i=350;i<=650;i++){
fprintf(one,"%4d
",i-500);
fprintf(one,"%6f
",va[i]);
fprintf(one,"%6f
",vb[i]);
fprintf(one,"%6f\n",vc[i]);
}
return(0);
}