SVD解线性方程组(非齐次)

    对于任一给定的矩阵A(m * n),都存在这样的分解:

    

    其中, U是一个m * m的酉矩阵,S是一个m * n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值, V是一个n * n的酉矩阵。

求解解线性方程组

    Ax=b

    svd(A) = USV',令X=V'x,B=U'b,则有SX=B,由于S是对角阵,可轻易求出X,又由于V是正交阵,则x=VX,故而方程组得以解出。其中‘V'代表V的转置,A和b已知,值如下:

A=\begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 0.1 & 0.22 &0.31\\ 2 & 4 & 6 \end{bmatrix}     b=\begin{bmatrix} 14\\ 32\\ 1.57\\ 28 \end{bmatrix}

[U,S,V]=svd(A),其中U,S,V以及下面其余的值均是通过Matlab求解的

U=\begin{bmatrix} -0.3082 & 0.3233 & 0.0210 & -0.8944\\ -0.7238 & -0.6900 & -0.0000 & 0.0000\\ -0.0324 & 0.0340 & -0.9989 & -0.0000\\ -0.6165 & 0.6467 & 0.0420 & 0.4472 \end{bmatrix}      S = \begin{bmatrix} 12.0537 & 0 & 0\\ 0 & 1.3647 & 0\\ 0 & 0 & 0.0122 \\ 0 & 0 & 0 \end{bmatrix}  V = \begin{bmatrix} -0.3683 & -0.8354 & 0.4080\\ -0.5566 & -0.1534 & -0.8165\\ -0.7447 & 0.5278 & 0.4084 \end{bmatrix}

B = U'b

B = \begin{bmatrix} -44.7861\\ 0.6022\\ 0.0000\\ 0.0000 \end{bmatrix}

此时令SX=B,X易求出为X[i]=B[i]/S[i,i]

for i = 1: 3
    X(i) = B(i) / S(i, i)
end

  X = \begin{bmatrix} -3.7155\\ 0.4413\\ 0.0003 \end{bmatrix}

  则x=VX

    x = \begin{bmatrix} 1.0000 \\ 2.0000 \\ 3.0000 \end{bmatrix}

最终可以验证,x是Ax=b的解,Ax-b是一个零向量或值很小的向量。

SVD的一些性质

    对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。也就是说:

    

    其中k要比n小很多,V是n*k维,其转置为k*n维。

    还以上例为例,上例中S以是按大到小排列,故此处直接取U的前两列,即U1(4,2),S取左上角,即S1(2,2),取V的前两列,即V1(3,2),否则要按对应关系取

U1= \begin{bmatrix} -0.3082 & 0.3233\\ -0.7238 & -0.6900\\ -0.0324 & 0.0340\\ -0.6165 & 0.6467 \end{bmatrix}    S1 = \begin{bmatrix} 12.0537 & 0 \\ 0 & 1.3647 \end{bmatrix}    V1 = \begin{bmatrix} -0.3683 & -0.8354\\ -0.5566 & -0.1534\\ -0.7447 & 0.5278 \end{bmatrix}

        B1 = U1' * b

B1 = \begin{bmatrix} -44.7861\\ 0.6022 \end{bmatrix}

        此时令S1*X1=B1,由于S1是对角阵,故而X1易求出为X1[i]=B1[i]/S1[i,i]

for i = 1: 2
    X1(i) = B1(i) / S1(i, i)
end

X1 = \begin{bmatrix} -3.7155\\ 0.4413 \end{bmatrix}

     则x = V1 * X1

    x = \begin{bmatrix} 0.9999 \\ 2.0002 \\ 2.9999 \end{bmatrix}

    最终可以验证,x是Ax=b的近似解

 

你可能感兴趣的:(NLP)