java实现高斯消元法解线性方程组
时间: 2023-09-02 19:14:19 浏览: 51
以下是Java代码实现高斯消元法解线性方程组:
```java
public class GaussianElimination {
public static void main(String[] args) {
double[][] A = {{2, 1, -1}, {4, -1, 1}, {-2, 5, 2}}; // 系数矩阵
double[] b = {3, 9, 1}; // 常数向量
int n = A.length; // 方程个数
double[] x = solve(A, b, n); // 求解
// 输出解向量
System.out.print("x = ");
for (int i = 0; i < n; i++) {
System.out.print(x[i] + " ");
}
}
/**
* 高斯消元法求解线性方程组Ax=b
* @param A 系数矩阵
* @param b 常数向量
* @param n 方程个数
* @return 解向量
*/
public static double[] solve(double[][] A, double[] b, int n) {
double[][] Ab = new double[n][n+1]; // 增广矩阵
double[] x = new double[n]; // 解向量
// 构造增广矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
Ab[i][j] = A[i][j];
}
Ab[i][n] = b[i];
}
// 高斯消元
for (int k = 0; k < n-1; k++) {
// 找到主元所在行
int maxIndex = k;
double max = Ab[k][k];
for (int i = k+1; i < n; i++) {
if (Math.abs(Ab[i][k]) > Math.abs(max)) {
maxIndex = i;
max = Ab[i][k];
}
}
// 交换主元所在行和第k行
if (maxIndex != k) {
double[] temp = Ab[k];
Ab[k] = Ab[maxIndex];
Ab[maxIndex] = temp;
}
// 消元
for (int i = k+1; i < n; i++) {
double factor = Ab[i][k] / Ab[k][k];
for (int j = k+1; j <= n; j++) {
Ab[i][j] = Ab[i][j] - factor * Ab[k][j];
}
Ab[i][k] = 0;
}
}
// 回代求解
for (int i = n-1; i >= 0; i--) {
double sum = 0;
for (int j = i+1; j < n; j++) {
sum += Ab[i][j] * x[j];
}
x[i] = (Ab[i][n] - sum) / Ab[i][i];
}
return x;
}
}
```
在上面的代码中,solve方法接收系数矩阵A、常数向量b和方程个数n作为参数,返回解向量x。在solve方法中,首先构造增广矩阵Ab,然后进行高斯消元,最后进行回代求解。在高斯消元的过程中,首先找到主元所在行并交换主元所在行和第k行,然后进行消元。在回代求解的过程中,从最后一行开始,依次求解每个未知数的值。