虛反矩陣指令pinv之應用

2021-10-06 03:14:03 字數 1392 閱讀 3324

pinv指令

在多數解的例子中,有時並不是僅要將其中一變數設定為零之解。為使整個系統得到最佳化,亦可利用pinv指令求得最小模組之合理解。pinv(a)又稱為虛反矩陣(pseudoinverse),其功能與反矩陣之計算相同,但它會基於svd(a)函式(或稱奇異值分解函式)之計算方式,求得乙個不是屬於全階之矩陣a之反矩陣。這是長方形矩陣求解時,在多重解中求其反矩陣之折衷方式。故若矩陣a為方矩陣或非零矩陣,則其結果應與inv(a)相同。只是在這樣的狀況,寧可使用inv(a)較為省事。處理這些長方矩陣或特異矩陣時,使用pinv(a)會有意想不到的效果。其解法是根據反矩陣法:

a=[3 2 1; 10 -25 5];

c=[5000 2000]';

>> t=inv(a)*c

error using inv

inv matrix must be square.

>> t=pinv(a)*c

t =1.0e+03 *

1.2039

0.4852

0.4180

上面之例因為a不是方形矩陣,故求其反矩陣時會有錯誤的資訊,但若用虛反矩陣指令pinv,反而相安無事,這是將t1、t2以其餘一變數t3表示之情況下,求得其最小平方之組合。其結果是否合用則端視問題之限制與應用而定。 pinv(a,tol) 之指令後面另有引數tol,可以輸入容許值。其預設值為max(size(a)) * norm(a) * eps(class(a)),讀者可參考手冊之說明,以了解其使用方法。

inv與pinv的區別

對於非奇異且不接近奇異的方陣兩個命令輸出結果相同,但是對於接近奇異的矩陣使用兩個命令結果卻不同,

1.對於方陣a,如果為非奇異方陣,則存在逆矩陣inv(a)

2.對於奇異矩陣或者非方陣,並不存在逆矩陣,但可以使用pinv(a)求其偽逆

matlab中的『\ 』和『/』和pinv的關係以及運算

當a是n階方陣b為n行的列向量時,x=a\b就是線性方程組a*x=b的解,演算法是用高斯消去法。a\eye(size(a))產生的是方陣a的逆矩陣。

如果a是m*n的矩陣且m≠n,b是跟a行數(m行)相同的列向量時,x=a\b是非滿秩的線性方程組a*x=b的解系,a的秩k由qr分解得出。如果k總而言之,a\b就是求a*x=b的解,你可以看作是a的逆矩陣,只不過是廣義逆矩陣,這樣a不是方陣也可以計算的。

至於a/b,在解線性方程組上比\少用一些,因為通常都把b寫成列向量,所以用反除\就可以了。用/的話,b通常是行向量。

可以把b/a看作是x*a=b的解,這裡b的列數等於a的列數。

a\b=pinv(a)*b 

a/b=a*pinv(b)

可見,'\'用的是高斯消元法。

Shell指令中的單引號,雙引號,反引號,反斜槓

1.string 單引號 被單引號括住的內容將被視為單一的字串,在引號內的 符號沒有作用,也就是說 被當做普通字元處理。例如 root localhost root echo home home 2.string 雙引號 被雙引號括住的內容將被視為單一的字串,他防止萬用字元擴充套件,但允許變數擴充套...

將任意矩陣歸一化到任意區間,和反歸一化

歸一化到任意區間,並反歸一化,這個很常用。寫了個簡單的函式,留著平時備用。matlab code normalization function normalized normalize a,minout,maxout input a the matrix to be normalize minout...