函数格式: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>
閱讀更多 愛碼廝小妖 的文章