行列式的定義是什么(2)
行列式的定義是什么
行列式應用
求特征值:給定一個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個數(shù)(m為大于2的整數(shù))的和,則此行列式可以寫成m個行列式的和。
性質5:行列式某一行(列)各元素乘以同一個數(shù)加到另一行(列)對應元素上,行列式不變。
性質6:將一行(列)的k倍加進另一行(列)里,行列式的值不變。 注意:一行(列)的k倍 加上另一行(列),行列式的值改變。
其它性質
若A是可逆矩陣, 設 A‘為 A的轉置矩陣, (參見共軛) 若矩陣相似,其行列式相同。 行列式是所有特征值之積。這可由矩陣必和其Jordan標準形相似推導出。
行列式的展開
余因式(英譯:cofactor)
又稱“余子式”、“余因子”。參見主條目余因式對一個 n階的行列式 M,去掉 M的第 i行第 j列后形成的 n-1階的行列式叫做 M關于元素 mij的 子式。記作 M i j。
余因式為 Cij=(-1)^(i+j)*Mij
代數(shù)余子式
在n階行列式中,把(i,j)元aij所在的第i行和第j列劃去后,留下來的n-1階行列式叫做(i,j)元aij的余子式,記作Mij:記
Aij=(-1)i+j Mij
Aij叫做(i,j)元aij的代數(shù)余子式
行和列的展開
一個 n階的行列式 M可以寫成一行(或一列)的元素與對應的代數(shù)余子式的乘積之和,叫作行列式按一行(或一列)的展開。
這個公式又稱作拉普拉斯公式,把 n階的行列式計算變?yōu)榱?n個 n-1階行列式的計算。
行列式函數(shù)
由拉普拉斯公式可以看出,矩陣 A的行列式是關于其系數(shù)的多項式。因此行列式函數(shù)具有良好的光滑性質。
單變量的行列式函數(shù)設為的函數(shù),則也是的。其對 t的導數(shù)為
矩陣的行列式函數(shù)函數(shù)是連續(xù)的。由此,n階一般線性群是一個開集,而特殊線性群則是一個閉集。
函數(shù)也是可微的,甚至是光滑的()。其在 A處的展開為
也就是說,在裝備正則范數(shù)的矩陣空間Mn()中,伴隨矩陣是行列式函數(shù)的梯度
特別當 A為單位矩陣時,
可逆矩陣的可微性說明一般線性群GLn()是一個李群。
行列式與線性方程組
行列式的一個主要應用是解線性方程組。當線性方程組的方程個數(shù)與未知數(shù)個數(shù)相等時,方程組不一定總是有唯一解。對一個有 n個方程和 n個未知數(shù)的線性方程組,我們研究未知數(shù)系數(shù)所對應的行列式。這個線性方程組有唯一解當且僅當它對應的行列式不為零。這也是行列式概念出現(xiàn)的根源。
當線性方程組對應的行列式不為零時,由克萊姆法則,可以直接以行列式的形式寫出方程組的解。但用克萊姆法則求解計算量巨大,因此并沒有實際應用價值,一般用于理論上的推導。
行列式在數(shù)學中,是一個函數(shù),其定義域為的矩陣A,取值為一個標量,寫作det(A)或 | A | 。行列式可以看做是有向面積或體積的概念在一般的歐幾里得空間中的推廣?;蛘哒f,在 n 維歐幾里得空間中,行列式描述的是一個線性變換對“體積”所造成的影響。無論是在線性代數(shù)、多項式理論,還是在微積分學中(比如說換元積分法中),行列式作為基本的數(shù)學工具,都有著重要的應用。
高階行列式的計算
本程序內容
]窗體代碼如下b]
Option Explicit
Option Base 1
Private Sub Form_Load()
Dim i As Long
n = Val(InputBox("請輸入行列式的階數(shù)!", "輸入框"))
If n < 2 Then
MsgBox "輸入錯誤階數(shù)必須大于1!" & vbCrLf & "請單擊重試重新輸入!", vbCritical, "系統(tǒng)提示"
Exit Sub
Command2.TabIndex = 1
End If
If n > 9 Then
MsgBox "輸入錯誤本程序只能計算10階以下的行列式!" & "請單擊重試重新輸入!", vbCritical, "系統(tǒng)提示"
Exit Sub
Command2.TabIndex = 1
End If
str2 = "1"
For i = 2 To n
str2 = str2 & i '組成1到n組成的字符串123456.....n
Next i
s = n
MsgBox "請在文本框里按行排列輸入行列式" & vbCrLf & "注意用一個空格隔開!", vbOKOnly, "信息提示"
Text1.TabIndex = 1
Text1.Text = ""
End Sub
Private Sub Command1_Click()
Dim i As Long, j As Long, k As Long, m As Long, sum As Long, w As Long
Dim strb As String, sz1() As String, sz2() As Long, sz3() As Long
Dim str1 As String, str3 As String, st() As String
ReDim sa(n) As Long, sz2(n) As Long
'//st() 為輸入行列式的字符串數(shù)組
'//sz3()為二維行列式數(shù)組
'//str2為1到n組成的字符串123456.....n 為全局變量
'//str3為str2的全排列所組成的字符串每種排列以“,”隔開
str1 = Text1.Text
If Len(str1) < 2 * n ^ 2 - 1 Then
MsgBox "輸入錯誤!" & vbCrLf & n & "階行列式中元素個數(shù)應為" & n ^ 2 & "!" & vbCrLf & "請查看是否個元素之間都用空格隔開及個數(shù)是否正確!" & vbCrLf & "請點擊重試重新輸入!", vbCritical, "系統(tǒng)提示"
Text1.Text = ""
Exit Sub
End If
st() = Split(str1) '取得行列式的數(shù)據(jù)
ReDim sz3(n, s) As Long
For i = 1 To n
For j = 1 To s
k = (i - 1) * s + j '按行排列行列式中第k個數(shù),k與i,j的關系
sz3(i, j) = Val(st(k - 1)) '把原數(shù)組按行排列存入一個二維數(shù)組
Next j
Next i
Permutation "", str2, str3
sz1() = Split(str3, ",") '取n!個全排列存入 數(shù)組 sz1()
For j = 1 To JC(n)
m = 1 '每次都降m初始為1
strb = sz1(j) '每次取出一種排列存入strb
For i = 1 To n
sz2(i) = Val(Mid(strb, i, 1)) '順序取每個全排列中的數(shù)字存入數(shù)組sz2()
Next i
For i = 1 To n
m = m * sz3(sz2(i), i) '求元素之積
Next i
sum = sum + arr(sz2(), n) * m 'n!個積相加并相應冠上正負號
Next j
Text2.Text = sum
End Sub
Private Sub Command2_Click()
Dim i As Long
n = Val(InputBox("請輸入行列式的階數(shù)!", "輸入框"))
If n < 2 Then
MsgB
ox "輸入錯誤階數(shù)必須大于1!" & vbCrLf & "請單擊重試重新輸入!", vbCritical, "系統(tǒng)提示"
Exit Sub
Command2.TabIndex = 1
End If
If n > 9 Then
MsgBox "輸入錯誤本程序只能計算10階一下的行列式!" & "請單擊重試重新輸入!", vbCritical, "系統(tǒng)提示"
Exit
Sub
Command2.TabIndex = 1
End If
str2 = "1"
For i = 2 To n
str2 = str2 & i '組成1到n組成的字符串123456.....n
Next i
s = n
MsgBox "請在文本框里按行排列輸入行列式" & vbCrLf & "注意用一個空格隔開!", vbOKOnly, "信息提示"
Text1.Text = ""
End Sub
模塊1
遞
歸法求全排列
Option Explicit
Option Base 1
'遞歸求全排列并返回全排列所組成的字符串
'算法描述:
'以8位為例,求8位數(shù)的全排列,其實是8位中任取一位
'在后加上其余7位的全排列
'7 位:任取一位,其后跟剩下6位的全排列
'……
'這樣就有兩部分,一部分為前面的已經(jīng)取出來的串,另一部分為后面即將進行的全排列的串
'參數(shù)pre即為前面已經(jīng)取出來的串
'參數(shù)s
即為將要進行排列的串
'參數(shù)str即為返回全排列所組成的字符串,每種排列以“,”隔開
Public Sub Permutation(pre As String, s As String, str As String)
Dim i As Long
'// 如果要排列的串長度為1,則返回
If Len(s) = 1 Then
'//將排列數(shù)以“,”隔開存入一個字符串
str = str & "," & pre & s
Exit
Sub
End If
'// for循環(huán)即是取出待排列的串的任一位
For i = 1 To Len(s)
'// 遞歸,將取出的字符并入已經(jīng)取出的串
'// 那么剩下的串即為待排列的串
Permutation pre & Mid$(s, i, 1), Left$(s, i - 1) & Mid$(s, i + 1), str
Next i
End Sub
模塊2
求逆序數(shù)
Option Explicit
Opt
ion Base 1
Public n As Long, s As Long, str2 As String
'//求存入a()數(shù)組排列為奇排列還偶排列如果為奇排列返回-1,偶排列返回1
Public Function arr(a() As Long, ByVal n As Long) As Integer
Dim i As Long, j As Long, k As Long, m As Long
For i = 1 To n - 1
m = i
For j = m + 1 To n
If a(i) > a(j) Then k = k + 1
Next
Next
arr = (-1) ^ k
End Function
模塊3
遞歸法求階乘
Option Explicit
'//遞歸法求階乘
Public Function JC(n As Long) As Double
If n < 2 Then JC = 1: Exit Function
JC = n * JC(n - 1)
End Function
基本控件如圖
command1為計算command2為重試
推廣到高階行列式
以上代碼只適用10階一下行列式的計算,原因是限于模塊1代碼遞歸法求全排列只能對123....89求全排列但大于9就出現(xiàn)了兩位數(shù),不能再 返回其所要的全排列,但不是不能避免的,我們可以用單個字符來代替多位數(shù),在返回全排列存入所需數(shù)組后再用ASCII 一一對應返回其數(shù)值,再進行計算,也許有人會說當我們用完所有字符怎么辦呢,但100行列式我們要計算10000個數(shù)的全排列的逆序等,其計算量已是赫然10的160次方的大數(shù),恐怕計算機也無能為力,再則那樣實際意義已經(jīng)不是很大!當然,我們可以開發(fā)更好程序去計算,畢竟知識是無界的!
本代碼版權保留,僅供技術交流,不得用于商業(yè)用途!
更優(yōu)的算法
其實完全可以用二維數(shù)組完成如人的上三角算法,先判定aii是否為零,如是則交換至非零,再上減下直至上三角,再aii連乘即可,算法規(guī)模為n^3.至于更好的,可能還有。
看過"行列式的定義"的人還看了:
1.什么是旋轉矩陣
3.什么是等價