jacobi迭代c语言
时间: 2023-06-21 20:17:36 浏览: 296
下面是使用C语言实现Jacobi迭代法求解线性方程组Ax=b的代码示例:
```c
#include <stdio.h>
#include <math.h>
#define N 3 // 未知数的个数
#define MAX_ITER 100 // 最大迭代次数
#define EPSILON 1e-6 // 精度要求
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 x_new[N] = {0}; // 新解向量
int i, j, k;
// Jacobi迭代过程
for (k = 0; k < MAX_ITER; k++) {
for (i = 0; i < N; i++) {
x_new[i] = b[i];
for (j = 0; j < N; j++) {
if (j != i) {
x_new[i] -= A[i][j] * x[j];
}
}
x_new[i] /= A[i][i];
}
// 判断是否满足精度要求
double error = 0;
for (i = 0; i < N; i++) {
error += fabs(x_new[i] - x[i]);
x[i] = x_new[i];
}
if (error < EPSILON) {
break;
}
}
// 输出结果
printf("Solution:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %.6lf\n", i, x[i]);
}
return 0;
}
```
在上述代码中,系数矩阵A、常数向量b、初始解向量x以及新解向量x_new都是长度为N的一维数组。迭代过程中,首先计算出新解向量x_new中每个元素的值,然后判断是否满足精度要求,如果满足就结束迭代,否则将新解向量赋值给初始解向量并进行下一次迭代。最终输出求解结果。
阅读全文