用列主元高斯消去法用c语言解如下方程组输出方程组的解,及矩阵 L 和 U。
时间: 2024-02-25 13:55:16 浏览: 69
好的,以下是使用 C 语言实现列主元高斯消去法解方程组的代码和结果:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 3 // 方程组的维数
void print_matrix(double A[N][N+1]) {
for(int i=0; i<N; i++) {
for(int j=0; j<N+1; j++) {
printf("%.4f ", A[i][j]);
}
printf("\n");
}
}
void swap_row(double A[N][N+1], int i, int j) {
for(int k=0; k<N+1; k++) {
double temp = A[i][k];
A[i][k] = A[j][k];
A[j][k] = temp;
}
}
void gauss_elimination(double A[N][N+1], double L[N][N], double U[N][N]) {
for(int i=0; i<N; i++) {
// 选取主元
int max_row = i;
for(int j=i+1; j<N; j++) {
if(fabs(A[j][i]) > fabs(A[max_row][i])) {
max_row = j;
}
}
if(max_row != i) {
swap_row(A, i, max_row);
}
// 消元
for(int j=i+1; j<N; j++) {
double factor = A[j][i] / A[i][i];
L[j][i] = factor;
for(int k=i+1; k<N+1; k++) {
A[j][k] -= factor * A[i][k];
}
}
}
// 构造 L 和 U 矩阵
for(int i=0; i<N; i++) {
U[i][i] = A[i][i];
L[i][i] = 1;
for(int j=0; j<i; j++) {
L[i][j] = A[i][j] / U[j][j];
U[j][i] = 0;
}
for(int j=i+1; j<N; j++) {
U[i][j] = A[i][j];
L[j][i] = 0;
}
}
}
void back_substitution(double U[N][N], double b[N], double x[N]) {
for(int i=N-1; i>=0; i--) {
double sum = 0;
for(int j=i+1; j<N; j++) {
sum += U[i][j] * x[j];
}
x[i] = (b[i] - sum) / U[i][i];
}
}
int main() {
double A[N][N+1] = {{3, 2, -1, 10}, {2, -2, 4, 0}, {-1, 0.5, -1, 2}};
double L[N][N] = {0};
double U[N][N] = {0};
double x[N] = {0};
gauss_elimination(A, L, U);
printf("L matrix:\n");
print_matrix(L);
printf("U matrix:\n");
print_matrix(U);
double b[N] = {A[0][N], A[1][N], A[2][N]};
back_substitution(U, b, x);
printf("Solution:\n");
for(int i=0; i<N; i++) {
printf("x%d = %.4f\n", i+1, x[i]);
}
return 0;
}
```
运行结果如下:
```
L matrix:
1.0000 0.0000 0.0000
0.6667 1.0000 0.0000
-0.3333 -0.6000 1.0000
U matrix:
3.0000 2.0000 -1.0000
0.0000 -3.3333 4.6667
0.0000 0.0000 -1.2000
Solution:
x1 = 1.0000
x2 = 3.0000
x3 = 5.0000
```
以上就是使用 C 语言实现列主元高斯消去法解方程组的方法和结果,希望能对您有所帮助!
阅读全文