みその計算物理学
ホーム はじめに リンク集
ニュートン法の数値計算例(Java)
  • ニュートン法を行う前に

    求めたい方程式 f(x)=0 の左辺の関数をグラフィック系ソフトで描きある程度の解の予想が必要である。ここでも xsin(x)+log(x)=0 の解を求める。

  • プログラムソース
    import java.io.*;
    
    class Newton
    {
            public static void main()
            {
                    int count,max;
                    double a,newa,eps;
    
                    count=0;
                    max=1000;
                    a=0.0;
                    eps=1.0e-5;             //収束条件
    
                    Newton f=new Newton();
    
                    System.out.println("初期値を入力して下さい。");
                    try
                    {
                            InputStreamReader isr=new InputStreamReader(System.in);
                            BufferedReader br=new BufferedReader(isr);
                            String s;
                            s=br.readLine();
                            a=Double.parseDouble(s);
                            br.close();
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
                    for(;;)
                    {
                            count++;
                            
                            newa=a-f.f(a)/f.df(a);
    
                            if(Math.abs(newa-a)<eps) break;
    
                            a=newa;
    
                            if(count==max) 
                            {
                                    System.out.println("収束しませんでした。");
                                    break;
                            }
                    }
    
                    System.out.println("解の値は" + newa + "\n収束するのに" + count + "回かかりました。");
            }
    
            double f(double x)
            {
                    return x*Math.sin(x)+Math.log(x);
            }
            double df(double x)
            {
                    return Math.sin(x)+x*Math.cos(x)+1.0/x;
            }
    
    }
    
  • プログラム実行結果
    初期値を入力して下さい。
    0.5
    解の値は0.66410153739898681
    収束するのに4回かかりました。
    Press any key to continue

    プログラムを実行すると、初期値の入力を求められますので、解に近い値を入力します。

    2分法の数値計算例(Java)と比べて、初期値のスタート、収束条件等が同じであるのに、計算回数が4分の1に減った。ニュートン法が2分法と比べていかに高速で解が求まるのかがわかる。