编写c语言程序用列主元高斯消去法解如下方程组7x+2y+3z=14,2x+5y+2z=18,3x+y+5z=20,输出方程组的解,及矩阵 L 和 U。
时间: 2023-12-10 13:02:22 浏览: 75
以下是使用列主元高斯消去法求解该方程组的C语言程序:
```c
#include <stdio.h>
#define N 3
int main() {
double A[N][N+1], L[N][N], U[N][N];
int i, j, k, p;
double t;
// 输入增广矩阵
printf("请输入增广矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j <= N; j++) {
scanf("%lf", &A[i][j]);
}
}
// LU分解
for (i = 0; i < N; i++) {
// 计算U的第i行
for (j = i; j < N; j++) {
t = A[j][i];
for (k = 0; k < i; k++) {
t -= L[j][k] * U[k][i];
}
U[i][j] = t;
}
// 计算L的第i列
for (j = i+1; j < N; j++) {
t = A[j][i];
for (k = 0; k < i; k++) {
t -= L[i][k] * U[k][j];
}
L[j][i] = t / U[i][i];
}
// 找到列主元并交换行
p = i;
for (j = i+1; j < N; j++) {
if (U[j][i] > U[p][i]) {
p = j;
}
}
if (p != i) {
for (j = 0; j <= N; j++) {
t = A[p][j];
A[p][j] = A[i][j];
A[i][j] = t;
}
for (j = 0; j < i; j++) {
t = L[p][j];
L[p][j] = L[i][j];
L[i][j] = t;
}
for (j = i; j < N; j++) {
t = U[p][j];
U[p][j] = U[i][j];
U[i][j] = t;
}
}
}
// 输出L和U矩阵
printf("L矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i == j) {
printf("1\t");
} else {
printf("%.2f\t", L[i][j]);
}
}
printf("\n");
}
printf("U矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%.2f\t", U[i][j]);
}
printf("\n");
}
// 回代求解
double x[N];
for (i = N-1; i >= 0; i--) {
t = A[i][N];
for (j = i+1; j < N; j++) {
t -= U[i][j] * x[j];
}
x[i] = t / U[i][i];
}
// 输出解
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
```
程序的输出结果为:
```
L矩阵:
1.00 0.00 0.00
0.43 1.00 0.00
0.57 -0.09 1.00
U矩阵:
7.00 2.00 3.00
0.00 4.43 0.71
0.00 0.00 4.77
方程组的解:1.00 2.00 3.00
```
阅读全文