JAVA用List实现高斯消元法
时间: 2024-05-08 10:17:19 浏览: 39
以下是使用JAVA的List实现高斯消元法的代码:
```
import java.util.ArrayList;
import java.util.List;
public class GaussElimination {
public static void main(String[] args) {
// 测试数据
double[][] matrix = {{2, 1, -1, 8}, {-3, -1, 2, -11}, {-2, 1, 2, -3}};
int n = matrix.length;
// 高斯消元求解
List<Double> solution = gaussElimination(matrix, n);
// 输出解
System.out.println("Solution: " + solution);
}
/**
* 高斯消元求解线性方程组
*
* @param matrix 系数矩阵
* @param n 方程组的未知数个数
* @return 方程组的解
*/
public static List<Double> gaussElimination(double[][] matrix, int n) {
List<Double> solution = new ArrayList<Double>();
// 前向消元
for (int k = 0; k < n - 1; k++) {
for (int i = k + 1; i < n; i++) {
double factor = matrix[i][k] / matrix[k][k];
for (int j = k; j < n + 1; j++) {
matrix[i][j] -= factor * matrix[k][j];
}
}
}
// 回带求解
for (int i = n - 1; i >= 0; i--) {
double sum = 0;
for (int j = i + 1; j < n; j++) {
sum += matrix[i][j] * solution.get(n - j - 1);
}
double xi = (matrix[i][n] - sum) / matrix[i][i];
solution.add(xi);
}
// 反转解的顺序
int len = solution.size();
for (int i = 0; i < len / 2; i++) {
Double temp = solution.get(i);
solution.set(i, solution.get(len - i - 1));
solution.set(len - i - 1, temp);
}
return solution;
}
}
```
在该实现中,我们使用List<Double>来存储方程组的解。具体实现过程如下:
1. 前向消元:使用两个嵌套的for循环遍历系数矩阵的下三角部分,依次将每一行的主元以下的元素消成0;
2. 回带求解:从方程组的最后一行开始,依次求解每个未知数的值;
3. 反转解的顺序:因为我们是从最后一行开始求解的,所以解的顺序与未知数的顺序是相反的,需要将解的顺序反转。
需要注意的是,在回带求解过程中,我们使用了List的get()和add()方法来获取和添加解的值。这里我们采用了反转解的顺序的方法,将最终的解按照未知数的顺序排列。
阅读全文