【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>


分享到:


相關文章: