Solve a set of simultaneous linear equations including determinant calculation by Gauss-Jordan Elimination with maximization of pivot elements. (線上執行) (原始碼下載)
這裡提供的程式基本上是和以前那個程式一樣的功能,都是解決線性聯立方程式系統的問題,但是這個程式多計算一項額外的數據 Determinant,如此可讓我們知道這個系統是否有唯一解,以及判斷這個系統是否可能為 ill-conditioned。以下僅列出副程式供參考,至於範例可以直接套用以前的即可,在此就不再覆述了,但是要記得必須多傳入一個參數 determinant,以免發生run time error。
Public Sub GJEMPD(m() As Single, Determinant As Single, ReturnValue() As Single) Dim i As Long, j As Long, k As Long, n As Long Dim r As Long, c() As Long, row As Long, col As Long Dim Pivot As Single, temp() As Single, order As Long Determinant = 1 row = UBound(m, 1): col = UBound(m, 2) If col <> row + 1 Then MsgBox "矩陣輸入有誤": Exit Sub ReDim c(1 To row), ReturnValue(1 To row), temp(1 To col) For i = 1 To row Pivot = 0 For j = i To row For k = i To row If Abs(m(k, j)) > Pivot Then Pivot = Abs(m(k, j)) r = k: c(i) = j End If Next k Next j If Pivot = 0 Then Determinant = 0: Exit Sub If r <> i Then order = order + 1 For j = 1 To col temp(j) = m(i, j) m(i, j) = m(r, j) m(r, j) = temp(j) Next j End If If c(i) <> i Then order = order + 1 For j = 1 To row temp(j) = m(j, i) m(j, i) = m(j, c(i)) m(j, c(i)) = temp(j) Next j End If Pivot = m(i, i) Determinant = Determinant * Pivot If Pivot <> 1 Then For k = 1 To col m(i, k) = m(i, k) / Pivot Next End If For j = 1 To row Pivot = m(j, i) If i <> j And Pivot <> 0 Then For k = 1 To col m(j, k) = m(j, k) - m(i, k) * Pivot Next End If Next Next i For i = 1 To row ReturnValue(i) = m(i, col) Next For i = row To 1 Step -1 If c(i) <> i Then temp(1) = ReturnValue(c(i)) ReturnValue(c(i)) = ReturnValue(i) ReturnValue(i) = temp(1) End If Next i Determinant = Determinant * (-1) ^ order End Sub
[ 上一個 |
首頁 | 數值分析 | 下一個 ] This page was written by Jaric on May. 8, 1999. All rights reserved.
Total pageview since 4/6/1999.