高斯赛德尔迭代法c,代码中标明迭代次数
时间: 2023-10-27 12:07:02 浏览: 80
以下是使用高斯赛德尔迭代法求解线性方程组的C语言代码,其中使用了一个计数器来标明迭代次数:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 定义方程组的行数和列数
#define MAX_ITER 100 // 最大迭代次数
#define TOL 1e-6 // 收敛误差限
int main()
{
double A[N][N] = {{3, -1, 1}, {2, 4, -1}, {-1, 2, 5}}; // 系数矩阵
double b[N] = {4, 5, 6}; // 常数向量
double x[N] = {0, 0, 0}; // 初始解向量
double x_new[N]; // 存储迭代后的解向量
int iter = 0; // 迭代次数计数器
while (iter < MAX_ITER)
{
for (int i = 0; i < N; i++)
{
double s = 0;
for (int j = 0; j < N; j++)
{
if (j != i)
{
s += A[i][j] * x[j];
}
}
x_new[i] = (b[i] - s) / A[i][i];
}
double err = 0;
for (int i = 0; i < N; i++)
{
err += fabs(x_new[i] - x[i]);
x[i] = x_new[i];
}
if (err < TOL)
{
break;
}
iter++;
}
printf("Solution:\n");
for (int i = 0; i < N; i++)
{
printf("x[%d] = %f\n", i, x[i]);
}
printf("Number of iterations: %d\n", iter);
return 0;
}
```
在上述代码中,我们使用了一个`iter`变量来记录迭代次数,每经过一次循环`iter`的值就会加`1`,直到达到最大迭代次数`MAX_ITER`或者满足收敛条件时,迭代过程才会停止。最终程序会输出求解得到的解向量以及迭代次数。
阅读全文