jacobi迭代算法c语言
时间: 2023-11-06 13:04:06 浏览: 66
下面是 Jacobi 迭代算法的 C 语言代码实现:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 矩阵的大小
int main() {
double A[N][N] = {{5, 1, 1}, {1, 4, 1}, {1, 1, 3}}; // 矩阵 A
double b[N] = {10, 10, 10}; // 向量 b
double x[N] = {0, 0, 0}; // 初始解
double x_new[N]; // 新解
double eps = 1e-6; // 精度要求
int max_iter = 1000; // 最大迭代次数
int k = 0;
double delta = 0;
do {
delta = 0;
for (int i = 0; i < N; i++) {
x_new[i] = b[i];
for (int j = 0; j < N; j++) {
if (j != i) {
x_new[i] -= A[i][j] * x[j];
}
}
x_new[i] /= A[i][i];
delta += fabs(x_new[i] - x[i]);
}
for (int i = 0; i < N; i++) {
x[i] = x_new[i];
}
k++;
} while (delta > eps && k < max_iter);
// 输出解
printf("The solution is:\n");
for (int i = 0; i < N; i++) {
printf("x[%d] = %lf\n", i, x[i]);
}
return 0;
}
```
这里以求解下面的线性方程组为例:
$$
\begin{cases}
5x_1+x_2+x_3=10 \\
x_1+4x_2+x_3=10 \\
x_1+x_2+3x_3=10 \\
\end{cases}
$$
代码中的矩阵 $A$ 和向量 $b$ 分别表示方程组的系数矩阵和常数向量,初始解 $x$ 取零向量,精度要求 $\epsilon$ 和最大迭代次数 $max\_iter$ 分别为 $10^{-6}$ 和 $1000$,通过 Jacobi 迭代算法求解线性方程组的解。