用c语言代码举例题目16:n阶方阵求逆。输入是一个n(n<256)阶方阵A,输出是它的逆矩阵,要求还要再将得到的逆矩阵与原来的矩阵相乘,验证其结果是单位矩阵
时间: 2023-08-22 20:10:14 浏览: 173
以下是一个简单的 C 语言代码,用于计算 n 阶方阵的逆矩阵并验证结果:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, j, k;
double a[256][512], temp;
// 输入n阶方阵
printf("请输入n的值:");
scanf("%d", &n);
printf("请输入%d阶方阵A:\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &a[i][j]);
}
}
// 增广矩阵初始化
for (i = 0; i < n; i++) {
for (j = n; j < 2 * n; j++) {
if (i == j - n) {
a[i][j] = 1.0;
} else {
a[i][j] = 0.0;
}
}
}
// 高斯-约旦消元求逆矩阵
for (i = 0; i < n; i++) {
if (a[i][i] == 0.0) {
printf("无法求逆矩阵!");
return 1;
}
temp = a[i][i];
for (j = i; j < 2 * n; j++) {
a[i][j] /= temp;
}
for (j = 0; j < n; j++) {
if (j != i) {
temp = a[j][i];
for (k = i; k < 2 * n; k++) {
a[j][k] -= temp * a[i][k];
}
}
}
}
// 输出逆矩阵
printf("A的逆矩阵为:\n");
for (i = 0; i < n; i++) {
for (j = n; j < 2 * n; j++) {
printf("%lf ", a[i][j]);
}
printf("\n");
}
// 验证结果是否为单位矩阵
printf("验证结果是否为单位矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
temp = 0.0;
for (k = 0; k < n; k++) {
temp += a[i][k + n] * a[k][j];
}
if (i == j && (temp < 0.99 || temp > 1.01)) {
printf("不是单位矩阵!");
return 1;
} else if (i != j && temp > 0.01) {
printf("不是单位矩阵!");
return 1;
}
}
}
printf("是单位矩阵!");
return 0;
}
```
该代码采用了高斯-约旦消元法来计算逆矩阵,然后再通过逆矩阵与原矩阵相乘来验证结果是否为单位矩阵。
阅读全文