行列式其中sgn(σ)是排列σ的符号差。
对于比较小的矩阵,比如说二阶和三阶的矩阵,行列式表达如下,有些像是主对角线(左上至右下)元素的乘积减去副对角线(右上至左下)元素的乘积(见图中红线和蓝线)。
2阶:3阶:。但对于阶数较大的矩阵,行列式有n!项,并不是这样的形式。
设P是一个二维的有向欧几里得空间,即一个所谓的欧几里得平面。两个向量X和X’的行列式是:
经计算可知,行列式表示的是向量X和X’形成的平行四边形的有向面积。并有如下性质:
设E是一个三维的有向欧几里得空间。三个三维向量的行列式是:
这时的行列式表示X、X’和X’’三个向量形成的平行六面体的有向体积,也叫做这三个向量的混合积。同样的,可以观察到如下性质:
在以上的行列式中,我们不加选择地将向量在所谓的正交基下分解,实际上在不同的基底之下,行列式的值并不相同。这并不是说平行六面体的体积不唯一。恰恰相反,基底变换可以看作线性映射对基的作用,而不同基底下的行列式代表了基底变换对“体积”的影响。可以证明,对于所有同定向的标准正交基底,向量组的行列式的值是一样的。也就是说,如果我们选择的基底都是“单位长度”,并且两两正交,那么在这样的基底之下,平行六面体的体积是唯一的。
经线性映射后的正方体
设E是一个一般的n维的有向欧几里得空间。一个线性变换把一个向量线性地变为另一个向量。比如说,在三维空间中,向量(x,y,z)被射到向量(x’,y’,z’):
其中a、b、c等是系数。如右图,正方体(可以看作原来的一组基形成的)经线性变换后可以变成一个普通的平行六面体,或变成一个平行四边形(没有体积)。这两种情况表示了两种不同的线性变换,行列式可以将其很好地分辨出来(为零或不为零)。
更详细地说,行列式表示的是线性变换前后平行六面体的体积的变化系数。如果设左边的正方体体积是一,那么中间的平行六面体的(有向)体积就是线性变换的行列式的值,右边的平行四边形体积为零,因为线性变换的行列式为零。这里我们混淆了线性变换的行列式和向量组的行列式,但两者是一样的,因为我们在对一组基作变换。
行列式是E到K上的交替多线性形式。
具体来说,设E是一个内积空间,一个从E到K上的交替多线性形式是指函数:
(多线性)或者说,当ai=aj的时候(交替性)所有E到K上的交替多线性形式的集合记作An(E)。
定理:An(E)的维度是1,也就是说,设是E的一组基,那么,所有的交替多线性形式都可以写成
其中是在基B下的展开。定理的证明是对任一个多线性形式,考虑将D依照多线性性质展开,
这时,由交替性,当且仅当是的一个排列,所以有
这里,。
向量组的行列式设是E的一组基,基B的行列式就是唯一的(由定理可知)交替多线性形式使得:
detB(e1,...,en)=1于是向量组的行列式就是
其中是在基B下的展开。这个公式有时被称作莱布尼兹公式。
设Mn(K)为所有定义在K上的矩阵的集合。将矩阵A的元素为A=(aij)。将矩阵M的n行写成,aj可以看作是上的向量。于是可以定义矩阵A的行列式为向量组的行列式,这里的向量都在的正交基上展开,因此矩阵的行列式不依赖于基的选择。
由莱布尼兹公式,可以证明矩阵行列式的一个重要性质:一个矩阵的行列式等于它的转置矩阵的行列式。
也就是说矩阵的行列式既可以看作n个行向量的行列式,也可以看作n个列向量的行列式。
证明:矩阵A的转置矩阵的行列式是:
令j=σ(i),由于每个排列都是双射,所以上式变成:
令τ=σ,当σ取遍所有排列时,τ也取遍所有排列,而且σ的符号差等于τ的符号差。所以
线性映射的行列式设f是n维线性空间E到自身的线性变换(线性自同态),f在E的任意一组基下的变换矩阵的行列式都是相等的。设B是E的一组基。那么f的行列式就是f在B下的变换矩阵的行列式:
之前对正方体做变换时,x1,...,xn是原来的基,,因此可以混淆向量组的行列式和线性变换的行列式。
考虑映射df,B使得x1,...,xn被映射到
df,B是一个交替n线性形式,因此由前面证的定理,df,B和detB只相差一个系数。
令x1,...,xn等于B,则得到
λ=df,B(B)所以有
也就是说
对于另外一组基B',运用基变更公式,可以得到du,B(B)等于du,B'(B')。于是df,B(B)是一个不依赖于基,只依赖于f的数。这正是detf的定义。
特别地,行列式为1的线性变换保持向量组的行列式,它们构成一般线性群GL(E)的一个子群SL(E),称作特殊线性群。可以证明,SL(E)是由所有的错切生成的,即所有具有如下形式的矩阵代表的线性变换:
也就是说,错切变换保持向量组形成的“平行多面体”的体积。同样,可以证明两个相似矩阵有相等的行列式。
行列式在数学中,是由解线性方程组产生的一种算式。其定义域为nxn的矩阵A,取值为一个标量,写作det(A)或|A|。行列式可以看做是有向面积或体积的概念在一般的欧几里得空间中的推广。或者说,在n维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响。无论是在线性代数、多项式理论,还是在微积分学中(比如说换元积分法中),行列式作为基本的数学工具,都有着重要的应用。行列式概念最早出现在解线性方程组的过程中。十七世纪晚期,关孝和与莱布尼茨的著作中已经使用行列式来确定线性方程组解的个数以及形式。十八世纪开始,行列式开始作为独立的数学概念被研究。十九世纪以后,行列式理论进一步得到发展和完善。矩阵概念的引入使得更多有关行列式的性质被发现,行列式在许多领域都逐渐显现出重要的意义和作用,出现了线性自同态和向量组的行列式的定义。
行列式的特性可以被概括为一个多次交替线性形式,这个本质使得行列式在欧几里德空间中可以成为描述“体积”的函数。
若干数字组成的一个类似于矩阵的方阵,与矩阵不同的是,矩阵的表示是用中括号,而行列式则用线段。行列式的值是按下述方式可能求得的所有不同的积的代数和,既是一个实数:求每一个积时依次从每一行取一个元因子,而这每一个元因子又需取自不同的列,作为乘数,积的符号是正是负决定于要使各个乘数的列的指标顺序恢复到自然顺序所需的换位次数是偶数还是奇数。也可以这样解释:行列式是矩阵的所有不同行且不同列的元素之积的代数和,和式中每一项的符号由积的各元素的行指标与列指标的逆序数之和决定:若逆序数之和为偶数,则该项为正;若逆序数之和为奇数,则该项为负。
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。
1545年,卡当在著作《大术》(ArsMagna)中给出了一种解两个一次方程组的方法。他把这种方法称为“母法”(regulademodo)。这种方法和后来的克莱姆法则已经很相似了,但卡当并没有给出行列式的概念。
1683年,日本数学家关孝和在其著作《解伏题之法》中首次引进了行列式的概念。书中出现了、乃至的行列式,行列式被用来求解高次方程组。
1693年,德国数学家莱布尼茨开始使用指标数的系统集合来表示有三个未知数的三个一次方程组的系数。他从三个方程的系统中消去了两个未知量后得到一个行列式。这个行列式等于零,就意味着有一组解同时满足三个方程。由于当时没有矩阵的概念,莱布尼茨将行列式中元素的位置用数对来表示:ij代表第i行第j列。莱布尼茨对行列式的研究成果中已经包括了行列式的展开和克莱姆法则,但这些结果在当时并不为人所知。
矩阵A的行列式有时也记作|A|。绝对值和矩阵范数也使用这个记法,有可能和行列式的记法混淆。不过矩阵范数通常以双垂直线来表示(如:),且可以使用下标。此外,矩阵的绝对值是没有定义的。因此,行列式经常使用垂直线记法(例如:克莱姆法则和子式)。例如,一个矩阵:
矩阵
行列式det(A)也写作|A|或明确的写作:
行列式
即矩阵的方括号以细长的垂直线取代。
求特征值:给定一个n阶矩阵A,n阶非零列向量x,令Ax=λx,则称λ为A的特征值,x为A的特征向量。通过变形得行列式[A-λE]=0值时,上式成立,而此行列式为零,即Σf(λ)=0即解一元n次方程,求出特征值。
多变元微积分的代换积分法(参见雅可比矩阵)在n个n维实向量所组成的平行多面体的体积,是这些实向量的所组成的矩阵的行列式的绝对值。以此推广,若线性变换可用矩阵A表示,S是R的可测集,则f(S)的体积是S的体积的倍。朗斯基行列式
n介行列式的性质:
性质1:行列式与他的转置行列式相等。
性质2:互换行列式的两行(列),行列式变号。
推论:若一个行列式中有两行的对应元素(指列标相同的元素)相同,则这个行列式为零。
性质3:行列式中某行的公共因子k,可以将k提到行列式外面来。
推论:行列式中有两行(列)元素对应成比例时,该行列式等于零。
性质4:行列式具有分行(列)相加性。
推论:如果将行列式某一行(列)的每个元素都写成m个数(m为大于2的整数)的和,则此行列式可以写成m个行列式的和。
性质5:行列式某一行(列)各元素乘以同一个数加到另一行(列)对应元素上,行列式不变。
性质6:将一行(列)的k倍加进另一行(列)里,行列式的值不变。注意:一行(列)的k倍加上另一行(列),行列式的值改变。
其它性质
若A是可逆矩阵,设A‘为A的转置矩阵,(参见共轭)若矩阵相似,其行列式相同。行列式是所有特征值之积。这可由矩阵必和其Jordan标准形相似推导出。
余因式(英译:cofactor)
又称“余子式”、“余因子”。参见主条目余因式对一个n阶的行列式M,去掉M的第i行第j列后形成的n-1阶的行列式叫做M关于元素mij的子式。记作Mij。
余因式为Cij=(-1)^(i+j)*Mij
在n阶行列式中,把(i,j)元aij所在的第i行和第j列划去后,留下来的n-1阶行列式叫做(i,j)元aij的余子式,记作Mij:记
Aij=(-1)i+jMij
Aij叫做(i,j)元aij的代数余子式
一个n阶的行列式M可以写成一行(或一列)的元素与对应的代数余子式的乘积之和,叫作行列式按一行(或一列)的展开。
这个公式又称作拉普拉斯公式,把n阶的行列式计算变为了n个n-1阶行列式的计算。
由拉普拉斯公式可以看出,矩阵A的行列式是关于其系数的多项式。因此行列式函数具有良好的光滑性质。
单变量的行列式函数设为的函数,则也是的。其对t的导数为
矩阵的行列式函数函数是连续的。由此,n阶一般线性群是一个开集,而特殊线性群则是一个闭集。
函数也是可微的,甚至是光滑的()。其在A处的展开为
也就是说,在装备正则范数的矩阵空间Mn()中,伴随矩阵是行列式函数的梯度
特别当A为单位矩阵时,
可逆矩阵的可微性说明一般线性群GLn()是一个李群。
行列式的一个主要应用是解线性方程组。当线性方程组的方程个数与未知数个数相等时,方程组不一定总是有唯一解。对一个有n个方程和n个未知数的线性方程组,我们研究未知数系数所对应的行列式。这个线性方程组有唯一解当且仅当它对应的行列式不为零。这也是行列式概念出现的根源。
当线性方程组对应的行列式不为零时,由克莱姆法则,可以直接以行列式的形式写出方程组的解。但用克莱姆法则求解计算量巨大,因此并没有实际应用价值,一般用于理论上的推导。
行列式在数学中,是一个函数,其定义域为的矩阵A,取值为一个标量,写作det(A)或|A|。行列式可以看做是有向面积或体积的概念在一般的欧几里得空间中的推广。或者说,在n维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响。无论是在线性代数、多项式理论,还是在微积分学中(比如说换元积分法中),行列式作为基本的数学工具,都有着重要的应用。
本程序内容
]窗体代码如下b]
OptionExplicit
OptionBase1
PrivateSubForm_Load()
DimiAsLong
n=Val(InputBox("请输入行列式的阶数!","输入框"))
Ifn<2Then
MsgBox"输入错误阶数必须大于1!"&vbCrLf&"请单击重试重新输入!",vbCritical,"系统提示"
ExitSub
Command2.TabIndex=1
EndIf
Ifn>9Then
MsgBox"输入错误本程序只能计算10阶以下的行列式!"&"请单击重试重新输入!",vbCritical,"系统提示"
str2="1"
Fori=2Ton
str2=str2&i'组成1到n组成的字符串123456.....n
Nexti
s=n
MsgBox"请在文本框里按行排列输入行列式"&vbCrLf&"注意用一个空格隔开!",vbOKOnly,"信息提示"
Text1.TabIndex=1
Text1.Text=""
EndSub
PrivateSubCommand1_Click()
DimiAsLong,jAsLong,kAsLong,mAsLong,sumAsLong,wAsLong
DimstrbAsString,sz1()AsString,sz2()AsLong,sz3()AsLong
Dimstr1AsString,str3AsString,st()AsString
ReDimsa(n)AsLong,sz2(n)AsLong
'//st()为输入行列式的字符串数组
'//sz3()为二维行列式数组
'//str2为1到n组成的字符串123456.....n为全局变量
'//str3为str2的全排列所组成的字符串每种排列以“,”隔开
str1=Text1.Text
IfLen(str1)<2*n^2-1Then
MsgBox"输入错误!"&vbCrLf&n&"阶行列式中元素个数应为"&n^2&"!"&vbCrLf&"请查看是否个元素之间都用空格隔开及个数是否正确!"&vbCrLf&"请点击重试重新输入!",vbCritical,"系统提示"
st()=Split(str1)'取得行列式的数据
ReDimsz3(n,s)AsLong
Fori=1Ton
Forj=1Tos
k=(i-1)*s+j'按行排列行列式中第k个数,k与i,j的关系
sz3(i,j)=Val(st(k-1))'把原数组按行排列存入一个二维数组
Nextj
Permutation"",str2,str3
sz1()=Split(str3,",")'取n!个全排列存入数组sz1()
Forj=1ToJC(n)
m=1'每次都降m初始为1
strb=sz1(j)'每次取出一种排列存入strb
sz2(i)=Val(Mid(strb,i,1))'顺序取每个全排列中的数字存入数组sz2()
m=m*sz3(sz2(i),i)'求元素之积
sum=sum+arr(sz2(),n)*m'n!个积相加并相应冠上正负号
Text2.Text=sum
PrivateSubCommand2_Click()
MsgB行列式ox"输入错误阶数必须大于1!"&vbCrLf&"请单击重试重新输入!",vbCritical,"系统提示"
MsgBox"输入错误本程序只能计算10阶一下的行列式!"&"请单击重试重新输入!",vbCritical,"系统提示"
Exit行列式Sub
模块1
递行列式归法求全排列
'递归求全排列并返回全排列所组成的字符串
'算法描述:
'以8位为例,求8位数的全排列,其实是8位中任取一位
'在后加上其余7位的全排列
'7位:任取一位,其后跟剩下6位的全排列
'……
'这样就有两部分,一部分为前面的已经取出来的串,另一部分为后面即将进行的全排列的串
'参数pre即为前面已经取出来的串
'参数s行列式即为将要进行排列的串
'参数str即为返回全排列所组成的字符串,每种排列以“,”隔开
PublicSubPermutation(preAsString,sAsString,strAsString)
'//如果要排列的串长度为1,则返回
IfLen(s)=1Then
'//将排列数以“,”隔开存入一个字符串
str=str&","&pre&s
'//for循环即是取出待排列的串的任一位
Fori=1ToLen(s)
'//递归,将取出的字符并入已经取出的串
'//那么剩下的串即为待排列的串
Permutationpre&Mid$(s,i,1),Left$(s,i-1)&Mid$(s,i+1),str
模块2
求逆序数
Opt行列式ionBase1
PublicnAsLong,sAsLong,str2AsString
'//求存入a()数组排列为奇排列还偶排列如果为奇排列返回-1,偶排列返回1
PublicFunctionarr(a()AsLong,ByValnAsLong)AsInteger
DimiAsLong,jAsLong,kAsLong,mAsLong
Fori=1Ton-1
m=i
Forj=m+1Ton
Ifa(i)>a(j)Thenk=k+1
Next
arr=(-1)^k
EndFunction
模块3
递归法求阶乘
'//递归法求阶乘
PublicFunctionJC(nAsLong)AsDouble
Ifn<2ThenJC=1:ExitFunction
JC=n*JC(n-1)
基本控件如图
command1为计算command2为重试
推广到高阶行列式
以上代码只适用10阶一下行列式的计算,原因是限于模块1代码递归法求全排列只能对123....89求全排列但大于9就出现了两位数,不能再返回其所要的全排列,但不是不能避免的,我们可以用单个字符来代替多位数,在返回全排列存入所需数组后再用ASCII一一对应返回其数值,再进行计算,也许有人会说当我们用完所有字符怎么办呢,但100行列式我们要计算10000个数的全排列的逆序等,其计算量已是赫然10的160次方的大数,恐怕计算机也无能为力,再则那样实际意义已经不是很大!当然,我们可以开发更好程序去计算,毕竟知识是无界的!
更优的算法
其实完全可以用二维数组完成如人的上三角算法,先判定aii是否为零,如是则交换至非零,再上减下直至上三角,再aii连乘即可,算法规模为n^3.至于更好的,可能还有。
“我的盒子里有7个橙子,给了韵韵2个橙子,给了皓皓3个橙子,我盒子里还剩几个橙子?”这是向阳星星班的孩子们在数学课上通过分橙子学习连减。智障孩子的逻辑思...