Java编程初体验:列主元素高斯消去法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyangxueit/article/details/50853603

前不久用matlab写了一个关于列主元素高斯消元法的小程序,今天将它移植到java上,在编程过程中深深地体会到matlab在处理矩阵数组问题上的优越性(这就是它叫做矩阵实验室的原因吧),程序大体完成了1.选主元2.化为上三角3.回代 的三个主要过程,不过细节上还存在个别致命漏洞,现在先暂且放在blog上,以后有时间再更改(也希望有大神看到,指点一下小白,感激不尽)

package gauss;
import java.util.Scanner;
public class gauss {
public static void main(String args[]){
    Scanner input1=new Scanner(System.in);
    juzhen M=new juzhen();
    int A[][];  
    A=M.shuru();
    int B[]=new int[A.length];
    System.out.println("请输入常系数");
    for(int i=0;i<B.length;i++){
        B[i]=input1.nextInt();
    }
    input1.close();
    for(int i=0;i<A[0].length;i++){
        for(int j=i;j<B.length;j++)
        {
            if (Math.abs(A[j][i])>=Math.abs(A[i][i]))
            {
                int temp=0,btemp=0;
                for(int k=0;k<A[0].length;k++)
                {
                    temp=A[j][i];
                    A[j][i]=A[i][i];
                    A[i][i]=temp;   
                    btemp=B[j];
                    B[j]=B[i];
                    B[i]=btemp;
                }
            }
        }
    }
    for(int l=0;l<A.length;l++){//化为上三角矩阵
        for(int k=l;k<A[0].length;k++)
        {
             A[l][k]=A[l][k]-(A[l][k]/A[l][l])*A[l][k];
             B[l]=B[l]-(A[l][k]/A[l][l])*B[l];
        }
    }
    int n=B.length;
    int sum=0;
        B[n]=B[n]/A[n][n];
        n--;
        for(;n>=0;n--){
            for(int k=n+1;k<B.length;k++){
                sum=sum+A[n+1][k]*B[k];
            }
            B[n]=B[n]-sum/A[n][n];
        }
    int x[]=new int[B.length];
    x=B;
        System.out.println("该方程的解为:"+x);
}
}
class juzhen{
    juzhen(){
    }
    int[][] shuru (){
        Scanner input=new Scanner(System.in);
       int m,n;
        System.out.println("请输入矩阵的阶数(请保证为方阵)");
        m=input.nextInt();
        n=input.nextInt();
        int M[][]=new int[m][n];
        System.out.println("输入矩阵的值");
        for(int i=0;i<M.length;i++)
        {
            for(int j=0;j<M[i].length;j++)
                M[i][j]=input.nextInt();
        }
        input.close();
        return M;
    }
}

错误之后再改吧。。。。。。

猜你喜欢

转载自blog.csdn.net/liyangxueit/article/details/50853603