Javaのガウス消元法


アルゴリズムはできますが、配列の形で値を求めるのはとても気持ち悪いことです.
更に気持ち悪いのは、会社の中のロジックが方程式のグループを使って解くことになって、仕方なく、インターネットでJavaコードを探しました.
アルゴリズム配列が1から始まるなんて誰が知っていますか.
はい、わかりました.私はあなたを直します.
デバッグに合格しました.
記念にコードを残します.
 
package com;

public class EquationSolver {

	/**
	 * @        
	 */
	static double a[][];
	static double b[];
	static double x[];
	static int n;
	static int n2; //       
    public static void Elimination(){  //  
    	PrintA();
		for(int k=0;k<n;k++)
		{
			Wrap(k);
			for(int i=k+1;i<n;i++)
			{
				double l=a[i][k]/a[k][k];
				a[i][k]=0.0;
				for(int j=k+1;j<n;j++)
					a[i][j]=a[i][j]-l*a[k][j];
				b[i]=b[i]-l*b[k];
			}
			System.out.println(" "+k+"    :");
			PrintA();
		}
				
	}
    public static void Back()//  
    {
    	x[n-1]=b[n-1]/a[n-1][n-1];
    	for(int i=n-2;i>=0;i--)
    		x[i]=(b[i]-jisuan(i))/a[i][i];
    }
    public static double jisuan(int i){
    	double he=0.0;
    	for(int j=i;j<=n-1;j++)
    		he=he+x[j]*a[i][j];
    	return he;
    }
    public static void Wrap(int k){//  
    	double max=Math.abs(a[k][k]);
    	int n1=k;                   //       
    	for(int i=k+1;i<n;i++)     //       
    	{
    		if(Math.abs(a[i][k])>max){
    			n1=i;
    			max=Math.abs(a[i][k]);
    		}
    	}
    	if(n1!=k)
    	{
    		n2++;
    	System.out.println(" k="+k+" ,      :"+k+" "+n1);
    	for(int j=k;j<n;j++)  //  a  
    	{
    		double x1;
    		x1=a[k][j];
    		a[k][j]=a[n1][j];
    		a[n1][j]=x1;
    	}
    	double b1;   //  b  
		b1=b[k];
		b[k]=b[n1];
		b[n1]=b1;
		System.out.println("   :");
		PrintA();
    	}
    }
    public static void Determinant(){//    
    	double DM=1.0;
    	for(int i=0;i<n;i++)
    	{
    		double a2=a[i][i];
    	    DM=DM*a2;
    	}
    	double n3=(double)n2;
    	DM=DM*Math.pow(-1.0, n3);
    	System.out.println("          :det A = "+DM);
    }
    public static void PrintA(){//      
    	System.out.println("     :");
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    			System.out.print(a[i][j]+"    ");
    		System.out.print(b[i]+"    ");
    		System.out.print("
"); } } public static void Print(){// System.out.println(" :"); for(int i=0;i<n;i++) System.out.println("x"+i+" = "+x[i]); } public static void main(String[] args) { //Scanner as=new Scanner(System.in); System.out.println(" :"); //n=as.nextInt(); n=2; a=new double[n][n]; b=new double[n]; x=new double[n]; double inputA[][] = {{1,1},{1,-1}}; a = inputA; double inputB[] = {2,0}; b = inputB; double inputX[] = {1,1}; System.out.println(" a:"); // for(int i=1;i<=n;i++) // for(int j=1;j<=n;j++) // a[i][j]=as.nextDouble(); System.out.println(" b:"); // for(int i=1;i<=n;i++) // b[i]=as.nextDouble(); Elimination(); Back(); Print(); Determinant(); } }