Java编程Gauss-Seidel迭代法
时间: 2023-07-05 20:35:54 浏览: 103
Jacobi迭代算法_jacobi迭代_Jacobi迭代法_SOR迭代法_Gauss-Seidel迭代法_迭代法_
5星 · 资源好评率100%
下面是Java代码实现Gauss-Seidel迭代法求解线性方程组的过程:
```
public class GaussSeidel {
public static void main(String[] args) {
// 定义线性方程组的系数矩阵A和右端向量b
double[][] A = {{4, 1, 1}, {2, 5, 2}, {1, 2, 4}};
double[] b = {4, 8, 9};
// 定义初始解向量x0和迭代次数
double[] x0 = {0, 0, 0};
int k = 0;
// 定义迭代精度
double eps = 1e-6;
// 定义最大迭代次数
int maxIter = 100;
// 开始迭代
while (true) {
double[] x = new double[3];
for (int i = 0; i < 3; i++) {
double sum1 = 0;
double sum2 = 0;
for (int j = 0; j < i; j++) {
sum1 += A[i][j] * x[j];
}
for (int j = i + 1; j < 3; j++) {
sum2 += A[i][j] * x0[j];
}
x[i] = (b[i] - sum1 - sum2) / A[i][i];
}
// 计算相对误差
double error = 0;
for (int i = 0; i < 3; i++) {
error += Math.abs((x[i] - x0[i]) / x[i]);
}
// 判断是否满足精度要求
if (error < eps) {
break;
}
x0 = x;
k++;
// 判断是否超过最大迭代次数
if (k > maxIter) {
System.out.println("Iterative method failed to converge!");
break;
}
}
// 输出解向量
System.out.println("The solution vector is:");
for (int i = 0; i < 3; i++) {
System.out.println("x[" + i + "] = " + x0[i]);
}
}
}
```
在上面的代码中,我们定义了线性方程组的系数矩阵和右端向量,初始解向量和迭代精度,以及最大迭代次数。然后,在while循环中执行Gauss-Seidel迭代公式,计算新的解向量,并判断相对误差是否小于精度要求。如果满足要求,就输出解向量;如果不满足要求,就继续迭代,直到达到最大迭代次数或者迭代失败。
需要注意的是,Gauss-Seidel迭代法的计算公式中,需要使用当前迭代得到的元素值来更新后续的元素值。因此,在计算新的解向量时,需要先计算已经更新的元素值,然后再计算未更新的元素值。
阅读全文