用高斯-赛德尔迭代法java求解方程组 10x1-x2+2x3=6 -x1+11x2-x3+3x4=25 2x1-x2+10x3-x4=-11 3x2-x1+8x4=15
时间: 2023-12-21 22:07:43 浏览: 83
好的,我可以帮你解决这个问题。以下是使用高斯-赛德尔迭代法求解该方程组的Java代码:
```java
public class GaussSeidel {
private static final double EPSILON = 1e-10; // 精度要求
public static void main(String[] args) {
double[][] a = {{10, -1, 2, 0}, {-1, 11, -1, 3}, {2, -1, 10, -1}, {0, 3, -1, 8}}; // 方程组系数矩阵
double[] b = {6, 25, -11, 15}; // 方程组常数向量
double[] x = new double[b.length]; // 初始化解向量
int maxIterations = 1000; // 最大迭代次数
solve(a, b, x, maxIterations); // 求解方程组
// 输出解向量
for (int i = 0; i < x.length; i++) {
System.out.printf("x%d = %.8f\n", i + 1, x[i]);
}
}
private static void solve(double[][] a, double[] b, double[] x, int maxIterations) {
int n = b.length;
for (int k = 0; k < maxIterations; k++) {
double maxError = 0.0;
for (int i = 0; i < n; i++) {
double oldx = x[i]; // 记录旧值
double sum = b[i];
for (int j = 0; j < n; j++) {
if (i != j) {
sum -= a[i][j] * x[j];
}
}
x[i] = sum / a[i][i]; // 更新解向量
double error = Math.abs(x[i] - oldx); // 计算误差
if (error > maxError) {
maxError = error;
}
}
// 如果误差已经小于精度要求则退出循环
if (maxError < EPSILON) {
break;
}
}
}
}
```
输出结果为:
```
x1 = 1.00000000
x2 = 2.00000000
x3 = -1.00000000
x4 = 1.00000000
```
这就是该方程组的一组解。希望能帮到你!
阅读全文