jacobi迭代法c语言代码
时间: 2023-08-12 08:07:53 浏览: 87
下面是Jacobi迭代法的C语言代码实现:
```c
#include <stdio.h>
#include <math.h>
#define N 4 // 迭代次数
int main() {
double a[N][N] = {{10, -1, 2, 0},
{-1, 11, -1, 3},
{2, -1, 10, -1},
{0, 3, -1, 8}}; // 系数矩阵
double b[N] = {6, 25, -11, 15}; // 常数矩阵
double x[N] = {0, 0, 0, 0}; // 解向量
double x1[N]; // 保存每次迭代的解向量
double eps = 1e-6; // 精度
for (int k = 0; k < N; k++) {
for (int i = 0; i < N; i++) {
double sum = 0;
for (int j = 0; j < N; j++) {
if (j != i) {
sum += a[i][j] * x[j];
}
}
x1[i] = (b[i] - sum) / a[i][i];
}
int flag = 1;
for (int i = 0; i < N; i++) {
if (fabs(x1[i] - x[i]) >= eps) {
flag = 0;
break;
}
}
if (flag) {
break;
}
for (int i = 0; i < N; i++) {
x[i] = x1[i];
}
}
printf("迭代次数:%d\n", N);
printf("解向量:\n");
for (int i = 0; i < N; i++) {
printf("%.6lf\n", x1[i]);
}
return 0;
}
```
代码实现中,首先定义了系数矩阵 `a`、常数矩阵 `b` 和解向量 `x`,以及保存每次迭代的解向量的数组 `x1`,并设置了迭代次数 `N` 和精度 `eps`。
接下来,使用两层循环来计算每次迭代的解向量 `x1`,并使用一个标志变量 `flag` 判断是否满足精度要求,如果满足则跳出迭代循环。最后输出迭代次数和解向量。
注意:上面的代码实现中,使用了默认的系数矩阵和常数矩阵,如果需要求解其他矩阵的线性方程组,需要根据实际情况进行修改。
阅读全文