逆阵求逆(3*3的二维矩阵)
题目:对一个二维矩阵进行求逆操作
输入形式:一个二维矩阵
输出形式:该矩阵的逆矩阵
2条回答 默认 最新
- 技术专家团-小桥流水 2022-12-16 00:18关注
运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<math.h> int InitialMatrix[110][110];//初始矩阵,即输入的矩阵 int CurrentMatrix[110][110];//当前 矩阵 多用来表示当前余子式 //打印矩阵matrix void print(int matrix[][110], int n)//打印矩阵 { int i, j; for ( i = 1; i <= n; i++) { for (j = 1; j < n; j++) printf("%d ", matrix[i][j]); printf("%d\n", matrix[i][j]); } } //得到矩阵matrix第numi行第numj列的余子式 并存入到CurrentMatrix中 void GetCurrentMatrix(int numi, int numj, int matrix[][110], int MatrixSize) { //tempMatrix为临时矩阵 int tempMatrix[110][110]; int i, j; //先全部置为1 for ( i = 0; i < MatrixSize + 10; i++) { for ( j = 0; j < MatrixSize + 10; j++) tempMatrix[i][j] = 1; } for ( i = 1; i <= MatrixSize - 1; i++)//求余子式矩阵 { for ( j = 1; j <= MatrixSize - 1; j++) { if (i >= numi && j < numj) tempMatrix[i][j] = matrix[i + 1][j]; else if (i >= numi && j >= numj) tempMatrix[i][j] = matrix[i + 1][j + 1]; else if (i < numi && j >= numj) tempMatrix[i][j] = matrix[i][j + 1]; else if (i < numi && j < numj) tempMatrix[i][j] = matrix[i][j]; } } //临时矩阵tempMatrix赋值给 当前矩阵CurrentMatrix for ( i = 0; i <= MatrixSize - 1; i++) { for ( j = 0; j <= MatrixSize - 1; j++) CurrentMatrix[i][j] = tempMatrix[i][j]; } } //求当前行列式为CurrentMatrix时,CurrentMatrix的值。 int GetMatrixValue(int MatrixSize) { int matrix[110][110]; int i, j; int Matrixvalue = 0;//CurrentMatrix的值 //赋值给matrix 交给matrix去计算 防止破坏CurrentMatrix for ( i = 1; i <= MatrixSize; i++) { for ( j = 1; j <= MatrixSize; j++) matrix[i][j] = CurrentMatrix[i][j]; } //一阶二阶 行列式求值 if (MatrixSize == 2) return matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1]; else if (MatrixSize == 1) return matrix[1][1]; else//高阶行列式求值 { for ( i = 1; i <= MatrixSize; i++) { GetCurrentMatrix(1, i, matrix, MatrixSize);//得到第一行 第i列 的 当前余子式 CurrentMatrix if (i % 2 == 1)//因为 是 行项为1 所以 列项i为奇数时 逆序数为偶数 Matrixvalue += matrix[1][i] * GetMatrixValue(MatrixSize - 1); else Matrixvalue -= matrix[1][i] * GetMatrixValue(MatrixSize - 1); } return Matrixvalue; } } int gcd(int m, int n)//求逆矩阵时约分 { if (m < n) gcd(n, m); if (n == 0) return m; else return gcd(n, m % n); } //打印当前两个值相除得到的最简分数 void final(int n, int m) { if (n * m < 0) { printf("-"); final(fabs(n), fabs(m)); return; } //printf("%d %d /%d\n",n,m,gcd(n,m)); if (m == 1) printf("%d ", n); else if (n % m == 0) printf("%d ", n / m); else printf("%d/%d ", n / gcd(n, m), m / gcd(n, m)); } int main() { int MatrixSize = 3;//矩阵的size int TransposeMatrixValue; int i = 0, j = 0; int MatrixValue = 0; int TransposeMatrix[110][110];//转置行列式 //printf("please input the determinant`s size:\n");//输入矩阵的规格 //scanf("%d", &MatrixSize); //初始数组 全部 置为 1 for ( i = 0; i < MatrixSize + 10; i++) { for (int j = 0; j < MatrixSize + 10; j++) InitialMatrix[i][j] = 1; } printf("输入%d*%d矩阵:\n", MatrixSize, MatrixSize);//输入矩阵 for ( i = 1; i <= MatrixSize; i++) { for ( j = 1; j <= MatrixSize; j++) { scanf("%d", &InitialMatrix[i][j]); CurrentMatrix[i][j] = InitialMatrix[i][j];//CurrentMatrix即 为当前矩阵 } } MatrixValue = GetMatrixValue(MatrixSize);//矩阵的值 for (i = 1; i <= MatrixSize; i++)//求转置行列式 { for (j = 1; j <= MatrixSize; j++) { TransposeMatrix[i][j] = InitialMatrix[j][i]; CurrentMatrix[i][j] = TransposeMatrix[i][j]; } } TransposeMatrixValue = GetMatrixValue(MatrixSize); //printf("%d\n", TransposeMatrixValue); if (TransposeMatrixValue == 0) { printf("该矩阵无逆矩阵!!!\n"); return 0;//矩阵值为0,无逆矩阵 } printf("逆矩阵:\n");//输出逆矩阵 for ( i = 1; i <= MatrixSize; i++) { for ( j = 1; j <= MatrixSize; j++) { GetCurrentMatrix(i, j, TransposeMatrix, MatrixSize);//得到转置矩阵第i行第j列的 余子式 存入到CurrentMatrix里边 if ((i + j) % 2 == 0) final(GetMatrixValue(MatrixSize - 1), MatrixValue); else final(-1 * GetMatrixValue(MatrixSize - 1), MatrixValue); } printf("\n"); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥500 火焰左右视图、视差(基于双目相机)
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本