みその計算物理学
ホーム はじめに リンク集
2分法の数値計算例(Java)
  • プログラムソース
    import java.io.*;
    import java.util.*;
    
    class Nibun
    {
            public static void main()
            {
                    int count;
                    double a,b,m,eps;
                    String s;
    
                    count=0;
                    a=0.0;
                    b=0.0;
                    m=0.0;
                    eps=1.0e-5;             //収束条件
    
                    Nibun f=new Nibun();
    
                    System.out.println("範囲の左の値と右の値をスペースを空けて入力して下さい。");
                    try 
                    {
                            InputStreamReader isr=new InputStreamReader(System.in);
                            BufferedReader br=new BufferedReader(isr);
                            s=br.readLine();
                            StringTokenizer st=new StringTokenizer(s," ");
                            a=Double.parseDouble(st.nextToken());
                            b=Double.parseDouble(st.nextToken());
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
                    do
                    {
                            count++;
                            m=(a+b)/2.0;
                            if(f.f(m)*f.f(a)<0) b=m;
                            else a=m;
    
                            if(count==1000)
                            {
                                    System.out.println("収束しませんでした。");
                            }
                    } while(!(Math.abs(a-b)<eps));
    
                    System.out.println("解の値は" + m + "\n収束するのに" + count + "回かかりました。");
            }
    
            double f(double x)
            {
                    return x*Math.sin(x)+Math.log(x);
            }
    
    }
    
  • プログラム実行結果
    範囲の左の値と右の値をスペースを空けて入力して下さい。
    0.5 1.0
    解の値は0.66410064697265625
    収束するのに16回かかりました。
    Press any key to continue

    この2分法のプログラムを実行したら、解の予想範囲の入力を求められます。求めたい解に応じて値を入力してください。今回は16回の計算回数となりました。