雅可比迭代方法 c语言
时间: 2024-10-24 12:01:26 浏览: 6
雅可比迭代法在C语言中通常用于求解线性方程组。其基本思想是通过迭代更新每个未知数的估计值,直到满足一定的精度条件。下面是一个简单的C语言实现示例[^1]:
```c
#include <stdio.h>
#include <math.h>
// 定义雅可比矩阵和右端向量
double A[3][3] = {{2, 1, -1},
{1, 3, 0},
{-1, 0, 2}};
double b[3] = {4, 7, 2};
double x[3]; // 初始猜测的解
// 雅可比矩阵元素
double J[3][3] = {{A[0][0], A[0][1], A[0][2]},
{A[1][0], A[1][1], A[1][2]},
{A[2][0], A[2][1], A[2][2]}};
void jacobi(double **J, double *x, double *b, int n, double tol, int max_iter) {
double old_x[n], new_x[n];
int iter = 0;
do {
// 计算新的x值
for (int i = 0; i < n; ++i)
new_x[i] = (b[i] - J[i][i + 1] * x[i + 1] - J[i][i + 2] * x[i + 2]) / J[i][i];
// 更新旧的x值
memcpy(old_x, x, sizeof(double) * n);
// 比较新旧x的差异
for (int i = 0; i < n; ++i) {
if (fabs(new_x[i] - old_x[i]) < tol)
break;
}
iter++;
// 如果未达到收敛条件,继续迭代
if (iter < max_iter)
memcpy(x, new_x, sizeof(double) * n);
else
printf("Warning: Maximum iterations reached.\n");
} while (iter < max_iter);
}
int main() {
double tol = 1e-6; // 精度阈值
int max_iter = 100; // 最大迭代次数
jacobi(&J, x, b, 3, tol, max_iter); // 调用雅可比迭代函数
printf("Solution after %d iterations:\n", max_iter);
for (int i = 0; i < 3; ++i)
printf("x%d = %.6f\n", i, x[i]);
return 0;
}
```
要运行这个程序,确保矩阵`A`和向量`b`满足线性方程组`Ax = b`。该程序会输出迭代后的解。
阅读全文