練習問題5
サンプルコードとしては、以下を挙げておく。別の書き方はいくらでもあり、もっと美しく/短く/安全に書くこともできるので、これが正解というほどのことではないことを、改めて注意しておく。
#include <stdio.h>
#include <math.h>
#define T 0.4 // calculation duration
#define max 10 // the maximum number of i
#define dt 0.005 // delta t
#define dx 0.1 // delta x
#define a 1.0 // a
#define pi 3.141592
double u[max+1][2]; // u_i^n is written as u[i][n], while n=0 or 1
int main(void){
double time=0;
double r=a*dt/dx/dx; int i,j;
for (i=0;i<max;i++){
u[i][0]=0.0; u[i][1]=0.0;
}
for(i=0;i<=max;i++){ //define the initial condition
u[i][0]=sin(pi*(double)i*dx);
}
u[0][1]=0.0; u[max][1]=0.0; //put the boundary condition
while (T>=time){
printf("t=%3.3f",time);
for(i=1;i<max;i++)
u[i][1]=u[i][0]+r*u[i+1][0]-r*2.0*u[i][0]+r*u[i-1][0];
for(i=0;i<=max;i++){
printf("\t %3.3f",u[i][0]);
u[i][0]=u[i][1];
}
printf("\n");
time=time+dt;
}
return(0);
}