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