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)),讀者可參考手冊之說明,以了解其使用方法。
?
對于非奇異且不接近奇異的方陣兩個命令輸出結果相同,但是對于接近奇異的矩陣使用兩個命令結果卻不同,
1.對于方陣A,如果為非奇異方陣,則存在逆矩陣inv(A)
2.對于奇異矩陣或者非方陣,并不存在逆矩陣,但可以使用pinv(A)求其偽逆
?
當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<N通常結果與PINV(A)*B不等(PINV(A)是求A的廣義逆矩陣)。 A\EYE(SIZE(A))得到的是A的廣義逆矩陣。
?
總而言之,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)
可見,'\'用的是高斯消元法。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
