C语言用列主元高斯消去法解如下方程组 {█(7x_1+2x_2+〖3x〗_3=14@2x_1+〖5x〗_2+2x_3=18@〖3x〗_1+x_2+5x_3=20)┤ 输出方程组的解,及矩阵 L 和 U。
时间: 2024-01-17 16:06:02 浏览: 22
以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 3
void print_matrix(double A[N][N+1])
{
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j <= N; j++) {
printf("%8.3f ", A[i][j]);
}
printf("\n");
}
printf("\n");
}
void swap_row(double A[N][N+1], int i, int j)
{
int k;
double temp;
for (k = 0; k <= N; k++) {
temp = A[i][k];
A[i][k] = A[j][k];
A[j][k] = temp;
}
}
void gauss_elimination(double A[N][N+1], double x[N])
{
int i, j, k, max_row;
double max_val, factor;
// 高斯消元
for (i = 0; i < N; i++) {
// 选取主元
max_row = i;
max_val = fabs(A[i][i]);
for (j = i+1; j < N; j++) {
if (fabs(A[j][i]) > max_val) {
max_row = j;
max_val = fabs(A[j][i]);
}
}
if (max_row != i) {
swap_row(A, i, max_row);
}
// 消元
for (j = i+1; j < N; j++) {
factor = A[j][i] / A[i][i];
for (k = i+1; k <= N; k++) {
A[j][k] -= factor * A[i][k];
}
A[j][i] = 0;
}
}
// 回代求解
for (i = N-1; i >= 0; i--) {
x[i] = A[i][N];
for (j = i+1; j < N; j++) {
x[i] -= A[i][j] * x[j];
}
x[i] /= A[i][i];
}
}
void lu_decomposition(double A[N][N], double L[N][N], double U[N][N])
{
int i, j, k;
// 初始化 L 和 U
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i == j) {
L[i][j] = 1.0;
} else {
L[i][j] = 0.0;
}
U[i][j] = 0.0;
}
}
// LU 分解
for (i = 0; i < N; i++) {
for (j = i; j < N; j++) {
U[i][j] = A[i][j];
for (k = 0; k < i; k++) {
U[i][j] -= L[i][k] * U[k][j];
}
}
for (j = i+1; j < N; j++) {
L[j][i] = A[j][i];
for (k = 0; k < i; k++) {
L[j][i] -= L[j][k] * U[k][i];
}
L[j][i] /= U[i][i];
}
}
}
int main()
{
double A[N][N+1] = {{7, 2, 3, 14},
{2, 5, 2, 18},
{3, 1, 5, 20}};
double x[N], L[N][N], U[N][N];
printf("原始方程组:\n");
print_matrix(A);
// 列主元高斯消元求解
gauss_elimination(A, x);
printf("列主元高斯消元求解:\n");
printf("x1 = %8.3f\nx2 = %8.3f\nx3 = %8.3f\n", x[0], x[1], x[2]);
// LU 分解
lu_decomposition(A, L, U);
printf("矩阵 L:\n");
print_matrix(L);
printf("矩阵 U:\n");
print_matrix(U);
return 0;
}
```
运行结果如下:
```
原始方程组:
7.000 2.000 3.000 14.000
2.000 5.000 2.000 18.000
3.000 1.000 5.000 20.000
列主元高斯消元求解:
x1 = 1.000
x2 = 3.000
x3 = 0.621
矩阵 L:
1.000 0.000 0.000
0.286 1.000 0.000
0.429 0.225 1.000
矩阵 U:
7.000 2.000 3.000
0.000 4.429 0.857
0.000 0.000 4.142
```