先摘一段百度百科上的搜索结果(同《信息学奥赛之数学一本通》p300):

一个n×n的方阵A的行列式记为det(A)或者|A|,一个2×2矩阵的行列式可表示如下:

把一个n阶行列式中的元素aij所在的第i行和第j列划去后,留下来的n-1阶行列式叫做元素aij的余子式,记作Mij。记Aij=(-1)i+jMij,叫做元素aij的代数余子式。例如:

一个n×n矩阵的行列式等于其任意行(或列)的元素与对应的代数余子式乘积之和,即:

为什么一个2*2的矩阵的行列式可以这样表示呢?我们来分析一下:
由于当A为一个1*1的矩阵时,若A=(a),则det(A)=a。那么当A为一个2*2的矩阵时,若A为最上面的2*2的矩阵,则:

det(A)=(文字描述)A第一行第一列的元素(a)乘上-1的1+1次方再乘上A中划去第一行和第一列剩下的1*1的矩阵的行列式(det(d)=d)得到a*1*d=ad;同理,得到A第一行第二列元素与其代数余子式的乘积为bc,而-1的2+1次方为-1,所以得到-bc。最后det(A)就等于(其任意行(或列)的元素与对应的代数余子式乘积之和)ad-bc。

这样,一个3*3的矩阵的行列式也就迎刃而解了,如:

以此类推,对于一个n*n的矩阵,可任选一行或列(我选的是第一行)一步步递归求得矩阵的行列式。

下面附上代码:

#include<iostream>
#include<vector>
using namespace std;
typedef vector<int> vec;
typedef vector<vec> mat;
typedef long long ll;mat cutoff(mat A, int n, int i) {  //切割,划去第1行第i列mat B(n, vec(n));for(int c = 0; c < n; c++)for(int r = 0; r < n; r++)B[c][r] = A[c + 1][r + (r >= i)];return B;
}ll det(mat A, int n) {if(n == 1)return A[0][0];  //当A为一阶矩阵时,直接返回A中唯一的元素 ll ans = 0;for(int i = 0; i < n; i++)ans += A[0][i] * det(cutoff(A, n - 1, i), n - 1) * (i % 2 ? -1 : 1); return ans;
}int main() {int n;scanf("%d", &n);  //输入阶数 if(n == 0)return 0;mat A(n, vec(n));for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)scanf("%d", &A[i][j]);  //输入A各行各列的元素 ll num = det(A, n);printf("%d", num);return 0;
}

矩阵的行列式(递归C++)相关推荐

  1. 线性代数-01矩阵与行列式

    矩阵 定义 特殊矩阵:上三角.下三角.对角 操作:初等行列变换.矩阵分块 Jacobi矩阵 A = [ ∂ f 1 ( x 0 ) ∂ x 1 ∂ f 1 ( x 0 ) ∂ x 2 ⋯ ∂ f 1 ...

  2. det--求矩阵的行列式

    [功能简介]用高斯消元法求方阵的行列式. [语法格式] d=det(X) 函数返回方阵X的行列式.行列式等于零的矩阵称为奇异矩阵,理论上可以采用det(X)<tolerance的方法测试矩阵X是 ...

  3. Boost:使用行列式函数和transform()算法计算许多4x4矩阵的行列式

    Boost:使用行列式函数和transform()算法计算许多4x4矩阵的行列式 实现功能 C++实现代码 实现功能 使用行列式函数和transform()算法计算许多4x4矩阵的行列式 C++实现代 ...

  4. 线性代数 —— 矩阵的行列式

    1.行列式 排成 n 阶方阵形式的 n^2 个数所确定的一个数称为 n 阶方阵 A 的行列式,记为:det(A) 或 |A| 一个 2x2 的矩阵的行列式可表示为: 2.余子式与代数余子式 将 n 阶 ...

  5. 【线性代数】1.2矩阵的行列式与克莱姆法则

    矩阵的行列式与克莱姆法则 1.行列式的引入 2.行列式 3.余子式与代数余子式 3.重要定理 4.主要公式 5.方阵的行列式 6.克莱姆法则 1.行列式的引入 用消元法解二元线性方程组 {a11x1+ ...

  6. 雅可比(Jacobi)矩阵与行列式

    函数矩阵与行列式(雅可比(Jacobi)矩阵与行列式) 1.雅可比矩阵与行列式的定义 设由m个n元函数组成的函数组: yi=fi(x1,x2,...,xn)     (i=1,2,...,m) 如果每 ...

  7. 矩阵初等变换的“打洞技巧”与“分块矩阵的行列式公式”

    矩阵打洞(初等变换矩阵)是线性代数的基本功. 打洞技巧是矩阵一行减另一行的若干倍,或一列减另 一列的若干倍这两类初等变换的推广 利用分块矩阵的乘法将矩阵的某个块变为零 ( A B C D ) = ( ...

  8. 矩阵的行列式、秩的意义

              线性代数真是一个很抽象的东西,即使我们很多人都学过,但是我相信绝大部分的都不知道这是干嘛用的,找了不少资料,终于发现了这么一篇好文章,于是强烈希望可以和大家分享,帮助大伙进一步理解 ...

  9. 矩阵与行列式的区别 行列式简单理解(二三阶)

    目录 矩阵与行列式的区别 行列式简单理解(二三阶) 矩阵与行列式的区别 如下: 1. 矩阵是一个表格,行数和列数可以不一样:而行列式是一个数,且行数必须等于列数.只有方阵才可以定义它的行列式,而对于长 ...

最新文章

  1. 太强了,Python 开发桌面小工具,让代码替我们干重复的工作~
  2. Ubuntu安装apache+Yii2
  3. Java使用多线程发送消息
  4. C# 编程实现非自相交多边形质心
  5. linux在mak时候出现错误,在使用yocto构建linux映像时出现“memfd戋create的静态声明跟随非静态声明”错误...
  6. UML学习——类图(三)
  7. web虚拟服务器4核32g,Web服务器配备四核的优势
  8. 【做题】CSA49F - Card Collecting Game——思维dp
  9. IDEA设置自动导包功能
  10. 如何让Vue在同一局域网内能访问?
  11. 使用类型注解让 Python 代码更易读
  12. 181027每日一句
  13. shell编程四剑客之 find
  14. 机器学习入门:隐马尔科夫模型-8
  15. C语言大作业 商品库存管理系统
  16. Python 后端统一社会信用代码校验
  17. impala的优化策略:广播,hash与straight_join
  18. 在 jdk 1.4 中打印iteye技术网站
  19. 使用idea解决包依赖冲突的问题SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory
  20. [NOIP2018 普及组] 龙虎斗

热门文章

  1. matlab函数im2bw_matlab函数大全
  2. Franka Emika新款机器人FP3震撼发布,带来全新生态,重新定义协作机器人
  3. Sharepoint Online迁移方案 | 分享一
  4. 使用 imgaug 对图像进行数据增强 Data Augmentation
  5. rabbitmq linux端口,修改rabbitmq的连接端口
  6. HTML滚动条样式修改
  7. 【华为OD机试 2023】 最多几个直角三角形(C++ Java JavaScript Python)
  8. mysql 改密 xshell_xshell怎么搭建mysql
  9. 豆瓣阅读,真正的社会化阅读
  10. PHP常见的输出语句