高斯赛德尔迭代法c语言程序
时间: 2024-03-27 16:33:45 浏览: 81
高斯赛德尔迭代法是一种用于求解线性方程组的迭代算法,它是高斯-赛德尔迭代法的改进版本。下面是一个用C语言实现高斯赛德尔迭代法的简单示例程序:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 方程组的未知数个数
#define MAX_ITER 100 // 最大迭代次数
#define EPSILON 1e-6 // 精度要求
void gauss_seidel(double A[N][N], double b[N], double x[N]) {
int i, j, iter;
double sum;
for (iter = 0; iter < MAX_ITER; iter++) {
for (i = 0; i < N; i++) {
sum = 0.0;
for (j = 0; j < N; j++) {
if (j != i) {
sum += A[i][j] * x[j];
}
}
x[i] = (b[i] - sum) / A[i][i];
}
// 判断是否满足精度要求
double error = 0.0;
for (i = 0; i < N; i++) {
double diff = fabs(x[i] - b[i]);
if (diff > error) {
error = diff;
}
}
if (error < EPSILON) {
break;
}
}
}
int main() {
double A[N][N] = {{4, -1, 1},
{2, 5, -2},
{1, 1, 3}};
double b[N] = {5, 9, 7};
double x[N] = {0}; // 初始解
gauss_seidel(A, b, x);
printf("Solution:\n");
for (int i = 0; i < N; i++) {
printf("x[%d] = %.6f\n", i, x[i]);
}
return 0;
}
```
这个程序实现了一个求解3个未知数的线性方程组的高斯赛德尔迭代法。其中,`A`是系数矩阵,`b`是常数向量,`x`是未知数向量。在`gauss_seidel`函数中,通过迭代更新`x`的值,直到满足精度要求或达到最大迭代次数。最后,在`main`函数中打印出求解得到的解。
阅读全文