用c语言写一个求逆矩阵的代码
时间: 2024-03-03 17:53:09 浏览: 95
使用C语言实现复数矩阵的求逆的源代码
以下是用C语言实现求逆矩阵的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3
void inverse(double mat[N][N])
{
int i, j, k;
double temp;
double inv[N][N] = {0};
// Initialize the identity matrix
for(i=0;i<N;i++) {
inv[i][i] = 1;
}
// Perform Gaussian elimination to get upper triangular matrix
for(k=0;k<N;k++) {
for(i=k+1;i<N;i++) {
temp = mat[i][k] / mat[k][k];
for(j=0;j<N;j++) {
mat[i][j] -= temp * mat[k][j];
inv[i][j] -= temp * inv[k][j];
}
}
}
// Perform back substitution to get inverse matrix
for(k=N-1;k>=0;k--) {
for(i=k-1;i>=0;i--) {
temp = mat[i][k] / mat[k][k];
for(j=0;j<N;j++) {
mat[i][j] -= temp * mat[k][j];
inv[i][j] -= temp * inv[k][j];
}
}
}
// Normalize the diagonal elements of the inverse matrix
for(i=0;i<N;i++) {
temp = mat[i][i];
for(j=0;j<N;j++) {
mat[i][j] /= temp;
inv[i][j] /= temp;
}
}
// Print the inverse matrix
printf("Inverse Matrix:\n");
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
printf("%lf ",inv[i][j]);
}
printf("\n");
}
}
int main()
{
double mat[N][N];
int i, j;
printf("Enter the elements of the matrix:\n");
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%lf",&mat[i][j]);
}
}
// Call the function to calculate the inverse matrix
inverse(mat);
return 0;
}
```
该代码使用了高斯消元和反向代换方法来计算逆矩阵。具体步骤如下:
1. 初始化逆矩阵为单位矩阵。
2. 使用高斯消元将原矩阵转化为上三角矩阵。
3. 使用反向代换将上三角矩阵转化为对角矩阵。
4. 将对角线元素标准化为1,同时标准化逆矩阵的每一行。
5. 输出逆矩阵。
注意:该代码仅适用于3x3的矩阵。如果要求解其他大小的矩阵,需要对代码进行相应的修改。
阅读全文