11/22/2006

10.3 虛反矩陣指令pinv之應用

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
Matrix must be square.

T=pinv(A)*C

T =
1203.9
485.16
418

上面之例因為A不是方形矩陣,故求其反矩陣時會有錯誤的信息,但若用虛反矩陣指令pinv,反而相安無事,這是將T1、T2以其餘一變數T3表示之情況下,求得其最小平方之組合。其結果是否合用則端視問題之限制與應用而定。 PINV(A,TOL) 之指令後面另有參數TOL,可以輸入容許值。其預設值為MAX(SIZE(A)) * NORM(A) * EPS(class(A)),讀者可參考手冊之說明,以瞭解其使用方法。

rref指令


在處理聯立方程式時,若直接有解,應可利用左除法得到其答案。若為多數解,則需要將其重組並簡化至梯形的表列方式,將某些變數設定為自變數,並將其餘因變數之係數均轉換為1。此時可以利用rref([A C])這個指令達到目的。這個指令執行結果,會產生一個增廣矩陣,其內容為[A C]。以前述之T組變數為例:

 M=rref([A C])

 M =
1 0 0.36842 1357.9
0 1 -0.052632 463.16

最後簡化之梯形聯立方程式為:

 T1+0.3684T3=1357.9
 T2-0.0526325T3=463.16

此時之聯立方程式經過rref這個指令會將結果簡化。

例題:


下面為一農場作業之資料,比較重要的作業可以分為整地、噴藥及收割等三項。下表為甲乙兩工人對個別作業每公頃所需之作業時數。設若此兩工人今年總工作時數分別為100及150小時,試求其今年各人總作業面積為多少。

小時/公頃 整地作業 噴藥作業 收割作業
========== ======== ======== ========
甲工人 3 5 8
乙工人 2 4 3

設x, y ,z分別為整地、噴藥及收割作業之作業面積數,則甲工人一年之工作情形可以下列方程式表示:

甲工人:3x + 5y + 8z=100
乙工人:2x + 4y + 3z =150

顯然這是一個多數解的系統。設

>> A=[3 5 8;2 4 3]
A =
3 5 8
2 4 3
>> b=[100 150]'
b =
100
150

利用增廣矩陣可以縮減成簡易之x y z系統:

>> rref([A b])
ans =
1.0000 0 8.5000 -175.0000
0 1.0000 -3.5000 125.0000

解之,

 x + 8.5z=-175
y-3.5z =125

或 x = 8.5z-175, y=125 +3.5z
在這種情況下,由於變數在均為正值之限制之下,故應可以得到一個範圍解。