高斯-赛德尔迭代法c语言
时间: 2023-11-25 07:07:19 浏览: 155
高斯-赛德尔迭代法是一种用于解线性方程组的迭代算法,其基本思想是通过不断更新方程组的解来逐步逼近最终解。下面是一个用C语言实现的高斯-赛德尔迭代法的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 矩阵的大小
#define MAX_ITER 1000 // 最大迭代次数
#define TOL 1e-6 // 迭代精度
int main()
{
double A[N][N] = {{4, 1, 2}, {3, 5, 1}, {1, 1, 3}}; // 系数矩阵
double b[N] = {4, 7, 3}; // 常数项向量
double x[N] = {0}; // 初始解
double x_old[N]; // 存储上一次迭代的解
int iter = 0; // 迭代次数
double err; // 当前迭代的误差
do {
iter++;
for (int i = 0; i < N; i++) {
x_old[i] = x[i];
double sum1 = 0, sum2 = 0;
for (int j = 0; j < i; j++) {
sum1 += A[i][j] * x[j];
}
for (int j = i + 1; j < N; j++) {
sum2 += A[i][j] * x_old[j];
}
x[i] = (b[i] - sum1 - sum2) / A[i][i];
}
err = 0;
for (int i = 0; i < N; i++) {
err += fabs(x[i] - x_old[i]);
}
} while (iter < MAX_ITER && err > TOL);
if (iter >= MAX_ITER) {
printf("迭代次数达到最大值,可能未收敛!\n");
} else {
printf("迭代 %d 次得到解:\n", iter);
for (int i = 0; i < N; i++) {
printf("x%d = %.4lf\n", i, x[i]);
}
}
return 0;
}
```
在这个示例代码中,我们定义了一个3x3的系数矩阵A和一个长度为3的常数项向量b,这个方程组的解可以通过高斯-赛德尔迭代法来求解。在迭代过程中,我们先计算出当前解向量的每个分量,然后再计算当前迭代的误差,如果误差小于预设精度TOL或者迭代次数达到最大值MAX_ITER,则停止迭代。最后输出得到的解向量。
阅读全文