c语言雅可比迭代法解矩阵方程
时间: 2023-07-09 15:24:54 浏览: 199
对于线性方程组 Ax=b,雅可比迭代法的迭代公式为:
x_i^(k+1) = (b_i - Σ(A_ij * x_j^(k)))/A_ii (i=1,2,...,n)
其中,x_i^(k+1) 表示第 i 个未知量在第 k+1 次迭代后的近似解,x_j^(k) 表示第 j 个未知量在第 k 次迭代时的近似解,A_ij 和 b_i 分别表示系数矩阵和常数向量的元素。
C 语言代码如下:
```c
#include <stdio.h>
#define N 3 // 系数矩阵的阶数
int main() {
float A[N][N] = {{2, -1, 0}, {-1, 2, -1}, {0, -1, 2}}; // 系数矩阵
float b[N] = {1, 0, 1}; // 常数向量
float x[N] = {0}; // 初值设为 0
float x_new[N]; // 存放每次迭代后的近似解
float eps = 1e-6; // 精度要求
int max_iter = 100; // 最大迭代次数
int iter = 0; // 当前迭代次数
float sum; // 用于计算 Σ(A_ij * x_j^(k))
while (iter < max_iter) {
for (int i = 0; i < N; i++) {
sum = 0;
for (int j = 0; j < N; j++) {
if (j != i) {
sum += A[i][j] * x[j];
}
}
x_new[i] = (b[i] - sum) / A[i][i];
}
int flag = 1; // 标记是否满足精度要求
for (int i = 0; i < N; i++) {
if (fabs(x_new[i] - x[i]) > eps) {
flag = 0;
break;
}
}
if (flag) {
printf("迭代次数:%d\n", iter);
for (int i = 0; i < N; i++) {
printf("x%d = %.6f\n", i+1, x_new[i]);
}
return 0;
}
for (int i = 0; i < N; i++) {
x[i] = x_new[i]; // 更新近似解
}
iter++;
}
printf("迭代次数超过最大迭代次数,无法达到精度要求!\n");
return 0;
}
```
其中,fabs() 函数用于计算绝对值,精度要求 eps 和最大迭代次数 max_iter 可以根据需要进行调整。
阅读全文