码迷,mamicode.com
首页 > 其他好文 > 详细

行列式(三):n阶行列式

时间:2015-04-30 15:51:17      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

  1.数学定义

    n阶行列式定义如下:

技术分享

 


  2.算法实现

  函数名: GetValue()

  功能:返回一个行列式的值

    Private Function GetValue()
        Dim gValue As Double
        Dim tempResultList As New List(Of Array)
        Dim tempNumArray(RankLength - 1) As Integer ‘要进行全排列的序列
        For i = 0 To RankLength - 1
            tempNumArray(i) = i
        Next
        GetFullPerm(tempNumArray, 0, tempResultList)
        Dim temp As Double
        Dim tempData() As Integer
        For i = 0 To tempResultList.Count - 1
            temp = 1
            tempData = tempResultList(i)
            For j = 0 To RankLength - 1
                temp = temp * TableData(j, tempData(j))
            Next
            temp = Math.Pow(-1, GetInverseNum(tempData)) * temp
            gValue += temp
        Next
        Return gValue
    End Function

3.完整的行列式类(determinant)

  使用示例:

Dim d As New Determinant(3)
d.Item(1, 1) = 1
d.Item(2, 2) = 2
d.Item(3, 3) = 4
Console.write(d.value)

技术分享
Public Class Determinant
    Private TableData(,) As Double
    Private RankLength As Integer
    ‘行列式的阶
    Public ReadOnly Property Rank()
        Get
            Return RankLength
        End Get
    End Property
    ‘行列式第iRow行第iCol列的元素
        Public Property Item(ByVal iRow As Integer, ByVal iCol As Integer)
            Get
                Return TableData(iRow - 1, iCol - 1)
            End Get
            Set(ByVal value)
                TableData(iRow - 1, iCol - 1) = value
            End Set
        End Property
    Public ReadOnly Property value()
        Get
            Return GetValue()
        End Get
    End Property
    Public Sub New(ByVal nRank As Integer)
        Dim tempArray(nRank - 1, nRank - 1) As Double
        TableData = tempArray
        RankLength = nRank
    End Sub
    ‘求行列式的值
    Private Function GetValue()
        Dim gValue As Double
        Dim tempResultList As New List(Of Array)
        Dim tempNumArray(RankLength - 1) As Integer ‘要进行全排列的序列
        For i = 0 To RankLength - 1
            tempNumArray(i) = i
        Next
        GetFullPerm(tempNumArray, 0, tempResultList)
        Dim temp As Double
        Dim tempData() As Integer
        For i = 0 To tempResultList.Count - 1
            temp = 1
            tempData = tempResultList(i)
            For j = 0 To RankLength - 1
                temp = temp * TableData(j, tempData(j))
            Next
            temp = Math.Pow(-1, GetInverseNum(tempData)) * temp
            gValue += temp
        Next
        Return gValue
    End Function
    ‘全排列
    Private Sub GetFullPerm(ByVal NumArray() As Integer, ByVal LeftIndex As Integer, ByRef Result As List(Of Array))
        Dim temp As Integer
        If LeftIndex = NumArray.Length - 1 Then
            Dim tempArray(NumArray.Length - 1) As Integer
            NumArray.CopyTo(tempArray, 0)
            Result.Add(tempArray)
        Else
            temp = NumArray(LeftIndex)
            For i = LeftIndex To NumArray.Length - 1
                NumArray(LeftIndex) = NumArray(i)
                NumArray(i) = temp ‘对换
                GetFullPerm(NumArray, LeftIndex + 1, Result)
                NumArray(i) = NumArray(LeftIndex)
                NumArray(LeftIndex) = temp ‘还原对换
            Next
        End If
    End Sub
    ‘逆序数
    Private Function GetInverseNum(ByVal NumArray() As Integer)
        Dim Num As Integer = 0
        For i = 0 To NumArray.Length - 1
            For j = i To NumArray.Length - 1
                If NumArray(i) > NumArray(j) Then Num += 1
            Next
        Next
        Return Num
    End Function
End Class
View Code

 

行列式(三):n阶行列式

标签:

原文地址:http://www.cnblogs.com/experdot/p/4468862.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!