用C语言编写一个矩阵求逆函数
时间: 2023-08-31 08:06:49 浏览: 194
矩阵求逆是一个相对复杂的计算,需要使用线性代数的相关知识。下面是一个用C语言编写的矩阵求逆函数的示例代码,供参考:
```
#include <stdio.h>
#include <stdlib.h>
#define N 3 // 矩阵维度
double determinant(double matrix[N][N], int n)
{
int i, j, k;
double det = 1;
double temp;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
while (matrix[j][i] != 0) {
temp = matrix[i][i] / matrix[j][i];
for (k = i; k < n; k++) {
matrix[i][k] -= temp * matrix[j][k];
}
for (k = i; k < n; k++) {
temp = matrix[i][k];
matrix[i][k] = matrix[j][k];
matrix[j][k] = temp;
}
det = -det;
}
}
det *= matrix[i][i];
}
return det;
}
void inverse(double matrix[N][N], int n)
{
int i, j, k;
double det = determinant(matrix, n);
if (det == 0) {
printf("The matrix is singular.\n");
return;
}
double temp[N][N * 2];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
temp[i][j] = matrix[i][j];
}
}
for (i = 0; i < n; i++) {
for (j = n; j < 2 * n; j++) {
if (i == j - n) {
temp[i][j] = 1.0;
} else {
temp[i][j] = 0.0;
}
}
}
for (i = 0; i < n; i++) {
double t = temp[i][i];
for (j = i; j < 2 * n; j++) {
temp[i][j] /= t;
}
for (j = 0; j < n; j++) {
if (i != j) {
t = temp[j][i];
for (k = i; k < 2 * n; k++) {
temp[j][k] -= t * temp[i][k];
}
}
}
}
for (i = 0; i < n; i++) {
for (j = n; j < 2 * n; j++) {
matrix[i][j - n] = temp[i][j];
}
}
}
int main()
{
double matrix[N][N] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
inverse(matrix, N);
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%lf ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
该代码中使用了高斯-约旦消元法来求解矩阵的逆矩阵。其中,`determinant`函数用于计算矩阵的行列式,`inverse`函数用于求解矩阵的逆矩阵。在 `main` 函数中,我们可以定义一个矩阵,并调用 `inverse` 函数来求解矩阵的逆矩阵。
阅读全文