【VB.net矩陣函數】方陣求n次方Math

函數格式: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>


分享到:


相關文章: