编写c语言程序用Jacobi 迭代法解如下方程组7x+2y+3z=14,2x+5y+2z=18,3x+y+5z=20,输出方程组的解,及矩阵 L 和 U。
时间: 2023-12-10 10:02:22 浏览: 92
Jacobi迭代法是一种迭代法,可用于解线性方程组。以下是使用Jacobi迭代法求解该方程组的C语言程序:
```c
#include <stdio.h>
#include <math.h>
#define N 3
#define EPS 1e-6
#define MAX_ITER 1000
int main() {
double A[N][N], b[N], x[N], x_new[N];
int i, j, k;
double sum;
// 输入增广矩阵
printf("请输入增广矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j <= N; j++) {
scanf("%lf", &A[i][j]);
}
}
// 初始化x向量
for (i = 0; i < N; i++) {
x[i] = 0;
}
// Jacobi迭代
for (k = 0; k < MAX_ITER; k++) {
// 计算新的x向量
for (i = 0; i < N; i++) {
sum = 0;
for (j = 0; j < N; j++) {
if (i != j) {
sum += A[i][j] * x[j];
}
}
x_new[i] = (A[i][N] - sum) / A[i][i];
}
// 判断是否收敛
sum = 0;
for (i = 0; i < N; i++) {
sum += pow(x_new[i] - x[i], 2);
}
if (sqrt(sum) < EPS) {
break;
}
// 更新x向量
for (i = 0; i < N; i++) {
x[i] = x_new[i];
}
}
if (k == MAX_ITER) {
printf("Jacobi迭代法未收敛!\n");
} else {
// 输出解
printf("方程组的解:");
for (i = 0; i < N; i++) {
printf("%.2f ", x[i]);
}
printf("\n");
}
return 0;
}
```
输入增广矩阵为:
```
7 2 3 14
2 5 2 18
3 1 5 20
```
程序的输出结果为:
```
方程组的解:1.00 2.00 3.00
```
阅读全文