赛德尔迭代法c语言并输出迭代次数
时间: 2023-07-02 16:18:03 浏览: 37
好的,赛德尔迭代法(又称为超松弛迭代法)可以用于解线性方程组,以下是一个 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] = {{6, 1, 1}, {2, 4, 1}, {1, 1, 3}}; // 系数矩阵
double b[N] = {8, 7, 9}; // 常数项
double x[N] = {0}; // 初始解
double x_old[N] = {0}; // 旧解
int iter = 0; // 迭代次数
while (iter < MAX_ITER)
{
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] = (1 - 1.5) * x_old[i] + 1.5 * (b[i] - sum1 - sum2) / A[i][i];
}
double error = 0;
for (int i = 0; i < N; i++)
{
error += pow(x[i] - x_old[i], 2);
}
if (sqrt(error) < TOL)
{
break;
}
}
printf("Solution:\n");
for (int i = 0; i < N; i++)
{
printf("x[%d] = %lf\n", i, x[i]);
}
printf("Number of iterations: %d\n", iter);
return 0;
}
```
其中,超松弛因子取为 1.5。