G- S迭代 C语言
时间: 2023-08-02 15:10:34 浏览: 57
G-S迭代是一种线性方程组求解的方法,可以用C语言实现。通常需要定义一个数组来存储系数矩阵以及右侧向量,然后按照迭代公式进行迭代计算,直到达到一定的精度要求或者迭代次数限制。下面是一个简单的G-S迭代的C语言实现示例:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 线性方程组的维度
int main() {
double A[N][N] = {{4, 1, 0}, {1, 4, 1}, {0, 1, 4}}; // 系数矩阵
double b[N] = {1, 2, 3}; // 右侧向量
double x[N] = {0, 0, 0}; // 初始解向量
double x_old[N]; // 记录上一次迭代的解向量
double eps = 1e-6; // 精度要求
int max_iter = 100; // 最大迭代次数
for (int k = 0; k < max_iter; k++) {
for (int i = 0; i < N; i++) {
double sum = 0;
for (int j = 0; j < N; j++) {
if (j != i) {
sum += A[i][j] * x[j];
}
}
x_old[i] = x[i];
x[i] = (b[i] - sum) / A[i][i];
}
double err = 0;
for (int i = 0; i < N; i++) {
err += pow(x[i] - x_old[i], 2);
}
err = sqrt(err);
if (err < eps) {
printf("Converged after %d iterations.\n", k + 1);
break;
}
}
printf("Solution: [");
for (int i = 0; i < N; i++) {
printf("%f", x[i]);
if (i < N - 1) {
printf(", ");
}
}
printf("]\n");
return 0;
}
```
这里假设线性方程组的系数矩阵已经存储在一个二维数组`A`中,右侧向量存储在一个一维数组`b`中。初始解向量`x`和上一次迭代的解向量`x_old`都初始化为0。在每一轮迭代中,按照G-S迭代公式计算新的解向量`x`,同时计算误差`err`,如果误差小于精度要求`eps`,则认为已经收敛,退出迭代。如果达到最大迭代次数`max_iter`仍未收敛,则认为迭代失败。最终输出求解结果`x`。