高斯赛德尔迭代法c
时间: 2023-10-31 10:04:12 浏览: 94
高斯—赛德尔迭代法_C++课程设计_源代码_亲测可用.zip
高斯赛德尔迭代法是一种求解线性方程组的迭代方法,其基本思想是将方程组中的每个未知数依次解出来,然后代入到其他方程中求解下一个未知数,直到所有未知数都求得为止。
以下是使用C语言实现高斯赛德尔迭代法的代码:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 方程组中未知数的个数
#define MAX_ITER 100 // 最大迭代次数
#define TOL 1e-6 // 精度要求
int main(void)
{
double a[N][N] = {{3, 1, 1}, {1, 4, 2}, {-2, -1, 5}}; // 系数矩阵
double b[N] = {5, 4, 1}; // 常数向量
double x[N] = {0, 0, 0}; // 迭代初值
int i, j, k;
double sum, diff;
for (k = 0; k < MAX_ITER; k++)
{
diff = 0.0;
for (i = 0; i < N; i++)
{
sum = 0.0;
for (j = 0; j < N; j++)
{
if (i != j) // 对角线上的元素为0
{
sum += a[i][j] * x[j];
}
}
double tmp = (b[i] - sum) / a[i][i]; // 求解第i个未知数
diff += fabs(tmp - x[i]);
x[i] = tmp; // 更新第i个未知数
}
if (diff < TOL) // 满足精度要求则结束迭代
{
break;
}
}
printf("The solution is:\n");
for (i = 0; i < N; i++)
{
printf("x[%d] = %f\n", i, x[i]);
}
return 0;
}
```
该代码中使用了一个三元方程组作为例子进行求解。在实际使用时,需要根据具体的问题进行修改。
阅读全文