函數格式:Math_Matrix_Pow(A,m,n,Ret)
A:目標方陣
m:方陣A的階數
n:方陣A要求的次方數
Ret:方陣A進行n次方後獲得的返回值
附加說明:注意,本代碼沒有采用特徵值法。而是直接採用2個矩陣相乘的方法(但又不是老老實實地去乘n次),因為用程序去求一個方陣的特徵值,可能運算複雜度超過了你直接對矩陣相乘的複雜度,至少在n在1000以內大概是這樣。
源代碼:
<code>Public Function Math_Matrix_Pow(ByVal A(,) As Double, ByVal m As Integer, ByVal n As Integer, ByRef Ret(,) As Double) As Boolean '求m*m方陣的n次方。注意,沒有采用特徵值法。為原始的2個矩陣相乘
m -= 1
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim temp(m, m) As Double
ReDim Ret(m, m)
If n For i = 0 To m
For j = 0 To m
Ret(i, j) = A(i, j)
Next
Next
While n > 1
n -= 1
For i = 0 To m
For j = 0 To m
temp(i, j) = Ret(i, j)
Next
Next
For i = 0 To m
For j = 0 To m
Ret(i, j) = 0
For k = 0 To m
Ret(i, j) += temp(i, k) * A(k, j)
Next
Next
Next
End While
Else
For i = 0 To m
For j = 0 To m
Ret(i, j) = 0
For k = 0 To m
temp(i, j) += A(i, k) * A(k, j)
Next
Next
Next
Math_Matrix_Pow(temp, m + 1, n \\ 2, Ret)
If n Mod 2 = 1 Then
For i = 0 To m
For j = 0 To m
temp(i, j) = Ret(i, j)
Next
Next
For i = 0 To m
For j = 0 To m
Ret(i, j) = 0
For k = 0 To m
Ret(i, j) += temp(i, k) * A(k, j)
Next
Next
Next
End If
End If
Return True
End Function/<code>
閱讀更多 愛碼廝小妖 的文章