使用LU分解求解线性方程组的Java程序

时间:2016-02-23 04:03:47

标签: java

任何人都可以帮我编写一个使用LU分解(最大矩阵大小为100x100)解决线性方程组的程序吗?我是编程新手,但我一直在观看教程视频,所以我了解Java中的一些基本知识。我也在使用Eclipse和Windows Builder。我很难在数组中使用for循环(我在大多数java文档中都看到过),所以我在寻求你的帮助。我已经完成了解决二次方程等的程序,这是我项目所需的最后一个。顺便说一句,我是土木工程专业的学生。 TIA!

这是我在3x3矩阵中所做的。我计划这样做直到100x100。 -.-

   if(n==3) {


        double [][]l = new double[n][n];

        l[0][0] = l[1][1] = l[2][2] = 1;

        l[0][1] = l[0][2] = l[1][2] = 0;


        double [][]u = new double[n][n];

        u[1][0] = u[2][0] = u[2][1] = 0;



        u[0][0] = mat[0][0];

        u[0][1] = mat[0][1];

        u[0][2] = mat[0][2];



        l[1][0] = mat[1][0]/mat[0][0];

        u[1][1] = mat[1][1] - (l[1][0]*u[0][1]);

        u[1][2] = mat[1][2] - (l[1][0]*u[0][2]);



        l[2][0] = mat[2][0]/u[0][0];

        l[2][1] = (mat[2][1] - l[2][0]*u[0][1])/u[1][1];


        u[2][2] = mat[2][2] - (l[2][0]*u[0][2]) - (l[2][1]*u[1][2]);


        double []b = new double[n]; // for b prime
        b [0] = bs [0] ;
        b [1] = bs [1] - (l [1] [0] * b [0])    ;
        b [2] = bs [2] - (l [2][0] * b [0]) - (l [2][1] * b [1]);

        double []x = new double[n];  // for Xs
        x [2] = b[2] / u [2][2];
        x [1] = ((-u [1][2] * x [2]) + b[1]) / u [1][1];
        x [0] = (-(u [0][1] * x [1]) - (u [0][2] * x [2]) + b [0]) / u [0][0];

1 个答案:

答案 0 :(得分:0)

这将是尝试概括你可以做的事情,并使用循环来避免必须用特定索引手动编码每一行。

例如,这部分:

u[0][0] = mat[0][0];
u[0][1] = mat[0][1];
u[0][2] = mat[0][2];

可以重构为:

for(int i = 0; i <=2; i++) {
    u[0][i] = mat[0][i];
}

请注意for循环,我说:

for(int i = 0; i <=2; i++)

2是矩阵的大小(数组为0索引,因此2表示3x3数组,数组索引为0,1,2。

你将能够在一些地方实现这样的循环,并且希望有足够的地方可以概括所有代码以适用于任何大小的矩阵。如果你遇到困难,请看你如何去回发。