みその計算物理学
ホーム はじめに リンク集
オイラー法の数値計算例(C言語)
  • プログラムソース (1次元の単振動)
    #include <stdio.h>
    
    double f1(double t,double x,double v);
    double f2(double t,double x,double v);
    
    int main()
    {
            double x,v,t,dt,tmax;
            double k0[2];
    
            FILE *output;
            output=fopen("output.data","w");
    
            x=1.0;
            v=0.0;
            dt=0.03;
            tmax=100;
    
            for(t=0.0;t<=tmax;t+=dt) {
                    k0[0]=dt*f1(t,x,v);
                    k0[1]=dt*f2(t,x,v);
                    x=x+k0[0];
                    v=v+k0[1];
    
                    fprintf(output,"%f %f %f\n",t,x,v);
            }
    
            fclose(output);
    
            return 0;
    }
    
    double f1(double t,double x,double v)
    {
            return v;
    }
    
    double f2(double t,double x,double v)
    {
            return (-x);
    }
    
    
    
  • GNUPLOT出力結果

    下の画像を見ると、横軸が位置を表し、縦軸が速度を表しているが、明らかに各値が発散している。単振動において、外部からの力や摩擦や抵抗がなければ、位置と速度の最大値と最小値は変わらないから、一定の円を描くはずである。このずれは誤差によるものである。オイラー法では1次までしか近似しなかったためである。よって、オイラー法はあまり実用的ではない。