c语言高斯赛德尔迭代解方程
时间: 2023-10-26 13:16:33 浏览: 91
高斯赛德尔迭代法是一种迭代法,用于求解线性方程组。其基本思想是在每一次迭代中,先用已知的解更新未知量的值,然后再用新的未知量值更新解的值。
以下是使用高斯赛德尔迭代法求解线性方程组的C语言程序:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 矩阵维数
int main()
{
int i, j, k, flag;
double eps = 1e-5; // 精度控制
double x[N] = {0}, x0[N] = {0}; // x为当前迭代解,x0为上一次迭代解
double a[N][N] = {{4, 1, 2}, {3, 5, 1}, {1, 1, 3}}; // 系数矩阵
double b[N] = {4, 7, 3}; // 常数向量
for (i = 0; i < N; i++) {
x[i] = b[i] / a[i][i]; // 初始化解
}
do {
flag = 1; // 标志位,记录是否满足精度要求
for (i = 0; i < N; i++) {
x0[i] = x[i]; // 保存上一次迭代解
x[i] = b[i]; // 计算当前迭代解
for (j = 0; j < N; j++) {
if (j != i) {
x[i] -= a[i][j] * x[j];
}
}
x[i] /= a[i][i]; // 更新当前迭代解
if (fabs(x[i] - x0[i]) > eps) {
flag = 0; // 如果有一个未知量的误差超过eps,说明精度不满足要求
}
}
} while (!flag);
printf("The solution is:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %f\n", i, x[i]);
}
return 0;
}
```
上述程序中,系数矩阵和常数向量分别定义为数组a和b,精度控制用eps表示。在初始化解时,假设每个未知量的值都为0。在每次迭代中,先用已知的解更新未知量的值,然后再用新的未知量值更新解的值。迭代直到所有未知量的误差都小于eps。最后输出解。
阅读全文