c语言 高斯迭代法
时间: 2023-07-02 19:19:01 浏览: 187
高斯迭代法是一种求解线性方程组的迭代算法。其基本思想是通过逐步逼近线性方程组的解,从而获得精确解。下面是C语言实现高斯迭代法的代码:
```
#include <stdio.h>
#include <math.h>
#define N 3 // 线性方程组的未知数个数
#define MAX_ITER 100 // 最大迭代次数
#define EPS 0.0001 // 精度要求
int main()
{
double a[N][N] = { { 10, 2, 1 }, { 1, 5, 1 }, { 2, 3, 10 } }; // 线性方程组的系数矩阵
double b[N] = { 7, -8, 6 }; // 线性方程组的常数矩阵
double x[N] = { 0 }; // 初始化未知数向量
double x0[N] = { 0 }; // 初始化迭代向量
int k, i, j; // 循环变量
double sum; // 求和变量
for (k = 0; k < MAX_ITER; k++) // 迭代计算
{
for (i = 0; i < N; i++) // 计算新的迭代向量
{
sum = 0;
for (j = 0; j < N; j++)
{
if (j != i)
{
sum += a[i][j] * x[j];
}
}
x0[i] = (b[i] - sum) / a[i][i];
}
// 判断是否满足精度要求
int flag = 1;
for (i = 0; i < N; i++)
{
if (fabs(x[i] - x0[i]) > EPS)
{
flag = 0;
break;
}
}
if (flag) // 迭代结束
{
break;
}
for (i = 0; i < N; i++) // 更新未知数向量
{
x[i] = x0[i];
}
}
if (k == MAX_ITER) // 迭代次数达到最大值,未达到精度要求
{
printf("迭代次数达到最大值,未达到精度要求。\n");
}
else // 输出迭代结果
{
printf("线性方程组的解为:\n");
for (i = 0; i < N; i++)
{
printf("x[%d] = %f\n", i, x0[i]);
}
}
return 0;
}
```
以上代码实现了一个简单的高斯迭代法程序,可以求解3个未知数的线性方程组,你可以根据需要修改N的值,以求解更多未知数的线性方程组。