randstep3

この一次元拡散方程式を解くコードを作成する。
体系は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);
}