用列主元高斯消元法解如下方程组 输出方程组的解,及矩阵 L 和 U。的C语言代码
时间: 2024-03-18 09:41:28 浏览: 149
以下是用C语言实现列主元高斯消元法求解方程组并输出解、矩阵L和U的代码:
```c
#include <stdio.h>
int main() {
double a[3][4] = {{2, 3, -1, 1}, {4, 4, -3, 4}, {2, 2, 1, -1}};
double L[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
double U[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
double b[3] = {4, 8, 3};
double y[3], x[3];
int i, j, k, n = 3;
double c, s, t;
// 高斯消元求解矩阵的L和U
for (k = 0; k < n; k++) {
// 选主元
c = 0;
for (i = k; i < n; i++) {
if (a[i][k] > c) {
c = a[i][k];
j = i;
}
}
if (c == 0) {
printf("No unique solution exists.\n");
return 0;
}
// 交换第k行和第j行
if (j != k) {
for (i = 0; i < n + 1; i++) {
t = a[k][i];
a[k][i] = a[j][i];
a[j][i] = t;
}
t = b[k];
b[k] = b[j];
b[j] = t;
}
// 消元
for (i = k + 1; i < n; i++) {
s = a[i][k] / a[k][k];
for (j = k; j < n + 1; j++) {
a[i][j] -= s * a[k][j];
}
b[i] -= s * b[k];
}
}
// 求解Ly = b
for (i = 0; i < n; i++) {
y[i] = b[i];
for (j = 0; j < i; j++) {
y[i] -= L[i][j] * y[j];
}
y[i] /= L[i][i];
}
// 求解Ux = y
for (i = n - 1; i >= 0; i--) {
x[i] = y[i];
for (j = i + 1; j < n; j++) {
x[i] -= U[i][j] * x[j];
}
x[i] /= U[i][i];
}
// 输出方程组的解
printf("x = %lf, y = %lf, z = %lf\n", x[0], x[1], x[2]);
// 输出矩阵的L和U
printf("L =\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%lf ", L[i][j]);
}
printf("\n");
}
printf("U =\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%lf ", U[i][j]);
}
printf("\n");
}
return 0;
}
```
上述代码中,矩阵A为输入的系数矩阵,向量b为方程组的右端向量,向量x为方程组的解,矩阵L和U为输出的矩阵。为了简化代码,这里假设矩阵A、L、U的每个元素均为double类型。如果需要处理其他类型的矩阵,需要适当修改代码。
阅读全文