题目: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

求一个矩阵的逆矩阵(用伴随矩阵求)相关推荐

  1. 线性代数让我想想:快速求三阶矩阵的逆矩阵

    快速求三阶矩阵的逆矩阵 前言 一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示) A−1=1[][−[]−[]−[]−[]]=A−1=1[][M11−[M12]M13−[M21]M2 ...

  2. 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)

    一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...

  3. C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和

    C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...

  4. 求一个矩阵的鞍点(即在行上最小而在列上最大的值)(C++编写)(循环与递归)

    算法经典题型1 求一个矩阵的鞍点(即在行上最小而在列上最大的值) 用到的算法 思想是 -循环与递归 博主用到的环境:Win7, CodeBlocks等. 一.代码 #include <iostr ...

  5. matlab矩阵绝对值,matlab怎么求一个矩阵所有元素的绝对值之和,看完就明白了

    有时候我们在使用matlab的时候,想求一个矩阵所有元素的绝对值之和,怎么求呢,下面来分享一下方法 工具/材料 matlab 求矩阵所有元素的绝对值之和 操作方法 01 第一步在我们的电脑上打开mat ...

  6. 求4x4 矩阵的逆矩阵

    // 求4x4 矩阵的逆矩阵--macrobright int matrixInverse44(double matrix_base[], double matrix_inv[]) {     dou ...

  7. 求一个矩阵中的马鞍点(c语言实现)

    数据结构中的求一个矩阵的马鞍点 请编写一个完整的程序,如果矩阵A中存在这样的一个元素A[i,j]满足条件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,则称之为该矩阵的一个马鞍点. 代码 ...

  8. 求矩阵的逆矩阵、伴随矩阵、特征根

    1.特征根 2.逆矩阵三种方法(伴随矩阵是补得那个)

  9. 求一个矩阵的最大子矩阵

    #include <iostream> #include <string> #include <assert.h> #include <malloc.h> ...

最新文章

  1. java 数字三角形_数字三角形 Number Triangles(java的MLE解决办法)
  2. 指定的文件夹没有包含设备的兼容软件驱动程序_Windows 10 2020年5月更新兼容性问题汇总...
  3. php exchange,PHP SDK for digital currency exchange
  4. java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
  5. HH SaaS电商系统的出库功能模块设计
  6. java 数据类型 string_java的基本数据类型和引用数据类型都有哪些,string属于什么类型...
  7. 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}
  8. v380云存储如何查询_使用 JuiceFS 在云上优化 Kylin 的存储性能
  9. linux防止文件被复制,技术|如何在 Linux 系统中防止文件和目录被意外的删除或修改...
  10. Mysql插入锁表情况
  11. Meltdown和Foreshadow等补丁被指不完整,处理器易受新攻击
  12. Django笔记8(模板引擎)
  13. 在VS中查看文件是谁签出的
  14. AI笔刷 600+专业ai矢量笔刷套装(含安装教程)
  15. 注意JDBC数据库连接中资源关闭的顺序
  16. harbor 安装启动遇到的keng
  17. Web前端之jQuery 一
  18. 留言板(php+数据库)
  19. lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型
  20. PROFINET实时以太网协议

热门文章

  1. 那些年,我用过的Java线上故障排查工具和方法整理
  2. 阿里程序员职级、薪资、股权大揭秘!
  3. Zepto实战练习(1)_静态页面搭建及css动画完成
  4. Linux入门-专题视频课程
  5. iOS中的下载管理器(支持断点续传)
  6. 5款实用Python爬虫小工具推荐(云爬虫+采集器)
  7. 利用计算机模拟专家给病人沴,【计算机】模拟部分.ppt
  8. gRPC 快速体验 (2):Streaming RPC
  9. 腾讯CDC团队:前端异常监控解决方案
  10. 『转』魔兽争霸秘籍之高手速成大法