行列式的定义

news/2025/2/24 14:00:24

排列的逆序数

  对于一个排列,如果是从到到尾都是从小到大,那么逆序数(number of permutation inversions)就为0.只要出现一次大的在前,小的在后,逆序数就加一次。逆序数的符号是希腊字母 τ \tau τ,读音为“涛",比如以下排列:
3 , 6 , 5 , 4 , 1 , 2 3,6,5,4,1,2 3,6,5,4,1,2
  它的逆序数是多少呢?把逆序对,写出来:
( 3 , 1 ) , ( 3 , 2 ) ( 6 , 5 ) , ( 6 , 4 ) , ( 6 , 1 ) , ( 6 , 2 ) ( 5 , 4 ) , ( 5 , 1 ) , ( 5 , 2 ) ( 4 , 1 ) , ( 4 , 2 ) (3,1),(3,2)\\ (6,5),(6,4),(6,1),(6,2)\\ (5,4),(5,1),(5,2)\\ (4,1),(4,2)\\ (3,1),(3,2)(6,5),(6,4),(6,1),(6,2)(5,4),(5,1),(5,2)(4,1),(4,2)
  所以逆序数为
τ ( 3 , 6 , 5 , 4 , 1 , 2 ) = 11 \tau(3,6,5,4,1,2)=11 τ(3,6,5,4,1,2)=11
  逆序数为奇数就是奇排列,逆序数为偶数就是偶排列。

行列式定义

  行列式的定义是一个求和,求和的每一项是从矩阵的按顺序从每一列找出不同行的元素连乘起来,他们的行号如果是奇排列就乘以-1,如果是偶排列就不变。行列式的符号是一对竖线,跟绝对值一样,或者用det表示,用数学语言就是这样表示:
∣ A ∣ = d e t ( A ) = ∑ ( − 1 ) τ ( i 1 , ⋯   , i j , ⋯   , i n ) ∏ j = 1 n a i j j |A|=det(A)=\sum(-1)^{\tau(i_1,\cdots,i_j,\cdots,i_n)}\prod_{j=1}^{n}a_{i_jj} A=det(A)=(1)τ(i1,,ij,,in)j=1naijj
  比如计算三阶矩阵的行列式,就是这样的:
∣ A ∣ = d e t ( A ) = τ ( 1 , 2 , 3 ) a 11 a 22 a 33 + τ ( 1 , 3 , 2 ) a 11 a 32 a 23 + τ ( 2 , 1 , 3 ) a 21 a 12 a 33 + τ ( 2 , 3 , 1 ) a 21 a 32 a 13 + τ ( 3 , 1 , 2 ) a 31 a 12 a 23 + τ ( 3 , 2 , 1 ) a 31 a 22 a 13 = a 11 a 22 a 33 − a 11 a 32 a 23 − a 21 a 12 a 33 + a 21 a 32 a 13 + a 31 a 12 a 23 − a 31 a 22 a 13 |A_|=det(A)\\=\tau(1,2,3)a_{11}a_{22}a_{33}+\\ \tau(1,3,2)a_{11}a_{32}a_{23}+\\ \tau(2,1,3)a_{21}a_{12}a_{33}+\\ \tau(2,3,1)a_{21}a_{32}a_{13}+\\ \tau(3,1,2)a_{31}a_{12}a_{23}+\\ \tau(3,2,1)a_{31}a_{22}a_{13}\\= a_{11}a_{22}a_{33}\\ -a_{11}a_{32}a_{23}\\ -a_{21}a_{12}a_{33}\\ +a_{21}a_{32}a_{13}\\ +a_{31}a_{12}a_{23}\\ -a_{31}a_{22}a_{13} A=det(A)=τ(1,2,3)a11a22a33+τ(1,3,2)a11a32a23+τ(2,1,3)a21a12a33+τ(2,3,1)a21a32a13+τ(3,1,2)a31a12a23+τ(3,2,1)a31a22a13=a11a22a33a11a32a23a21a12a33+a21a32a13+a31a12a23a31a22a13
  当然也可以按顺序从每行找不同列的元素相乘,结果都是一样的,上面的公式就可以改写为:
