逆矩陣的兩種解法_第1頁
逆矩陣的兩種解法_第2頁
逆矩陣的兩種解法_第3頁
逆矩陣的兩種解法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、初等行變換求逆矩陣'* '初等變換法求逆矩陣'A()數(shù)組為輸入變量,存放輸入的矩陣'A1()數(shù)組為輸出變量,存放A()的逆矩陣Sub InverseMatrix(A(), A1() If UBound(A, 1) <> UBound(A, 2) Then MsgBox "逆矩陣不存在", vbInformation, "提示": Exit Sub '判斷矩陣是否為方陣,若不是則退出過程 Dim B(), N 'B()存放A()矩陣與單位矩陣的增廣矩陣 N = UBound(A) ReDim

2、B(N, 2 * N) '求A與單位矩陣的增廣矩陣 For i = 1 To N For J = 1 To 2 * N If J <= N Then B(i, J) = A(i, J) ElseIf J - N = i Then B(i, J) = 1 Else B(i, J) = 0 End If Next Next '將增廣矩陣化為行最簡(jiǎn)形矩陣 For i = 1 To N '判斷增廣矩陣左邊的n階矩陣的對(duì)角線上的元素,是否為零,若為零則進(jìn)行行交換 If B(i, i) = 0 Then '若為零,則與該列的非零元素所對(duì)應(yīng)的行進(jìn)行交換 For J =

3、i + 1 To N If B(J, i) <> 0 Then '若該列有非零元素,則進(jìn)行行交換 For I1 = 1 To 2 * N C = B(i, I1) B(i, I1) = B(J, I1) B(J, I1) = C Next Exit For End If Next '若該列沒有一個(gè)非零元素,即該列的元素全為零,則可知逆矩陣不存在 If J = N + 1 Then MsgBox "逆矩陣不存在", vbInformation, "提示": Exit Sub End If '將每列,非對(duì)角線上的元素化為零

4、 For J = 1 To N If J <> i Then If B(J, i) <> 0 Then H1 = B(J, i) / B(i, i) For J1 = i To 2 * N B(J, J1) = B(J, J1) - H1 * B(i, J1) Next End If End If Next Next i '將增廣矩陣化為行最簡(jiǎn)形矩陣,并將其右邊的逆矩陣賦給A1()數(shù)組 For i = 1 To N k = B(i, i) B(i, i) = B(i, i) / k For J = N + 1 To 2 * N B(i, J) = B(i, J)

5、 / k A1(i, J - N) = B(i, J) Next NextEnd Sub'*二、伴隨矩陣法求逆矩陣'*'本過程的作用是,求N階矩陣的逆矩陣Sub InverseMatrix1(A(), B() 'A()存放n階矩陣,B()存放n階矩陣的逆矩陣 Dim i, J, I1, J1, C(), k, K1, H For i = 1 To UBound(A) '求n階矩陣每行上的元素 For J = 1 To UBound(A) '求n階矩陣每列上的元素 ReDim C(UBound(A) - 1, UBound(A) - 1) '

6、;C()存放n階矩陣的余子式 '一下代碼作用是,去除n階矩陣中第j行,第i列,并把其余子式存放在C()中 For I1 = 1 To UBound(A) If I1 = J Then k = 1 Else For J1 = 1 To UBound(A) If J1 = i Then K1 = 1 Else C(I1 - k, J1 - K1) = A(I1, J1) End If Next K1 = 0 End If Next B(i, J) = (-1) (i + J) * valOfDet(C)/valofDet(A) 'B()存放N階矩陣的逆矩陣中的各元素 k = 0:

7、K1 = 0 Erase C Next NextEnd Sub'*'*Function valOfDet(A() 'A()為存放n階行列式的二維數(shù)組,valOfDet存放行列式的值 Dim g, i, J, N, B(), k, H, A1() 'N為行列式的階數(shù) N = UBound(A) ReDim A1(N, N) For i = 1 To N For J = 1 To N A1(i, J) = A(i, J) Next Next '對(duì)行列式的對(duì)角線下三角的每一行化零 For g = N To 2 Step -1 '求出第g行中有多少個(gè)不為

8、零的數(shù)據(jù),并把它存放在B()數(shù)組里 For i = 1 To g - 1 If A1(g, i) <> 0 Then ReDim Preserve B(k + 1) B(k + 1) = i '記錄數(shù)據(jù)不為零的列數(shù) k = k + 1 End If Next '將每個(gè)不為零的數(shù)據(jù)化為零 If k <> 0 Then For i = 1 To UBound(B) '對(duì)每行中最后一個(gè)不為零的數(shù)據(jù)進(jìn)行化零 If i = UBound(B) Then '對(duì)該行中數(shù)據(jù)不為零的最后一列進(jìn)行化零處理 '如果該行所對(duì)應(yīng)的對(duì)角線上的數(shù)據(jù)為零,則進(jìn)行

9、數(shù)據(jù)對(duì)換 If A1(g, g) = 0 Then For J = 1 To g C = A1(J, B(i) A1(J, B(i) = A1(J, g) A1(J, g) = C NextH = H + 1 '記錄交換的次數(shù) Else '若對(duì)角線上的數(shù)據(jù)不為零,則將該行中數(shù)據(jù)不為零的最后一列化為零 For J = 1 To g A1(J, B(i) = A1(J, B(i) - A1(g, B(i) / A1(g, g) * A1(J, g) Next End If Else '對(duì)該行中數(shù)據(jù)不為零的非最后一列數(shù)據(jù)進(jìn)行化零處理 For J = 1 To g A1(J, B(i) = A1(J, B(i) - A1(g, B(i) / A1(g, B(i + 1) * A1(J, B(i + 1) Next End If Next End If Erase B: k = 0 Next valOfDet = 1# '通過求行列式對(duì)角線上各數(shù)據(jù)的積,計(jì)算行列式的值 For i = 1 To N If A1(i, i) = 0 Then valOfDe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論