用 Java程序写出jmu-java-m02-使用二维数组存储多元线性方程组
时间: 2024-05-09 21:20:32 浏览: 143
JAVA中的二维数组
5星 · 资源好评率100%
这里给出一个简单的 Java 程序,用二维数组存储多元线性方程组,求解其解集。
```java
public class LinearEquationSolver {
public static void main(String[] args) {
// 系数矩阵
double[][] A = {{2, 1, -1}, {4, -6, 0}, {-2, 7, 2}};
// 常数向量
double[] b = {1, -2, 7};
// 求解线性方程组
double[] x = solve(A, b);
// 输出解集
if (x != null) {
System.out.print("解集为:");
for (int i = 0; i < x.length; i++) {
System.out.print("x" + (i+1) + " = " + x[i] + " ");
}
} else {
System.out.println("方程组无解或有无穷多解!");
}
}
// 求解线性方程组
public static double[] solve(double[][] A, double[] b) {
int n = A.length; // 系数矩阵的行数
int m = A[0].length; // 系数矩阵的列数
// 判断系数矩阵是否为方阵
if (n != m) {
System.out.println("系数矩阵不是方阵,无法求解!");
return null;
}
// 构造增广矩阵
double[][] Ab = new double[n][m+1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
Ab[i][j] = A[i][j];
}
Ab[i][m] = b[i];
}
// 初等行变换,将增广矩阵化为阶梯形矩阵
for (int i = 0; i < n; i++) {
// 如果当前列的主元素为 0,则需要进行列交换
if (Ab[i][i] == 0) {
int k;
for (k = i+1; k < n; k++) {
if (Ab[k][i] != 0) {
break;
}
}
if (k == n) {
// 如果当前列所有元素都为 0,则无法继续消元
return null;
}
// 交换第 i 列和第 k 列
double tmp;
for (int j = 0; j <= m; j++) {
tmp = Ab[i][j];
Ab[i][j] = Ab[k][j];
Ab[k][j] = tmp;
}
}
// 将主元素化为 1
double k = Ab[i][i];
for (int j = i; j <= m; j++) {
Ab[i][j] /= k;
}
// 将下面的元素化为 0
for (int j = i+1; j < n; j++) {
double k2 = Ab[j][i];
for (int l = i; l <= m; l++) {
Ab[j][l] -= k2 * Ab[i][l];
}
}
}
// 回代,求解解集
double[] x = new double[n];
for (int i = n-1; i >= 0; i--) {
x[i] = Ab[i][m];
for (int j = i+1; j < n; j++) {
x[i] -= x[j] * Ab[i][j];
}
}
return x;
}
}
```
这个程序中,我们定义了一个 `solve` 方法来求解线性方程组,该方法的参数为系数矩阵 `A` 和常数向量 `b`,返回值为解集 `x`。程序先判断系数矩阵是否为方阵,如果不是,则无法求解。接下来,程序将增广矩阵 `Ab` 构造成阶梯形矩阵,然后通过回代求解解集。最后,在 `main` 方法中我们给出了一个具体的多元线性方程组,求解其解集并输出。
阅读全文