矩阵的极分解

矩阵的极分解定理,最常见的版本对任何n×n可逆复矩阵A,可以被唯一分解成正定(自伴)矩阵P与酉矩阵U的积,即A=PU,同时有A是正规矩阵 iff PU=UP. 事实上,这里是P=(AA*)^1/2, U=P^(-1)A. 这个分解与矩阵的奇异值分解密切相关,其中的矩阵P又称为A的极矩阵,矩阵P的特征值被称为A的奇异值。对于实矩阵的情形,也有类似的结论,只要把酉矩阵U换成正交矩阵O就行了。对于一般n×n矩阵,也存在类似版本的分解,只是此时P只能是半正定的,而且不能保证唯一性、这个结论还能推广到更一般的m×n矩阵,有兴趣可以参阅Horn《矩阵分析》的7.3节(后面会给出矩阵的极分解)。
一、右极分解
函数格式:Math_Matrix_RU(F,n,R,U)
F:目标方阵
n:方阵F的阶数
R:分解得到的一个正交矩阵
U:分解得到的一个对称正定矩阵
‘即F=R*U

二、左极分解
函数格式:Math_Matrix_VR(F,n,V,R)
F:目标方阵
n:方阵F的阶数
V:分解得到的一个对称正定矩阵
R:分解得到的一个正交矩阵
‘即F=V*R

原理:任何一个可逆方阵均可以唯一的进行右极分解与左极分解,即F=R*U=V*R,其中U^2=T(F)*F,V^2=F*T(F)【其中T(F)表示F的转置】,则我们可以先通过F求得U或V,然后求R=F*Inv(U)=Inv(V)*F

引用:
Math_Matrix_Sqrt:方阵开方
Math_Matrix_T:求矩阵转置
Math_Matrix_Mul:矩阵乘法
Math_Matrix_Inv2:方阵求逆
Math_Matrix_Inv:方阵求逆

例子:
a =
[ 67.5919611787386 69.8554906388072 38.8768396987006 89.3106376236820
17.0671848194055 1.12767200969517 31.5601159499772 96.9140055109346
40.6681714768839 51.0876563615574 86.9885893943666 77.3506165842296
73.6101518727886 87.9281915202402 23.9508483670423 3.45968334165387 ]
Math_Matrix_RU(a,4,r,u)’进行右极分解得到如下结果
r =
[-0.01806739003090 0.71913865214108 -0.27739456376250 0.63664949766408
0.45823822484909 -0.57214688695250 0.04612554269224 0.67904624212867
-0.09675742692290 0.20970810955629 0.95672796354849 0.17708590026142
0.88326786307616 0.33437989881145 0.07527225185216 -0.31939364294910 ]
u =
[ 67.6841644139219 71.9849022272286 26.4791752992667 38.3171883770002
71.9863924990090 89.6984480926248 36.1676400008128 26.2017432919420
26.4820423188876 36.1668446729677 75.6890493922576 53.9420595009903
38.3140405638833 26.2042694530458 53.9408769958847 135.276124831623 ]

Math_Matrix_VR(a,4,v,r)’进行左极分解得到如下结果
v =
[ 95.0902981485406 53.4500420292151 61.1182769307013 57.4613130458042
53.4438098825046 74.4408296746995 45.9449363126334 -13.1234428571640
61.1187415068155 45.9418557217637 103.699821171875 34.8450484220080
57.4619847804705 -13.1244040926920 34.8441839555448 95.1168377384350 ]
r =
[-0.01835015300540 0.71939575068999 -0.27678823268990 0.63628327754090
0.45799761221593 -0.57191020194030 0.04534571824682 0.67953103744654
-0.09684035444340 0.20977163011655 0.95676617484504 0.17707600892713
0.88364856259618 0.33406264059053 0.07478222238892 -0.31912379017620 ]

源代码:

Public Function Math_Matrix_RU(ByVal F(,) As Double, ByVal n As Integer, ByRef R(,) As Double, ByRef U(,) As Double) As Boolean
        '正定、非奇异方阵F进行右极分解
        'n为F的阶数
        '其中F=R*U
        'U^2=T(F)*F其中T(F)表示F的转置
        Dim FT(0, 0), temp(0, 0) As Double
        Math_Matrix_T(F, n, FT)
        Math_Matrix_Mul(FT, F, n, temp)
        If Math_Matrix_Sqrt(temp, n, U) = -1 Then
            Return False
        End If
        If Math_Matrix_Inv2(U, temp, n) = False Then
            Math_Matrix_Inv(U, temp)
        End If
        Math_Matrix_Mul(F, temp, n, R)
        Return True
    End Function
    Public Function Math_Matrix_VR(ByVal F(,) As Double, ByVal n As Integer, ByRef V(,) As Double, ByRef R(,) As Double) As Boolean
        '正定、非奇异方阵F进行左极分解
        'n为F的阶数
        '其中F=V*R
        'V^2=F*T(F)其中T(F)表示F的转置
        Dim FT(0, 0), temp(0, 0) As Double
        Math_Matrix_T(F, n, FT)
        Math_Matrix_Mul(F, FT, n, temp)
        If Math_Matrix_Sqrt(temp, n, V) = -1 Then
            Return False
        End If
        If Math_Matrix_Inv2(V, temp, n) = False Then
            Math_Matrix_Inv(V, temp)
        End If
        Math_Matrix_Mul(temp, F, n, R)
        Return True
    End Function

矩阵的极分解_第1张图片
矩阵的极分解_第2张图片

矩阵的极分解_第3张图片

你可能感兴趣的:(矩阵论,最优化算法)