jacobi迭代法c语言代码
时间: 2023-09-03 17:12:03 浏览: 137
Jacobi迭代法解方程(C语言代码)
5星 · 资源好评率100%
下面是 Jacobi 迭代法的 C 语言代码,用于求解线性方程组 Ax = b,其中 A 是系数矩阵,b 是常数向量,x 是未知向量:
```c
#include <stdio.h>
#include <math.h>
#define N 3
void jacobi(double a[][N], double b[], double x[], double eps, int nmax)
{
int i, j, k;
double sum;
double xnew[N];
for (k = 0; k < nmax; k++) {
for (i = 0; i < N; i++) {
sum = b[i];
for (j = 0; j < N; j++) {
if (j != i) {
sum -= a[i][j] * x[j];
}
}
xnew[i] = sum / a[i][i];
}
// 判断误差是否小于阈值,如果小于则退出迭代
if (sqrt((x[0] - xnew[0]) * (x[0] - xnew[0]) +
(x[1] - xnew[1]) * (x[1] - xnew[1]) +
(x[2] - xnew[2]) * (x[2] - xnew[2])) < eps) {
break;
}
// 更新 x 向量
for (i = 0; i < N; i++) {
x[i] = xnew[i];
}
}
}
int main()
{
double a[N][N] = {{10, -1, 2}, {-1, 11, -1}, {2, -1, 10}};
double b[N] = {6, 25, -11};
double x[N] = {0};
double eps = 1e-6;
int nmax = 1000;
int i;
jacobi(a, b, x, eps, nmax);
printf("Solution:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %lf\n", i, x[i]);
}
return 0;
}
```
在这个代码中,`jacobi` 函数使用 Jacobi 迭代法求解线性方程组。`a` 是系数矩阵,`b` 是常数向量,`x` 是未知向量,`eps` 是误差阈值,`nmax` 是最大迭代次数。迭代过程中,如果误差小于 `eps` 或者达到了最大迭代次数,则停止迭代。
在 `main` 函数中,我们定义了一个 3x3 的系数矩阵 `a` 和一个 3 维的常数向量 `b`,并将 `x` 向量初始化为 0。然后调用 `jacobi` 函数求解线性方程组,并输出结果。
阅读全文