任何人都可以帮我编写一个使用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];
答案 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。
你将能够在一些地方实现这样的循环,并且希望有足够的地方可以概括所有代码以适用于任何大小的矩阵。如果你遇到困难,请看你如何去回发。