c语言雅克比迭代法求方程组
时间: 2023-07-02 15:05:39 浏览: 132
运用雅克比迭代求线性方程组
雅克比迭代法是一种基于线性方程组的迭代方法,用于求解线性方程组的解。下面是使用雅克比迭代法求解线性方程组的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define N 3
int main()
{
double a[N][N+1] = {{2, 1, -1, 8},
{-3, -1, 2, -11},
{-2, 1, 2, -3}};
double x[N], x_old[N], error = 1e-6;
int i, j, k, flag;
for (i = 0; i < N; i++) {
x[i] = 0; // 初始化解向量
}
do {
flag = 1; // 标志位
for (i = 0; i < N; i++) {
x_old[i] = x[i]; // 保存上一轮迭代的值
x[i] = a[i][N] / a[i][i]; // 计算当前迭代的解向量
for (j = 0; j < N; j++) {
if (j == i) {
continue;
}
x[i] -= a[i][j] * x_old[j] / a[i][i]; // 更新解向量
}
if (fabs(x[i] - x_old[i]) > error) { // 判断误差
flag = 0;
}
}
} while (!flag);
for (i = 0; i < N; i++) {
printf("x[%d] = %lf\n", i, x[i]); // 输出解向量
}
return 0;
}
```
在这个例子中,我们要求解以下线性方程组:
```
2x1 + x2 - x3 = 8
-3x1 - x2 + 2x3 = -11
-2x1 + x2 + 2x3 = -3
```
代码中的 `a` 数组存储了系数矩阵 `A` 和常数向量 `b`,`x` 数组存储了解向量 `x`。在主循环中,首先将解向量初始化为零向量,然后进行迭代计算,直到误差小于预设值为止。在每一轮迭代中,我们先保存上一轮迭代的解向量,然后根据雅克比迭代公式计算当前迭代的解向量,最后判断当前解向量与上一轮迭代的解向量之间的误差是否小于预设值。如果误差大于预设值,则继续迭代;否则退出循环,输出最终的解向量。
需要注意的是,雅克比迭代法只适用于对角线元素不为零的情况。如果系数矩阵中存在多个对角线元素为零的情况,就需要使用其他的迭代方法,比如高斯-赛德尔迭代法或者超松弛迭代法。
阅读全文