用c语言实现雅可比迭代法解方程组
时间: 2023-10-25 20:08:11 浏览: 156
C++实现雅可比迭代法求解方程组
3星 · 编辑精心推荐
雅可比迭代法是一种常用的求解线性方程组的方法,其基本思想是将方程组转化为对角线元素为主元的形式,然后通过不断迭代求解。
以下是用C语言实现雅可比迭代法求解线性方程组的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 100
#define EPS 1e-6
double A[MAXN][MAXN], b[MAXN], x[MAXN];
int n;
void input() {
printf("请输入方程组的阶数:");
scanf("%d", &n);
printf("请输入方程组的系数矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%lf", &A[i][j]);
}
}
printf("请输入方程组的常数项:\n");
for (int i = 0; i < n; i++) {
scanf("%lf", &b[i]);
}
}
void jacobi() {
double norm, err;
int k = 0;
do {
norm = 0;
for (int i = 0; i < n; i++) {
x[i] = b[i];
for (int j = 0; j < n; j++) {
if (i != j) {
x[i] -= A[i][j] * x[j];
}
}
x[i] /= A[i][i];
err = fabs(x[i] - b[i]);
norm = (err > norm) ? err : norm;
}
k++;
} while (norm > EPS && k < 1000);
}
void output() {
printf("方程组的解为:\n");
for (int i = 0; i < n; i++) {
printf("x[%d] = %.6lf\n", i, x[i]);
}
}
int main() {
input();
jacobi();
output();
return 0;
}
```
在这段代码中,我们先输入方程组的阶数、系数矩阵和常数项,然后通过雅可比迭代法求解出方程组的解,并输出结果。具体来说,`jacobi()`函数中实现了雅可比迭代的核心算法,其中`norm`用于记录当前解的误差,`k`用于记录迭代次数。最后通过`output()`函数输出方程组的解。
需要注意的是,这里只是一个简单的示例代码,实际应用中还需要对输入数据进行检查等操作,以保证程序的健壮性。
阅读全文