高斯-赛德尔迭代法c语言
时间: 2023-11-25 20:07:21 浏览: 92
高斯-赛德尔迭代法是一种求解线性方程组的方法,以下是使用C语言实现该算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 100 // 最大迭代次数
#define eps 1e-6 // 精度要求
int main()
{
int n, i, j, k, cnt;
double a[MAXN][MAXN], b[MAXN], x[MAXN], y[MAXN];
printf("请输入线性方程组的阶数:");
scanf("%d", &n);
printf("请输入线性方程组的系数矩阵(按行输入):\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &a[i][j]);
}
}
printf("请输入线性方程组的常数向量:\n");
for (i = 0; i < n; i++) {
scanf("%lf", &b[i]);
}
for (i = 0; i < n; i++) {
x[i] = 0;
}
cnt = 0;
while (1) {
for (i = 0; i < n; i++) {
y[i] = b[i];
for (j = 0; j < n; j++) {
if (i != j) {
y[i] -= a[i][j] * x[j];
}
}
y[i] /= a[i][i];
}
double max_diff = 0;
for (i = 0; i < n; i++) {
double diff = fabs(x[i] - y[i]);
if (diff > max_diff) {
max_diff = diff;
}
x[i] = y[i];
}
cnt++;
if (max_diff < eps || cnt >= MAXN) {
break;
}
}
printf("高斯-赛德尔迭代法的迭代次数为:%d\n", cnt);
printf("线性方程组的解为:\n");
for (i = 0; i < n; i++) {
printf("%lf\n", x[i]);
}
return 0;
}
```
在该代码中,我们通过输入系数矩阵和常数向量,然后采用高斯-赛德尔迭代法求解线性方程组的解。其中,MAXN为最大迭代次数,eps为精度要求,当迭代次数达到MAXN或者解的相邻两次迭代之差小于eps时,迭代结束。
阅读全文