SVD的應用舉例與矩陣求偽逆

2021-05-25 17:56:29 字數 3547 閱讀 2832

一、偽逆(pseudo-inverse)

由於奇異矩陣或非方陣的矩陣不存在逆矩陣。但有時我們又希望給這樣的矩陣,構造出乙個具有類似逆矩陣性質的結果,於是人們便提出了「偽逆」的構想。這個構想的出發點是基於下面這張圖,乙個變換t(或者乙個矩陣a)的值域v可以分解成相互垂直的兩個部分,即v = n(a) ⊕ n(a)⊥

。乙個變換t是可逆的 if and only if t是one-one and onto。而定理2.4告訴我們t是one-oneif and only if n(a)=。也就是說,如果t是不可逆的,也就代表當我們引入n(a)後會破壞從v到w的一一對應關係。所以很自然的,我們會想到,如果把n(a)從v中剝離,那麼剩下的n(a)⊥

到range(a)就能構成一一對應關係

,也就存在逆變換(或逆矩陣)。

我們建立了乙個可逆的變換t: n(t)⊥

→range(t),令l=t

n(t)⊥

,這樣l就有逆變換了。基於這樣的考量,我們就有了下面這個pseudoinverse的定義。

二、利用svd計算偽逆

我們要求t的偽逆,就要設法求得n(a

)、n(a)⊥

、range(a)和range(a)⊥

。而借由svd,這些子空間都非常容易得到(這裡注意參考

(1)span=n(a)

(2)span=n(a)⊥

(3)range(a) = span

(4)range(a)⊥

=span

注意在svd的運算元版本中,我們給出的分解形式是

再根據上面偽逆的定義可得(k=r):

而上面這個式子又是乙個svd,(a的svd是v*au=∑

)所以有

三、乙個具體的例子

我們來具體算乙個矩陣a的偽逆:

易知,rank(a*a)=2。下面來求矩陣a*a的特徵值,於是有

接下來求對應的特徵向量,因為

所以可知當λ

1=5時,對應的特徵向量(注意結果要正交歸一化):

同理還有當λ

2=1時,對應的特徵向量

如此便得到了svd中需要的u矩陣

為了求出矩陣v,先求w:

於是可知

所以根據公式a的偽逆就是

最終結果的計算可能比較複雜,我們用matlab來計算。

>> u = [1/sqrt(2), 1/sqrt(2);1/sqrt(2), -1/sqrt(2)]

u = 0.7071 0.7071

0.7071 -0.7071

>> s = [1/sqrt(5), 0; 0, 1]

s = 0.4472 0

0 1.0000

>> vs=[sqrt(2)/sqrt(5), 1/sqrt(10), 1/sqrt(10), sqrt(2)/sqrt(5);

0, -1/sqrt(2), 1/sqrt(2),0]

vs =

0.6325 0.3162 0.3162 0.6325

0 -0.7071 0.7071 0

>> a_pinv = u*s*vs

a_pinv =

0.2000 -0.4000 0.6000 0.2000

0.2000 0.6000 -0.4000 0.2000

然後我們再用matlab裡面提供的執行緒的求矩陣偽逆的函式pinv()來檢驗一下上面得出的結果。

>> a = [1,1; 0,1;, 1,0; 1,1]

a = 1 1

0 1

1 0

1 1

>> b = pinv(a)

b = 0.2000 -0.4000 0.6000 0.2000

0.2000 0.6000 -0.4000 0.2000

可見我們的計算是正確的。

四、偽逆與最小二乘法

上述定理說明:

1)基於pseudoinverse

,最小二乘問題與尋找最小解的問題具有統一的形式。

2)當方程ax=b無解,即a不可逆時,最佳近似解就是x=a†

b。(本文完)

s.h. friedberg, a.j. insel, l.e spence, 4th edition, linear algebra, prentice-hall, 2003

richard hartley, andrew zisserman, multiple view geometry in computer vision

2nd edition, cambridge university press, 2003

pinv 求矩陣的偽逆矩陣

pinv 求矩陣的偽逆矩陣 功能簡介 用於求矩陣的偽逆矩陣。語法格式 1 b pinv a 函式返回矩陣a的偽逆矩陣。如果矩陣a是可逆 非奇異 的,那麼pinv a 與inv a 的結果是一樣的,而且pinv比inv效率低。但如果矩陣a是奇異矩陣,則inv a 不存在,但pinv a 仍然存在,並表...

OpenCV求逆(偽逆)矩陣函式

double invert inputarray src,outputarraydst,int flags decomp lu 功能 用以求取乙個矩陣的逆或者偽逆。src 輸入,浮點型 32位或者64位 的m n的矩陣,當引數3的使用方法為decomp cholesky decomp lu deco...

OpenCV求逆(偽逆)矩陣函式

ouble invert inputarray src,outputarraydst,int flags decomp lu 功能 用以求取乙個矩陣的逆或者偽逆。src 輸入,浮點型 32位或者64位 的m n的矩陣,當引數3的使用方法為decomp cholesky decomp lu decom...