れを差分形式で書いてみよう。
$$\frac{T_i^{n+1}-T_i^{n}}{\Delta t}=-u\frac{T_{i+1}^n-T_i^n}{\Delta x}$$
$$T_i^{n+1}=T_i^{n}-u\frac{\Delta t}{\Delta x}(T_{i+1}^n-T_i^n)$$
と考えるかもしれない。それで以下のようなコードでこれを検討してみよう。
#include <stdio.h>
#include <math.h>
#define u 1.0
#define dt 0.1
#define xmax 200
#define imax 200
#define tmax 10
int main(void){
double dx=(double)xmax/imax;
double x;
double T[xmax+1],cfl;
int t;
cfl=u*dt/dx;
int i;
for (i=1; i<=imax; i++){
if (i>=10&&i<50)
T[i]=1.0;
else
T[i]=0.0;
}
for (i=1; i<imax; i++)
printf("%2.2e,",T[i]);
printf("\n");
for (t=1; t<=tmax; t++){
for (i=1; i<imax; i++)
T[i]=T[i]-cfl*(T[i+1]-T[i]);
if (t%1==0){
for (i=1; i<imax; i++)
printf("%2.2e,",T[i]);
printf("\n");
}
}
}もともと、

のような形を初期条件としている。これが一定速度で右に動いて行ってもらいたいと考えているわけだが、実際には

となってしまい、計算が安定してくれない。