4.3矩陣之應用
矩陣之相乘雖然屬於元素與元素間之相乘,但其結果可能因解釋或其實際之意義而不同。前文所述之陣列相乘即是一種例子,但其結果是相對應位置的元素相乘。這種逐元乘法在Matlab中相當普遍,而通常矩陣的加法、減法是與逐元之加法、減法是一致的,其應用比較簡單。至於矩陣的乘法(或未來的除法)其代表的意義自有不同。
範例一:向量之點積(Dot product)
以向量為例,通常一個向量可以使用三個垂向座標來表示,而各座標之單位向量(其量為一,但方向維持座標方向)若以i、j、k表示,則任一向量V、U可以表示如下:
V=v1 i + v2 j + v3 k;U=u1 i + u2 j + u3 k
今若要求這兩向量間之內積(dot product),則V。U之結果應為各向量同方向之分量之積之和,亦即:
V。U=v1.u1+v2.u2+v3.u3
這個結果若能以矩陣表示,設V=[ v1 v2 v3];U=[ u1 u2 u3] ,則
V。U=v1.u1+v2.u2+v3.u3= [ v1 v2 v3][ u1 u2 u3]'
在MATLAB有一個點積指令稱為dot(),其指令型式如下:
dot(U,V)
假設:V=[ 25 4 50]; U=[15 20 5],結果:
>>V.U=[25 4 50]*[15 20 5]'
ans =
705
>> [15 20 5]*[25 4 50]' %即使順序掉換,其結果亦相同。
ans =
705
>> [25 4 50]'*[15 20 5] %但是這樣掉換,其結果完全不同。
ans =
375 500 125
60 80 20
750 1000 250
上述的例子中,使用點積指令亦可得到同樣的結果:
>> dot([25 4 50],[15 20 5])
ans =
705
>> dot([25 4 50],[15 20 5]')
ans =
705
因此,若利用點積指令,也可以求得某特定向量之絕對值如下:
>> r=sqrt(dot([25 4 50],[25 4 50]))
r =
56.0446
>> u=[25 4 50]/r
u =
0.4461 0.0714 0.8921
上述u則為該向量之單位向量了。
範例二:叉積指令(Cross)
兩向量間之叉積在於求得兩向量所構成之垂向面積,而其方向則是垂直於該面積之正方向。例如扭矩等於力與力臂之叉積,而其方向則在於共同垂直於此二向量之方向。叉積之指令型式為:
M=cross(R,F)
設有A向量沿x軸,其向量值為A=1i,以向量陣列表示為A=[1 0 0];B為沿y方向,其向量值B=2j,或B=[0 2 0];則結果向量D應為:
D=AxB (注意此處x號為叉積或cross的意思,不要與矩陣之*混淆),則
>> A=[1 0 0];B=[0 2 0];
>> D=cross(A,B)
D =
0 0 2
其結果在z方向,其值為2。
若兩向量均不在特別之座標上,則結果也可能在空間上,例如:
>> m=cross([1 2 3],[5 4 3])
ans =
-6 12 -6
至於要求得m之絕對值,則有下列方法:
>> r2=sqrt(m*m')
r2 =
14.6969
>> r2=sqrt(dot(m,m))
r2 =
14.6969
兩者均可得到相同的答案,則如何求其單位向量,相信應更容易了。
範例三:九九乘法表
例如:製造一個九九乘法表,其方法可以利用上述的用法迅速得到答案:
>> A=[1:9];Table=A'*A
Table =
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
同理,試算出一長L=[2 4 6 8 10]m、寬W=[1 2 3 4 5]m所構成之組合及其對應之重量。設密度為10kg/cm^3 。
>> Weight=[2:2:8]'*[1:5]*10
Weight =
20 40 60 80 100
40 80 120 160 200
60 120 180 240 300
80 160 240 320 400
範例四:生產成本分析
某工廠件生產三件主力產品A、B、C三種。生產過程中,其材料、勞力、設備及運輸等之單位產品成本亦自不同。設每樣產品一年分四季生產,其售價亦四季不同,求其每季之生產成本、單項產品之生產成本、單項產品之銷售及利潤等。其相關資料如下:
單位生產成本,P(NT$)
產品名 | 材料 | 設備 | 人力 | 運輸 |
---|---|---|---|---|
A | 100 | 22 | 65 | 12 |
B | 50 | 15 | 80 | 5 |
C | 200 | 30 | 50 | 20 |
每季生產量,Q單位
產品名 | 第一季 | 第二季 | 第三季 | 第四季 |
---|---|---|---|---|
A | 100 | 200 | 250 | 90 |
B | 250 | 200 | 150 | 100 |
C | 80 | 100 | 120 | 150 |
每季售價格,W(NT$)
產品名 | 第一季 | 第二季 | 第三季 | 第四季 |
---|---|---|---|---|
A | 300 | 250 | 250 | 200 |
B | 400 | 350 | 250 | 150 |
C | 500 | 600 | 650 | 700 |
先將三種資料輸入P、Q、W等三個矩陣,其大小均為(3x4):但Q之四項與P之四項並不屬同性質,故即使矩陣之大小配合,也須注意不能隨意相乘。
>>P=[100 22 65 12;50 15 80 5;200 30 50 20];
>>Q=[100 200 250 90;250 200 150 100;80 100 120 150];
>>W=[300 250 250 200; 400 350 250 150;500 600 650 700];
輸入後之值如下:
>>P %單位成本
P =
100 22 65 12
50 15 80 5
200 30 50 20 Q %每季生產量
>>Q =
100 200 250 90
250 200 150 100
80 100 120 150 W %每季之產品價格
>>W =
300 250 250 200
400 350 250 150
500 600 650 700
為求得每季之生產成本,可用C=P'*Q 計算,其大小之型式為(4x4)=(4x3)(3x4)。結果為4x4,其列為材料、設備、人力及運輸之成本,行向為四季。注意前者P用移置功能,主要將其大小轉為符合矩陣之乘法:
>>C=P'*Q
C =
38500 50000 56500 44000
8350 10400 11350 7980
30500 34000 34250 21350
4050 5400 6150 4580
上式C矩陣為四季之成本,若將材料、設備、人力及運輸成本合計,則各季之成本小計可用sum函數計算:
>>Qcost=sum(C)
Qcost =
81400 99800 108250 77910
Qcost為四季之成本,若需要總成本,則需再用一次sum函數:
>>Total_cost=sum(Qcost)
Total_cost =
367360
其次要計算單項產品之成本時,可利用原來之P矩陣。因為其列為產品名稱,行為分項成于,故若列向相加,應可得各項產品之單位成本,其法可利用sum函數,但其第二參數應輸入2,表示以列向(橫向)相加:
>>Prod_unitcost=sum(P,2)
Prod_unitcost =
199
150
300
同樣,對生產量Q而言,由於其行向屬不同季節,若將其合併,應為一年之總生產量,故仍然應用sum函數,但記得其第二參數為2:
>>Prod_Q=sum(Q,2)
>>Prod_Q =
640
700
450
有了單位總生產成本Prod_unitcost及年生產量Prod_Q,即可直接用元素對應元素乘法,求得其總成本。注意此時之操作元乘號前須加點,即.* 。
>>Prod_cost=Prod_unitcost.*Prod_Q
Prod_cost =
127360
105000
135000
Prod_cost 即為年生產總成本。其次要求得年銷售金額,此時因為Q與W矩陣之行向同為季別,故只要使用元素對元素之乘法即可。其四季之銷售量D=Q.*W:
>>D=Q.*W
D =
30000 50000 62500 18000
100000 70000 37500 15000
40000 60000 78000 105000
目前為求得各項產品之銷售金額,故只要每項產品之四季金額相加即可,此時仍使用sum函數,其第二輸入參數仍設定為2:
>>Prod_sale=sum(D,2)
Prod_sale =
160500
222500
283000
Prod_sale為全年三種產品之銷售金額。扣除上項得到之成本Prod_cost,即為利潤Profit:
>>Profit=Prod_sale-Prod_cost
Profit =
33140
117500
148000
綜合判斷,C產品之獲利較高;B產品次之。讀者可就四季所得之利潤進行分析,其結果應更具參考性。
沒有留言:
張貼留言