みその計算物理学
ホーム はじめに リンク集
オイラー法の数値計算例(Java)
  • プログラムソース (1次元の単振動)
    import java.io.*;
    
    class Euler 
    {
            public static void main(String arg[]) 
            {
                    double x,v,t,dt,tmax;
                    double k0[]=new double[2];
    
                    x=1.0;
                    v=0.0;
                    dt=0.03;
                    tmax=100.0;
    
                    Euler f=new Euler();
    
                    try 
                    {
                            FileWriter fw=new FileWriter("output.data");
    
                            for(t=0;t<tmax;t+=dt) 
                            {
                                    k0[0]=dt*f.f1(t,x,v);
                                    k0[1]=dt*f.f2(t,x,v);
                                    x=x+k0[0];
                                    v=v+k0[1];
    
                                    fw.write(+ x + " " + v + "\n");
    
                            }
                            fw.close();
                    }
    
                    catch (Exception e) 
                    {
                            System.out.println(e);
                    }
                    
            }
    
            double f1(double t,double x,double v)
            {
                    return v;
            }
    
            double f2(double t,double x,double v)
            {
                    return (-x);
            }
    
    }
  • GNUPLOT出力結果

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