c语言编写求出A的逆矩阵
时间: 2023-10-24 22:08:51 浏览: 94
要求一个矩阵A的逆矩阵,可以使用C语言中的高斯-约旦消元法(Gauss-Jordan elimination)实现。具体步骤如下:
1. 创建一个n x 2n的矩阵aug,其中n为A的行数,前n列为A的矩阵,后n列为单位矩阵,即aug = [A|I]。
2. 对aug进行高斯-约旦消元,将aug变为一个上三角矩阵。具体方法是,对于第i行,将aug的第i列除以aug[i][i],然后用该行减去其他行的aug[i][i]倍,使得aug[i][i]下面的元素都变为0。重复这个过程,直到aug变为一个上三角矩阵。
3. 对aug进行回代,将上三角矩阵变为对角矩阵。具体方法是,从最后一行开始,对于第i行,将aug[i][i]下面的元素都变为0,使得aug变为一个对角矩阵。
4. 此时,aug的后n列就是A的逆矩阵。
以下是一个C语言实现示例:
```c
#include <stdio.h>
#define N 3 // 矩阵A的维数
void print_matrix(double matrix[][2*N], int n) // 打印矩阵
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2*N; j++) {
printf("%f ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
void gauss_jordan_elimination(double matrix[][2*N], int n) // 高斯-约旦消元
{
for (int i = 0; i < n; i++) {
double pivot = matrix[i][i];
for (int j = i; j < 2*N; j++) {
matrix[i][j] /= pivot;
}
for (int j = 0; j < n; j++) {
if (j != i) {
double factor = matrix[j][i];
for (int k = i; k < 2*N; k++) {
matrix[j][k] -= factor * matrix[i][k];
}
}
}
printf("第%d次消元后的矩阵:\n", i+1);
print_matrix(matrix, n);
}
}
int main()
{
double A[N][N] = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}}; // 矩阵A
double aug[N][2*N]; // 扩展矩阵
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
aug[i][j] = A[i][j];
}
for (int j = N; j < 2*N; j++) {
if (j - N == i) {
aug[i][j] = 1.0;
} else {
aug[i][j] = 0.0;
}
}
}
printf("初始矩阵:\n");
print_matrix(aug, N);
gauss_jordan_elimination(aug, N);
printf("逆矩阵:\n");
for (int i = 0; i < N; i++) {
for (int j = N; j < 2*N; j++) {
printf("%f ", aug[i][j]);
}
printf("\n");
}
return 0;
}
```
注意,该示例中只考虑了A是可逆矩阵的情况,如果A不可逆,则需要在高斯-约旦消元的过程中检测主元是否为0,如果为0,则A不可逆,程序需要终止。
阅读全文