求一个矩阵的逆矩阵(用伴随矩阵求)
题目:noyj774
用代数余子式求逆矩阵方法:
若现有矩阵A,要求其逆矩阵;
若|A|==0,则其不存在逆矩阵;
若|A|!=0,其逆矩阵A^-1==*A/|A|;其中*A为其伴随矩阵;
伴随矩阵的求法:
*A[j][i]==|M[i][j]|,其中M[i][j]为A[i][j]的代数余子式;
即*A1[i][j]==|M[i][j]|,再将*A1转置得到*A;
代码:
1 #include<bits/stdc++.h> 2 #define MAXN 10 3 #define MAX 100000000 4 #define ll long long 5 using namespace std; 6 7 int b[MAXN][MAXN]; //***存储伴随矩阵 8 9 //***递归求n*n阶行列式的值 10 int matrix(int n, int a1[MAXN][MAXN]) 11 { 12 int b[10][10], sum=0; //****b保存当前n*n阶行列式a的余子式 13 if(n==1) return a1[0][0]; //****n为1时结束递归 14 for(int i=0; i<n; i++) //****通过循环求出当前行列式a[1][0]~a[1][n-1]的所有余子式 15 { 16 for(int j=0; j<n-1; j++) 17 { 18 int column=0; 19 for(int k=0; k<n; k++) 20 { 21 if(k==i) continue; 22 b[j][column++]=a1[j+1][k]; //**将a[0][i]的余子式保存到b数组中 23 } 24 } 25 int flag=1; 26 if(i&1) flag=-1; 27 sum+=flag*a1[0][i]*matrix(n-1, b); 28 } 29 return sum; 30 } 31 32 //***求矩阵a的伴随矩阵 33 void adjoint_matrix(int n, int a[MAXN][MAXN]) 34 { 35 for(int i=0; i<n; i++) 36 { 37 for(int j=0; j<n; j++) 38 { 39 int a1[MAXN][MAXN], row=0; 40 for(int k=0; k<n; k++) //****将a[i][j]的余子式存储到a1数组中; 41 { 42 int column=0; 43 if(k==i) continue; 44 for(int l=0; l<n; l++) 45 { 46 if(l==j) continue; 47 a1[row][column++]=a[k][l]; 48 } 49 row++; 50 } 51 b[j][i]=pow(-1, i+j)*matrix(n-1, a1); //****b中存储b[i][j]的算数余子式转置后的矩阵即求得伴随矩阵 52 } 53 } 54 } 55 56 void print(int n, int ans) 57 { 58 for(int i=0; i<n; i++) 59 { 60 for(int j=0; j<n; j++) 61 { 62 if(b[i][j]%ans==0) 63 { 64 cout << b[i][j]/ans << " "; 65 } 66 else //******不能整除的话输出最简分式形式 67 { 68 int cnt=__gcd(b[i][j], ans); 69 int x=b[i][j]/cnt, y=ans/cnt; 70 if(y<0) 71 { 72 cout << (-1*x) << "/" << (-1*y) << " "; 73 } 74 else 75 { 76 cout << x << "/" << y << " "; 77 } 78 } 79 } 80 cout << endl; 81 } 82 } 83 84 int main(void) 85 { 86 std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); 87 int n; 88 while(cin >> n) 89 { 90 int a[MAXN][MAXN]; 91 for(int i=0; i<n; i++) 92 { 93 for(int j=0; j<n; j++) 94 { 95 cin >> a[i][j]; 96 } 97 } 98 int ans=matrix(n, a); 99 if(!ans) //*******矩阵值为0即不存在逆矩阵 100 { 101 cout << "The input data is error!" << endl; 102 continue; 103 } 104 adjoint_matrix(n, a); 105 print(n, ans); 106 } 107 return 0; 108 }
转载于:https://www.cnblogs.com/geloutingyu/p/5893770.html
求一个矩阵的逆矩阵(用伴随矩阵求)相关推荐
- 线性代数让我想想:快速求三阶矩阵的逆矩阵
快速求三阶矩阵的逆矩阵 前言 一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示) A−1=1[][−[]−[]−[]−[]]=A−1=1[][M11−[M12]M13−[M21]M2 ...
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...
- C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和
C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...
- 求一个矩阵的鞍点(即在行上最小而在列上最大的值)(C++编写)(循环与递归)
算法经典题型1 求一个矩阵的鞍点(即在行上最小而在列上最大的值) 用到的算法 思想是 -循环与递归 博主用到的环境:Win7, CodeBlocks等. 一.代码 #include <iostr ...
- matlab矩阵绝对值,matlab怎么求一个矩阵所有元素的绝对值之和,看完就明白了
有时候我们在使用matlab的时候,想求一个矩阵所有元素的绝对值之和,怎么求呢,下面来分享一下方法 工具/材料 matlab 求矩阵所有元素的绝对值之和 操作方法 01 第一步在我们的电脑上打开mat ...
- 求4x4 矩阵的逆矩阵
// 求4x4 矩阵的逆矩阵--macrobright int matrixInverse44(double matrix_base[], double matrix_inv[]) { dou ...
- 求一个矩阵中的马鞍点(c语言实现)
数据结构中的求一个矩阵的马鞍点 请编写一个完整的程序,如果矩阵A中存在这样的一个元素A[i,j]满足条件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,则称之为该矩阵的一个马鞍点. 代码 ...
- 求矩阵的逆矩阵、伴随矩阵、特征根
1.特征根 2.逆矩阵三种方法(伴随矩阵是补得那个)
- 求一个矩阵的最大子矩阵
#include <iostream> #include <string> #include <assert.h> #include <malloc.h> ...
最新文章
- java 数字三角形_数字三角形 Number Triangles(java的MLE解决办法)
- 指定的文件夹没有包含设备的兼容软件驱动程序_Windows 10 2020年5月更新兼容性问题汇总...
- php exchange,PHP SDK for digital currency exchange
- java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
- HH SaaS电商系统的出库功能模块设计
- java 数据类型 string_java的基本数据类型和引用数据类型都有哪些,string属于什么类型...
- 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}
- v380云存储如何查询_使用 JuiceFS 在云上优化 Kylin 的存储性能
- linux防止文件被复制,技术|如何在 Linux 系统中防止文件和目录被意外的删除或修改...
- Mysql插入锁表情况
- Meltdown和Foreshadow等补丁被指不完整,处理器易受新攻击
- Django笔记8(模板引擎)
- 在VS中查看文件是谁签出的
- AI笔刷 600+专业ai矢量笔刷套装(含安装教程)
- 注意JDBC数据库连接中资源关闭的顺序
- harbor 安装启动遇到的keng
- Web前端之jQuery 一
- 留言板(php+数据库)
- lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型
- PROFINET实时以太网协议