PROBLEM #2 吳子青
Matlab之工程應用 PROBLEM #2
data : 9/30/2006
student : 吳子青 R95622024
----------------------------------------------------------------------------
** Question 1 **
題旨: 將受試者的體溫矩陣B以攝氏38C為判斷依據
做出一體溫是否過高的邏輯矩陣
分析與程式流程:
Step1: 先將以華式為單位的B轉換為以攝氏為單位的A
轉換公式為
Step2: 要將矩陣A以攝氏38度為邏輯判斷準則,大於38為1
小於則為0, 在這裡使用的方法為先將A的每個元素減38
為矩陣C
Step3: 利用矩陣的max, sign運算將A38裡小於0的值化為0
大於0的值化為1, 而成為所求邏輯矩陣 D
程式內容:
>> % ** Question 1 **
>> clear
>> B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5];
>> A=(B-32)*5/9
A =
36.6667 37.7778 38.8889 40.0000 36.8889 36.7778 36.9444 38.3333 38.8889 37.5000
>> A38=A-38
A38 =
-1.3333 -0.2222 0.8889 2.0000 -1.1111 -1.2222 -1.0556 0.3333 0.8889 -0.5000
>> D=sign(max(A38,0))
D =
0 0 1 1 0 0 0 1 1 0
執行結果:
執行結果結合在程式內容中, 如上A矩陣代表以攝氏為單位的體溫受測結果, D矩陣則為判斷結果, 0代表受測者體溫為正常體溫, 1代表體溫高於38度包括有受試者第3,4,8,9號
討論:
有很多作法可以得出相同的結論, 而且matlab直接對矩陣作運算可以免去很多作迴圈的麻煩
----------------------------------------------------------------------------
** Question 2 **
題旨: 在這裡為兩個矩陣的運作,包括(a) D= (A>B) 若A矩陣的元素i大於B矩陣的元素i,則A>B成立 D的元素i為1,反之為零。D矩陣為以1和0組成的邏輯矩陣。 (b) D= (A>5) 也是相同的當A的元素大於5,則為1。(c)D=A+B為矩陣基本加法
分析與程式流程:
Step1: 宣告 A=[ -10 8 6 4 -5 20]與 B=[2 8 5 10 -6 3]
Step2: 直接輸入 D= (A>B) 則矩陣D為是否符合A>B的邏輯矩陣 為(a)所求
Step3: 直接輸入D= (A>5) 則矩陣D為是否符合A>5的邏輯矩陣 為(b)所求
Step4: D=A+B 矩陣運算可直接以矩陣運算而不需利用迴圈
程式內容:
>> % ** Question 2 **
>> clear
>> A=[ -10 8 6 4 -5 20];
>> B=[2 8 5 10 -6 3];
>> D=(A>B)
D =
0 0 1 0 1 1
>> D= (A>5)
D =
0 1 1 0 0 1
>> D=A+B
D =
-8 16 11 14 -11 23
執行結果:
D=(A>B) 的結果 [0 0 1 0 1 1] 表示 在i =3 、5 、6時 Ai > Bi 相同的
在D=(A>5) D= [0 1 1 0 0 1] 表示在i= 2、3、6時 Ai>5 而最後 A+B=D=
[-8 16 11 14 -11 23]
討論:
在這裡也是直接對矩陣作運算,而不需要對矩陣內的元素用迴圈處理,無論是邏輯判斷與基本運算,這是matlab的優勢。
----------------------------------------------------------------------------
** Question 3 **
題旨: 矩陣的基本運算,包括下面五小題
a) A= 3x +y (b) B=5y/x (c) C=4x2y (d) D=sin(x)cos(y) (e)E= 5x sin(2y)
分析與程式流程:
Step1: 首先設定矩陣x=[10 20 30]、y=[1 4 6],之後的計算直接引用即可
Step2: 在矩陣運算裡注意的包括純量和矩陣的相乘用 * ,矩陣和矩陣的相乘
需注意矩陣的格式,和包括sin裡面角度單位
程式內容:
>> % ** Question3 **
>> clear
>> x=[10 20 30] ;
>> y=[1 4 6];
>>
>> A=3*x+y
A =
31 64 96
>> B=5*y/x
B =
0.9643
>> C=4*x'*2*y
C =
80 320 480
160 640 960
240 960 1440
>> D=sind(x)'*cosd(y)
D =
0.1736 0.1732 0.1727
0.3420 0.3412 0.3401
0.4999 0.4988 0.4973
>> E=5*x'* sind(2*y)
E =
1.7450 6.9587 10.3956
3.4899 13.9173 20.7912
5.2349 20.8760 31.1868
執行結果:
如上程式中矩陣A B C D E 分別是五小題(a) (b) (c) (d) (e)的答案
討論:
在矩陣的運算裡,純量乘矩陣為對矩陣裡每個元素作處理,而且用 * 代表相乘而因為x,y 都是1x3矩陣,所以作矩陣相乘時先將x 取為轉置矩陣x’ 在進行矩陣乘法,而關於sind() 是直接對 度 作運算 就不用在特別轉換單位,而且函數處理的對象是矩陣也同等於對裡面的每項元素作處理。
----------------------------------------------------------------------------
** Question 4 **
題旨: 練習對矩陣R=[ 10 30 200 400] 用sum 或prod指令對矩陣內的元素直接作運算,並且練習用M-file的方式撰寫
分析與程式流程:
Step1: 開啟一個新的M-file
Step2: 宣告 R=[ 10 30 200 400] (ohms)
Step3: (a) series form R1,總電阻R1為每一個電阻相加,可利用sum
Step4: (b) parallel form R2,總電阻R2為每一個電阻相乘/電阻總和,可利用
Sum , prod
Step5: 儲存位置並執行
程式內容:
>> % ** Question4 **
clear
R=[ 10 30 200 400];
R1=sum(R)
R2=prod(R)/sum(R)
執行結果:
R1=sum(R)=640 (ohms) 為series form 的總電阻
R2=prod(R)/sum(R) =37500 (ohms) 為parallel form的總電阻
討論:
寫成M-files 為較方便的作法,尤其是在程式處理的問題很複雜的時候,M-files也可以當成 subroutine 或子程式使用,在這裡利用sum或prod可以直接對矩陣內的元素作運算,也是一種方便的用法
----------------------------------------------------------------------------
** Question 5 **
題旨: 矩陣A是一個1x24的列矩陣,將矩陣A利用reshape指令分別變化成
矩陣B ( 3x8 ) 、矩陣C ( 6x4 )與矩陣D ( 2x12 )
分析與程式流程:
Step1: 宣告矩陣A=1:24 為一從1遞增到24的1x24矩陣
Step2: 利用reshape(A, x, y)將矩陣A變化成 有x列 有y行的 x*y 矩陣
程式內容:
>> % ** Question 5 **
>> clear
>> A=1:24;
>>
>> B=reshape(A,3,8)
B =
1 4 7 10 13 16 19 22
2 5 8 11 14 17 20 23
3 6 9 12 15 18 21 24
>> C=reshape(A,6,4)
C =
1 7 13 19
2 8 14 20
3 9 15 21
4 10 16 22
5 11 17 23
6 12 18 24
>> D=reshape(A,2,12)
D =
1 3 5 7 9 11 13 15 17 19 21 23
2 4 6 8 10 12 14 16 18 20 22 24
執行結果:
如程式所示,矩陣B為由矩陣A重新組成的 3x8 矩陣,矩陣C為由矩陣A
重新組成的6x4矩陣,而矩陣D為2x12矩陣
討論:
利用reshape指令可以有效的對矩陣作變形的動作,但限制在於總元素數目
必須固定,而且排序的順序依照矩陣的排列順序以同一行開始排,之後在排
列到下一行,所以按提議可能需搭配轉置矩陣等
沒有留言:
張貼留言