みその計算物理学
ホーム はじめに リンク集
ヤコビ法の数値計算例(Java)
  • プログラムソース
    import java.io.*;
    
    class Co
    {
            static final int n=3;                   //行列の行(列)の数
            static final int max=100;               //繰り返し最大回数
            static final double eps=1.0e-5;         //誤差許容範囲
    }
    
    class Jacobi
    {
            static double a[][]={{3.0,-6.0,9.0},{2.0,5.0,-8.0},{1.0,-4.0,7.0}};
            static double b[]={6.0,8.0,2.0};
            static double xold[]={1.0,1.0,1.0};
            static double xnew[]=new double[Co.n];
    
            public static void main()
            {
                    int i,j,k;
                    double err;
    
                    for(k=0;k<Co.max;k++) 
                    {
                            err=0.0;
                            for(i=0;i<Co.n;i++) 
                            {
                                    xnew[i]=b[i];
                                    for(j=0;j<Co.n;j++) 
                                    {
                                            if(j!=i) 
                                            {
                                                    xnew[i]-=a[i][j]*xold[j];
                                            }
                                    }
                                    xnew[i]=xnew[i]/a[i][i];
                            }
                            for(i=0;i<Co.n;i++) 
                            {
                                    err+=Math.abs(xold[i]-xnew[i]);             //各解の誤差をたす
                                    xold[i]=xnew[i];
                            }
                            if(err<Co.eps) break;              //誤差が許容範囲だったら終了
                    }
    
                    for(i=0;i<Co.n;i++) 
                    {
                            System.out.println(xnew[i]);
                    }
                    System.out.println("繰り返し回数は" + k + "回でした。");
    
            }
    }
    
  • プログラム実行結果
    3.0000084657365673
    2.0000428954504441
    1.0000260751383328
    繰り返し回数は81回でした。
    Press any key to continue