线性代数之二------任意阶行列式的计算

上一篇,我们讲到了二阶行列式的定义,接下来我们要将其拓展到任意阶的行列式。

在此之前,我们要讲一个叫做逆序数的东西,它与行列式的定义可谓是息息相关。

那么,什么是逆序数呢?

众所周知,任意一个大小为n的集合都可以排列成n!个序列,假定集合中的元素是可排序的,

那么我们将前i-1个数中,比第i个数大的数的个数累加之和就是逆序数。

下面给出其数学公式:

Sum(ak > ai),其中,0 < k < i and  0 < i <= n

一个顺序序列的逆序数,是0。

一个逆序序列的逆序数(n-1)!。

接下来是关于逆序数的代码:

/*

        Date: 2017-10-18
        
        Author: mtl6906

        Function: 逆序数的求解

     Parameter: 
  
        int [] ,int

     Return:

        int
*/ #include <cstdio> using namespace std; int inversionNumber(int a[],int size){ int count = 0; for(int i=1;i<size;i++){ for(int j=0;j<i;j++){ if(a[j] > a[i]){ count++; } } } return count; }

另外,也是很重要的一点,我们将逆序数为奇数的排列叫做奇排列,为偶数的排列则叫做偶排列,代码如下:

 

接下来,我们将了解到逆序数的作用。

我们先来看看三阶矩阵的计算公式:

| a11 a12 a13 |
| a21 a22 a23 |
| a31 a32 a33 |

上式可以表达为:

 det = a13a21a32 + a12a23a31 + a11a22a33 - a13a22a31 - a12a21a33 - a11a23a32

仔细观察就会发现正数部分的列标都是偶排列,而负数部分的列标都是奇排列。

然后发现二阶行列式同样符合上述规则。

然后我们就可以推出行列式的通用计算公式:

Sum = (-1)^t*a1p1a2p2a3p3

其中t是列标的逆序数。

由此我们可以总结出任意阶的行列式的计算公式:

det(aij) = Sum((-1)^t * a1p1a2p2a3p3...anpn) (n!种排列)

因为交换相邻的两个元素,会改变序列的奇偶性,所以奇排列要置换为顺序序列需要奇数次,

偶排列置换为顺序序列需要偶数次。

由此我们可以将上式中的列标替换为行标,也就是公式:

det(aij) = Sum((-1)^t * ap11ap22ap33ap44...apnn)

接下来贴下本章代码:

  

恩...任意阶行列式的计算就讲到这里吧,下一篇我们介绍下行列式的一些性质吧。

posted @ 2017-10-17 21:51  mtl6906  阅读(1059)  评论(0编辑  收藏  举报