c语言使用高斯消元法求逆矩阵
时间: 2023-10-29 16:08:00 浏览: 119
高斯消元法是一种求解线性方程组的常用方法,可以把系数矩阵变成上三角矩阵,进而求解方程组。而求解矩阵的逆矩阵,就是相当于求解多个线性方程组,因此也可以使用高斯消元法来实现。
具体步骤如下:
1. 将待求逆矩阵A和单位矩阵I按行合并成一个增广矩阵:[A|I]。
2. 对增广矩阵进行高斯消元,将[A|I]化为上三角矩阵[U|V]。
3. 对上三角矩阵[U|V]进行回代,求出逆矩阵[A^-1]。
下面是使用C语言实现的代码:
```c
#include <stdio.h>
#define N 3 // 矩阵维数
// 打印矩阵
void print_matrix(double matrix[N][2*N]) {
for (int i=0; i<N; i++) {
for (int j=0; j<2*N; j++) {
printf("%f\t", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
// 高斯消元求逆矩阵
void gauss_inverse(double A[N][N], double A_inv[N][N]) {
double matrix[N][2*N];
double t;
// 初始化增广矩阵
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
matrix[i][j] = A[i][j];
}
for (int j=N; j<2*N; j++) {
matrix[i][j] = (i==j-N) ? 1 : 0;
}
}
// 高斯消元
for (int k=0; k<N; k++) {
for (int i=k+1; i<N; i++) {
t = matrix[i][k] / matrix[k][k];
for (int j=k; j<2*N; j++) {
matrix[i][j] -= t * matrix[k][j];
}
}
}
// 回代求逆矩阵
for (int k=N-1; k>=0; k--) {
for (int i=0; i<N; i++) {
if (i == k) {
t = 1 / matrix[k][k];
} else {
t = - matrix[i][k] / matrix[k][k];
}
for (int j=N; j<2*N; j++) {
matrix[i][j] += t * matrix[k][j];
}
}
}
// 将结果存入A_inv
for (int i=0; i<N; i++) {
for (int j=N; j<2*N; j++) {
A_inv[i][j-N] = matrix[i][j];
}
}
}
int main() {
double A[N][N] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
double A_inv[N][N];
// 求逆矩阵
gauss_inverse(A, A_inv);
// 打印结果
printf("A:\n");
print_matrix(A);
printf("A_inv:\n");
print_matrix(A_inv);
return 0;
}
```
上面的代码中,使用一个2N*N的增广矩阵来存储待求的逆矩阵和单位矩阵。高斯消元的过程和求解线性方程组类似,只不过需要对每一行都进行相同的操作。回代求逆矩阵的过程也和求解线性方程组类似,只不过每个未知数都是一个列向量。最后将结果存入A_inv中即可。
阅读全文