1. 程式人生 > >SVD解線性方程組(非齊次)

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,故而方程組得以解出。

    Ax= b

    

    [U,S,V]=svd(A)

    

    

     B = U'b

    

    此時令SX=B,X易求出為X[i]=B[i]/S[i,i]

    


    則x=VX

    

    最終可以驗證,x是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),否則要按對應關係取

    

    B1 = U1' * b

    

     此時令S1*X1=B1,由於S1是對角陣,故而X1易求出為X1[i]=B1[i]/S1[i,i]

    

     則x = V1 * X1

    

    最終可以驗證,x是Ax=b的近似解