∣ A ∣ = d e t ( A ) = ∑ ( − 1 ) τ ( j 1 , ⋯   , j i , ⋯   , j n ) ∏ i = 1 n a i j i |A|=det(A)=\sum(-1)^{\tau(j_1,\cdots,j_i,\cdots,j_n)}\prod_{i=1}^{n}a_{ij_i} A=det(A)=(1)τ(j1,,ji,,jn)i=1naiji

Python实现

  按照定义计算行列式,需要求全排列,我在求全排列时,使用了Heap算法,至于Heap算法,可以参考我的博文:全排列Heap算法。全排列求出来了的话,剩余的就简单了,代码如下:

python">    def determinant_by_permutation(self):
        import com.youngthing.mathalgorithm.permutations.heap as hp
        n = len(self.__vectors)
        array = [i for i in range(n)]
        permutations = hp.permutations(array)
        sum = 0
        for p in permutations:
            inversions = hp.number_of_inversions(p)
            item = 1
            for i in range(n):
                item *= self.__vectors[i][p[i]]
            if (inversions & 1) == 0:
                sum += item
            else:
                sum -= item
        return sum

  测试数据:
∣ 1 − 1 − 2 − 3 3 2 1 4 2 1 1 1 6 5 4 3 ∣ = − 28 \begin{vmatrix}1 & -1 & -2 & -3\\ 3 & 2 & 1 & 4\\ 2 & 1 & 1 & 1\\ 6 & 5 & 4 & 3\\ \end{vmatrix}=-28 1326121521143413 =28
  对于算法基础不好的人来说,求全排列确实麻烦,所以我接下来要介绍一种递归到 2 × 2 2\times 2 2×2矩阵的行列式算法,实现起来比较容易,链接如下:Chiò算法。


http://www.niftyadmin.cn/n/28892.html

相关文章

【网络安全】WiFi密码爆破教程

WiFi密码爆破教程前言一、什么是暴力破解?二、准备破解工具1.VMware Pro 16 虚拟机安装2. VMware安装Kali Linux3. kali监听无限网卡三、WiFi密码暴力破解1. 虚拟机连接USB网卡2. 扫描附近WiFi3. 查看目标WiFi连接设备4. 抓包5. 破解前言 暴力破解攻击是指攻击者通…

【Java开发】Spring Cloud 05 :远程服务调用Openfeign 替代 WebClient

在前边章节中,我们借助 Nacos 的服务发现能力,使用 WebClient 实现了服务间调用。从功能层面上来讲,我们已经完美地实现了微服务架构下的远程服务调用,但是从易用性的角度来看,这种实现方式似乎对开发人员并不怎么友好…

Cadence PCB仿真使用Allegro PCB SI查看仿真波形的方法图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,拓扑提取阶段仿真方法3,图纸设计阶段仿真方法4,总结1,概述 本文简单介绍使用Alegro PCB SI执行仿真查看仿真波形的两种方法。 2,拓扑提取阶段仿真方法 如下图在拓扑提取阶段,添加完激励…

华为OD机试 - 日志限流

题目描述 某软件系统会在运行过程中持续产生日志,系统每天运行N单位时间,运行期间每单位时间产生的日志条数保行在数组records中。records[i]表示第i单位时间内产生日志条数。 由于系统磁盘空间限制,每天可记录保存的日志总数上限为total条。 如果一天产生的日志总条数大于…

宝贝代码部署笔记

记录前后端分离项目部署到云服务器;前端使用vue,element-ui,axios,router进行开发;后端使用springboot,mybatis,MySQL进行开发;完整记录前端项目npm打包静态文件,后端项目…

第53章 SQL GROUP BY 语句教程

GROUP BY 语句可结合一些聚合函数来使用 GROUP BY 语句 GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY c…

软件工程 黄金点游戏

这个故事最初出现在 《移山之道》中,我经常拿来做和创新的时机相关课堂练习和讨论,效果很好。我把这个练习和它的一些延伸话题都搬到这个新博客里。 黄金点游戏 N个同学(N通常大于10),每人写一个 0~100之间的有理数 …

Arduino环境下对NodeMCU ESP8266将文件直接传入flash的三种方式

flash存储简答介绍 参考:https://www.elecfans.com/consume/572040.html flash存储器又称闪存(快闪存储器),就其本质而言,flash存储器属于EEPROM(电擦除可编程只读存储器)类型。是一种长寿命的…