C语言求逆矩阵
时间: 2023-07-24 14:18:41 浏览: 277
C语言求矩阵的逆
C语言中求逆矩阵可以使用高斯-约旦消元法或LU分解法。下面是使用高斯-约旦消元法的示例代码:
```c
#include <stdio.h>
#define N 3 // 矩阵维数
void print_matrix(float a[N][N*2]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N*2; j++) {
printf("%.2f ", a[i][j]);
}
printf("\n");
}
printf("\n");
}
void inverse_matrix(float a[N][N], float b[N][N]) {
float temp[N][N*2]; // 扩展矩阵
// 初始化扩展矩阵
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
temp[i][j] = a[i][j];
}
for (int j = N; j < N*2; j++) {
temp[i][j] = i == j - N ? 1 : 0;
}
}
// 高斯-约旦消元
for (int i = 0; i < N; i++) {
float t = temp[i][i];
for (int j = i; j < N*2; j++) {
temp[i][j] /= t;
}
for (int k = 0; k < N; k++) {
if (k != i) {
float t = temp[k][i];
for (int j = i; j < N*2; j++) {
temp[k][j] -= t * temp[i][j];
}
}
}
}
// 提取逆矩阵
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
b[i][j] = temp[i][j+N];
}
}
}
int main() {
float matrix[N][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
float inverse[N][N];
printf("原矩阵:\n");
print_matrix(matrix);
inverse_matrix(matrix, inverse);
printf("逆矩阵:\n");
print_matrix(inverse);
return 0;
}
```
该示例代码中,`inverse_matrix` 函数使用高斯-约旦消元法实现矩阵求逆运算,`print_matrix` 函数用于输出矩阵。在 `main` 函数中调用 `inverse_matrix` 函数求解逆矩阵,并输出结果。注意,在实际应用中,需要判断矩阵是否可逆,以及处理浮点数误差等问题。
阅读全文