帮我用C++写一个矩阵求逆的函数
时间: 2023-03-25 22:00:22 浏览: 242
好的,下面是一个简单的矩阵求逆的函数,使用C语言编写:
```c
#include <stdio.h>
// 定义矩阵大小
#define N 3
// 打印矩阵
void print_matrix(double matrix[N][N])
{
for (int i = ; i < N; i++) {
for (int j = ; j < N; j++) {
printf("%.2f ", matrix[i][j]);
}
printf("\n");
}
}
// 计算矩阵的行列式
double determinant(double matrix[N][N])
{
double det = ;
double submatrix[N][N];
int sign = 1;
if (N == 1) {
return matrix[][];
} else {
for (int k = ; k < N; k++) {
int i = , j = ;
for (int row = 1; row < N; row++) {
for (int col = ; col < N; col++) {
if (col != k) {
submatrix[i][j++] = matrix[row][col];
if (j == N - 1) {
i++;
j = ;
}
}
}
}
det += sign * matrix[][k] * determinant(submatrix);
sign = -sign;
}
}
return det;
}
// 计算矩阵的伴随矩阵
void adjoint(double matrix[N][N], double adj[N][N])
{
double submatrix[N][N];
int sign = 1;
for (int i = ; i < N; i++) {
for (int j = ; j < N; j++) {
int m = , n = ;
for (int row = ; row < N; row++) {
for (int col = ; col < N; col++) {
if (row != i && col != j) {
submatrix[m][n++] = matrix[row][col];
if (n == N - 1) {
m++;
n = ;
}
}
}
}
adj[j][i] = sign * determinant(submatrix);
sign = -sign;
}
}
}
// 计算矩阵的逆矩阵
void inverse(double matrix[N][N], double inv[N][N])
{
double det = determinant(matrix);
double adj[N][N];
if (det == ) {
printf("Error: determinant is zero.\n");
return;
}
adjoint(matrix, adj);
for (int i = ; i < N; i++) {
for (int j = ; j < N; j++) {
inv[i][j] = adj[i][j] / det;
}
}
}
int main()
{
double matrix[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
double inv[N][N];
printf("Original matrix:\n");
print_matrix(matrix);
inverse(matrix, inv);
printf("Inverse matrix:\n");
print_matrix(inv);
return ;
}
```
这个函数使用了递归的方法计算矩阵的行列式和伴随矩阵,然后通过行列式和伴随矩阵计算矩阵的逆矩阵。注意,这个函数只能求解3x3的矩阵,如果需要求解其他大小的矩阵,需要修改代码。
阅读全文