みその計算物理学
ホーム はじめに リンク集
2次方程式を解の公式を用いて解を求める数値計算例(Java)
  • 2次方程式

    2次方程式の解は、解の公式を用いて解析的に求められるので、わざわざコンピュータに解かせる必要はないが、プログラミングの入門には最適な課題である。今回は、解の判別式を用いて、複素解まで求めるようにした。

    JavaではC言語のようにscanf関数を使って簡単にコマンドラインからの入力値を読み取る方法が無いため、文字ストリームを用いる。また複数の入力値を求めるためにStreamTokenizerクラスを使っている。

  • プログラムソース
    import java.io.*;
    import java.util.*;
    
    class Nizi 
    {
            public static void main(String arg[]) 
            {
                    double a,b,c;                           //係数
                    double Re1,Re2,Im1,Im2,D;
                    String s;
                    a=0.0;
                    b=0.0;
                    c=0.0;
    
                    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());
                            c=Double.parseDouble(st.nextToken());
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
                    D=b*b-4*a*c;            //解の判別式
    
                    if(D>0) 
                    {
                            Re1=(-b+Math.sqrt(D))/(2*a);
                            Re2=(-b-Math.sqrt(D))/(2*a);
                            Im1=0;
                            Im2=0;
                    }
                    else if(D==0)
                    {
                            Re1=-b/(2*a);
                            Im1=0;
                            Re2=Im2=0;
                    }
                    else
                    {
                            Re1=-b/(2*a);
                            Re2=Re1;
                            Im1=Math.sqrt(-D)/(2*a);
                            Im2=-Im1;
                    }
    
                    if(D==0)
                    {
                            System.out.println( Re1 + "+" + "i" + Im1);
                    }
                    else
                    {
                            System.out.println( Re1 + "+" + "i" + Im1);
                            System.out.println( Re2 + "+" + "i" + Im2);
                    }
    
            }
    }
    
  • 実行結果

    プログラムを実行すると、2次方程式の係数を入力するようにもとめられる。このプログラムでは高次係数からスペースを空けて3つの値を入力する。今回は、x*x-5x+6=0 の解を求めることにした。

    1.0 -5.0 6.0
    3.0+i0.0
    2.0+i0.0
    Press any key to continue