高斯赛德尔迭代 java
时间: 2023-11-09 12:09:52 浏览: 70
斯赛德尔迭代是一种求解线性方程组的迭代方法,它可以用于求解系数矩阵为对称正定矩阵的线性方程组。下面是使用Java实现高斯赛德尔迭代的示例代码:
```java
public class GaussSeidel {
public static void main(String[] args) {
double[][] A = {{4, -1, 0, 3},
{1, 15.5, 3, 8},
{0, -1.3, -4, 1.1},
{14, 5, -2, 30}};
double[] b = {1, 1, 1, 1};
double[] x = {0, 0, 0, 0};
int maxIter = 100;
double tol = 1e-6;
gaussSeidel(A, b, x, maxIter, tol);
}
public static void gaussSeidel(double[][] A, double[] b, double[] x, int maxIter, double tol) {
int n = A.length;
for (int k = 0; k < maxIter; k++) {
double norm = 0;
for (int i = 0; i < n; i++) {
double sum = b[i];
for (int j = 0; j < n; j++) {
if (j != i) {
sum -= A[i][j] * x[j];
}
}
double prev = x[i];
x[i] = sum / A[i][i];
norm += Math.abs(x[i] - prev);
}
if (norm < tol) {
System.out.println("Converged after " + (k + 1) + " iterations.");
break;
}
}
System.out.println("Solution: ");
for (int i = 0; i < n; i++) {
System.out.printf("%.4f\n", x[i]);
}
}
}
```
在这个示例中,我们定义了一个名为`gaussSeidel`的方法,它接受系数矩阵`A`、常数向量`b`、初始解向量`x`、最大迭代次数`maxIter`和收敛容差`tol`作为输入。在方法中,我们使用高斯赛德尔迭代的公式进行迭代,直到解向量的变化量小于收敛容差或达到最大迭代次数为止。最后,我们输出求解结果。
阅读全文