NxN方阵LU分解C语言实现
时间: 2023-08-20 07:09:55 浏览: 48
下面是一个简单的NxN方阵LU分解的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 方阵的大小
int main() {
int i, j, k;
double A[N][N] = {{1, 4, 7}, {2, 5, 8}, {3, 6, 10}}; // 输入矩阵
double L[N][N], U[N][N];
double sum;
// 初始化 L 和 U 矩阵
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i == j) {
L[i][j] = 1;
} else {
L[i][j] = 0;
}
U[i][j] = 0;
}
}
// 进行 LU 分解
for (i = 0; i < N; i++) {
// 计算 U 矩阵的第 i 行
for (j = i; j < N; j++) {
sum = 0;
for (k = 0; k < i; k++) {
sum += L[i][k] * U[k][j];
}
U[i][j] = A[i][j] - sum;
}
// 计算 L 矩阵的第 i 列
for (j = i + 1; j < N; j++) {
sum = 0;
for (k = 0; k < i; k++) {
sum += L[j][k] * U[k][i];
}
L[j][i] = (A[j][i] - sum) / U[i][i];
}
}
// 输出 L 和 U 矩阵
printf("L = \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%f ", L[i][j]);
}
printf("\n");
}
printf("U = \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%f ", U[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
L =
1.000000 0.000000 0.000000
2.000000 1.000000 0.000000
3.000000 2.000000 1.000000
U =
1.000000 4.000000 7.000000
0.000000 -3.000000 -6.000000
0.000000 0.000000 1.000000
```
其中,L矩阵的对角线元素都是1,其余元素是计算得到的下三角矩阵,U矩阵是计算得到的上三角矩阵。