10/07/2006

problem#2林冠宏

第一題
題意:
(A)把B矩陣單位由華氏溫度轉為攝氏溫度
(B)把溫度超過(>38℃)定義為"1",而沒有超過(<38℃)定義為"0"
分析:
(A)先定義矩陣B,把B用公式轉換成攝氏溫度
(B)把換算出來的攝氏溫度,再和38℃比較,再定義超過(>38℃)定義為"1",而沒有超過
(<38℃)定義為"0"
程式流程:
(A)>>B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5]; %Their temperatures
measured
>>C=(B-32)*5/9 %Converse the unit of B into Centigrade

C =

36.6667 37.7778 38.8889 40.0000 36.8889 36.7778 36.9444
38.3333 38.8889 37.5000
(B)>> D=C>38 %design Dto show that "1" for the one who has a fever (>38℃
) and "0" for the normal

D =

0 0 1 1 0 0 0 1 1 0
結果:
(A)C =36.6667 37.7778 38.8889 40.0000 36.8889 36.7778 36.9444
38.3333 38.8889 37.5000
(B)D =0 0 1 1 0 0 0 1 1 0
討論:
若是在每個矩陣中的數字可以定義其所代表的名字,若是其中有人超過,就可以立即知道
其名
第二題
題意:
比較A、B矩陣的相關:(A)D=(A>B)(B)D=(A>5)(C)D=A+B
分析:
比較其矩陣的各項和題意的相互關係
程式流程:
(A)>> A=[-10 8 6 4 -5 20];
>>B=[2 8 5 10 -6 3];
>> D=(A>B) %當A大於B時,定義當A>B為真時,表為"1",為假時表為"0"

D =

0 0 1 0 1 1

(B)>> D=(A>5) %當A大於5時,定義當A>B為真時,表為"1",為假時表為"0

D =

0 1 1 0 0 1

(C)>> D=A+B %把A、B矩陣相加

D =

-8 16 11 14 -11 23
結果:
(A)D =0 0 1 0 1 1
(B) D =0 1 1 0 0 1
(C) D =-8 16 11 14 -11 23
討論:
學會如何使用比大小
第三題
題意:
做矩陣加減乘除法和三角函數運算
分析:
先確定矩陣的大小是否符合加減乘除所須之維度,在做運算\
程式流程:
>> x=[10 20 30];
>>y=[1 4 6];
>> A=3*x+y

A =

31 64 96

>> B=5*y./x

B =

0.5000 1.0000 1.0000

>> C=(4*x).*(2*y)

C =

80 640 1440

>> D=sin(x).*cos(y)

D =

-0.2939 -0.5967 -0.9487 %三角函數以逕度量進行運算

>> E=(5*x).*sin(2*y)

E =

45.4649 98.9358 -80.4859

討論:是矩陣中的單元對應的相加減乘除,而不是矩陣的乘除,所以要注意其"."位子
第四題:
題意:在M-file中做運算,紀錄其工作列,在運算視窗中直接叫出
分析:按File後New後M-file在其中做串聯和並聯電阻的運算,在紀錄在Work裡,在Matlab
中把檔案叫出
程式流程:
1- R=[10 30 200 400];
2- series=sum(R)%串聯電阻
3- parallel=1/(sum(1./R))%並聯電阻
(紀錄在Untitled.m)
>> untitled

series =

640


parallel =

7.1006
討論:在M-file中做運算,若是非常大的運算,是非常好用的方法
第五題:
題意:把一個A矩陣(1-24)變成3*8,6*4,2*12矩陣大小
分析:使用reshape(X,Y,Z)
結果:
>> A=1:24

A =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

Columns 14 through 24

14 15 16 17 18 19 20 21 22 23 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

_________________________________________________________________
MSN 交友和 Match.com 為您線上尋找您週圍的單身貴族!

http://match.tw.msn.com/match/mt.cfm?pg=join&tcid=281200

10/06/2006

PROBLEM #2 唐翊凱R94631038

第一題
題旨:在SARS期間每ㄧ個經過機場出入境的旅客都要量測並紀錄體溫,而現在 有一組華氏溫度量測數據設為B矩陣,B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5] 請寫出程式來解決下面的兩各問題==>a)把華氏溫度轉成攝氏溫度。b)轉換成攝氏溫度後,檢驗每個人的體溫如果高於38度,設定他的值為'1',反之則設為'0'並把結果用矩陣D來表示
分析:首先運用華氏溫標轉成攝氏溫標的公式 C=(F-32)*5/9 ,得到每ㄧ個人的攝氏體溫矩陣C之後,再利用關係運算子來看C矩陣的每ㄧ個元素是否大於38度,結果是真即為1、否即為0。
程式內容: (寫成.m檔的形式)
b=[98 100 102 104 98.4 98.2 98.5 101 102 99.5]
c=(b-32)*5/9
D=(c>38)

程式結果:
c =

Columns 1 through 8

36.6667 37.7778 38.8889 40.0000 36.8889 36.7778 36.9444 38.3333

Columns 9 through 10

38.8889 37.5000


D =

0 0 1 1 0 0 0 1 1 0
討論:
由矩陣D的結果可以得知第3、4、8、9位乘客溫度超過38度C

第二題
題旨: 有A=[ -10 8 6 4 -5 20]、B=[2 8 5 10 -6 3]兩個矩陣,用下列matlab指令來求得D矩陣
(a) D= (A>B) (b) D= (A>5) (c) D=A+B

程式內容及結果: a=[ -10 8 6 4 -5 20]
a =
-10 8 6 4 -5 20
>> b=[2 8 5 10 -6 3]
b =
2 8 5 10 -6 3
>> D=(a>b)
D =
0 0 1 0 1 1 %a小題的結果,當a矩陣中的元素大於b矩陣的元素時輸出1反之為0
>> D=(a>5)
D =
0 1 1 0 0 1 %b小題的結果,當a矩陣中的元素大於數字5時輸出1反之為0
>> D=a+b
D =
-8 16 11 14 -11 23 %c小題的結果,a矩陣中的元素與b矩陣的元素相加


第三題
題旨:練習運用matlab中矩陣的四則運算指令


程式內容及結果:
>> x=[10 20 30]
x =
10 20 30
>> y=[1 4 6],
y =
1 4 6
a小題
>> A=3*x+y
A =
31 64 96
b小題
>> B=5*y./x
B =
0.5000 1.0000 1.0000
c小題
>> C=4*(2*y)
C =
8 32 48
d小題
>> D=sind(x).*cosd(y)
D =
0.1736 0.3412 0.4973

e小題
>> E=(5*x).*sind(2*y)
E =
1.7450 13.9173 31.1868


討論:
在d、e小題,學生於原本程式中相乘的部份沒有加上dot,所以程式會給了一個這樣的結果??? Error using ==> mtimesInner matrix dimensions must agree.學生才想起來上課老師教過矩陣之間元素要各自運算的話要在乘除符號之前加上一個dot符號,於是加上一個dot符號結果就正確了!

第四題
題旨:有一組電阻紀錄成array的形式,寫ㄧ個M-file程式來求這一組電阻的串聯電阻值&並聯電阻值

分析:因為要把array當中每ㄧ個元素的值各自提出,才能做電阻串並聯的運算,所以要利用到老師上課教到的矩陣次標功能


程式內容:
R=[ 10 30 200 400]
series=R(1,1)+R(1,2)+R(1,3)+R(1,4)%4個電阻串聯
parallel=1/((1/R(1,1))+(1/R(1,2))+(1/R(1,3))+(1/R(1,4)))%4個電阻並聯


程式結果:
R =

10 30 200 400


series =

640


parallel =

7.1006

第五題
題旨: A為一個1到24的24個元素矩陣,今天把它重新編排成不同行列數的矩陣==>B in size 3x8; C in size 6x4; D in size 2x12.


分析: 此題要利用到老師講義中矩陣重組reshape這一個指令,就可以改變原先矩陣的形式
程式內容及結果:


>> A=1:24
A =
Columns 1 through 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Columns 15 through 24
15 16 17 18 19 20 21 22 23 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


討論:我們想要的列、行數只要填在reshape指令括號中的第2、3位置,矩陣就會轉換成我們想要的大小

Problem #02 林翊展

第一題:
題旨:將量測的華式溫度轉換成攝氏後,找出體溫大於38的人,以矩陣D表示.當大於38顯示為1,小於則為0.
分析:將B矩陣中所有的元素進行轉換後,與38比較大小顯示於矩陣D.再利用尋找非零元素的方法,顯示其位置而容易尋找.
程式流程與分析:

>> clear
>> B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5];
>> C=(B-32).*5/9; %華式溫標轉換成攝氏溫標的轉換公式
>> D=C>38

D =

0 0 1 1 0 0 0 1 1 0

>> [E]=find(D) %尋找非零元素並顯示其位址

E =

3 4 8 9

討論:雖然題目的要求只有顯示D矩陣,但是如果當被測者數量眾多(資料量龐大),海關人員難以尋找到底是哪一位的體溫超過38度,所以後面加了一個command,使得最後顯示為超過38度的人的序號,如果是二維矩陣則為位址.


第二題:
題旨:矩陣A與B,利用MATLAB程式進行比較,將結果顯示於D.
分析:當進行矩陣的運算時,要先注意其維數是否符合進行運算的條件.如果為矩陣與常數運算,則無此顧慮,但運算元前面要加"."
程式流程與分析:

>> 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 %比大小時,當符合則顯示1,不符合則顯示0

>> D=A+B

D =

-8 16 11 14 -11 23

討論:此題的兩個矩陣維數相同,所以能輕易進行運算.


第三題:
題旨:兩個矩陣x與y,進行加減乘除運算
分析:跟第二題一樣,矩陣進行運算須注意其維度,因為此為兩個列矩陣,無法進行矩陣乘除,只能讓相同位址的元素進行運算,此時運算元間要加".",常數則不用,而三角則直接進行元素的運算.

程式流程與分析:

>> clear
>> x=[10 20 30];y=[1 4 6];
>> A=3*x+y

A =

31 64 96

>> B=5*y./x

B =

0.5000 1.0000 1.0000

>> C=4*x.*(2*y)

C =

80 640 1440

>> D=sin(x).*cos(y)


D =

-0.2939 -0.5967 -0.9487 %三角函數以逕度量進行運算

>> E=5*x.*sin(2*y)

E =

45.4649 98.9358 -80.4859

討論:當沒有加上"."號時,程式會告知無法計算.三角函數則以逕度量進行運算,如果要以角度進行運算,指令為sind與cosd.


第四題:
題旨:建立M-file,先在檔案中將程式打好,然後在matlab主程式中呼叫即可.
分析:建立M-file的路徑"file->new->M-file",程式打好後存檔,在matlab主程式中,直接輸入M-file的檔名即可執行.

程式流程與分析:

1.M-file:
R=[10 30 200 400];
series=sum(R) %串聯的總電阻為全部相加
parallel=1/sum(1./R) %並聯的總電阻為全部的倒數相加的倒數

(檔名:resistor)

2.matlab主程式

>> clear
>> resistor

series =

640


parallel =

7.1006

討論:M-file可以很方便的用來debug,尤其當程式很大的時候.此程式的另一個方法可以使用函數檔.如果需要常常用到相同的計算式時,可以利用M-file製成函數檔,只須呼叫並將變數帶入即可.


第五題:
題旨:一個1~24的矩陣A,將它變成3x8,6x4,2x12的矩陣.
分析:利用resharp的指令來改變其行列.
程式流程與分析:

>> clear
>> A=1:24

A =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

Columns 14 through 24

14 15 16 17 18 19 20 21 22 23 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

討論:建立一個元素為連續的矩陣時,可用":",可以省去麻煩.使用resharp指令時,要注意行數與列數的相乘是否符合,否則無法resharp.

10/05/2006

Problem #2 林書如

>> % Quesiotn 1
>> % 題旨:將華氏溫度轉換為攝氏溫度,並且定義出溫度大於38度c者為1
>> B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5]; % 所有被測者的華氏體溫
>> c=(B-32)*5/9 % 將華氏溫度換算為攝氏溫度

c =

Columns 1 through 8

36.6667 37.7778 38.8889 40.0000 36.8889 36.7778
36.9444 38.3333

Columns 9 through 10

38.8889 37.5000

>> D=c>38 % 將攝氏溫度大於38度c者定義為1,得一新矩陣D

D =

0 0 1 1 0 0 0 1 1 0

>> % 執行結果: 換算後的攝氏溫度為[36.6667 37.7778 38.8889 40.0000 36.8889 36.7778
>> 36.9444 38.3333 38.8889 37.5000]; 定義體溫大於38度c的matrix D=[0 0 1 1 0 0
>> 0 1 1 0]
>> % 討論: 定義出高體溫者之後,若現實上受測者有編號,則可以利用尋找索引值的方式輕易找出高體溫者為誰

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>> % Quesiotn 2
>> % 題旨:比較矩陣A與矩陣B
>> A=[-10 8 6 4 -5 20];
>> B=[2 8 5 10 -6 3];
>> D=A>B % 矩陣A與矩陣B一對一比較,A>B者定義為1,其餘為0

D =

0 0 1 0 1 1

>> D=A>5 % 矩陣A中數值>5者定義為1,其餘為0

D =

0 1 1 0 0 1

>> D=A+B % 將矩陣A與矩陣B相加

D =

-8 16 11 14 -11 23

>> % 執行結果: (1) D=[0 0 1 0 1 1] (2) D= [0 1 1 0 0 1] (3) D=[-8 16 11 14 -11 23]
>> % 討論:矩陣A與矩陣B排列相同,因此兩者可以直接做比較與計算

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>> % Quesiotn 3
>> % 題旨:進行矩陣x與矩陣y之計算
>> x=[10 20 30];
>> y=[1 4 6];
>> A=3*x+y

A =

31 64 96

>> B=5*y./x

B =

0.5000 1.0000 1.0000

>> C=4*2*y

C =

8 32 48

>> D=sin(x).*cos(y)

D =

-0.2939 -0.5967 -0.9487

>> E=5*x.*sin(2*y)

E =

45.4649 98.9358 -80.4859

>> % 執行結果: A= [31 64 96], B= [0.5000 1.0000 1.0000], C=[8 32 48], D=
>> [-0.2939 -0.5967 -0.9487], E= [45.4649 98.9358 -80.4859]
>> % 討論:重點在於元素對元素的計算符號是在矩陣的計算符號之前加上"."

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
% Quesiotn 3
% 題旨:撰寫一個計算多個電阻分別串聯與並聯後之總電阻的M-file
R=[10 30 200 400];
R1=sum(R) % 串聯後之總電阻R1為四個電阻之總合 R1=r1+r2+r3+r4
R2=1/sum(1./R) % 並聯後之總電阻R2=1/(1/r1+1/r2+1/r3+1/r4)
>> % 在command window下執行M-file

>> % 執行結果: 串聯後之總電阻R1為640歐姆; 並聯後之總電阻R2為7.1006歐姆
>> % 討論:計算R矩陣中各個element的倒數不能單純以1/R指令執行,而需在/之前加上.才可順利算出數值

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>> % Question 5
>> % 將矩陣A(1x24)轉置為B (3x8), C(6x4), D(2x12)三種不同排列方式之矩陣
>> 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、C、D三矩陣
>> %


>> 討論:使用reshape(A,m,n)方式將陣列A的元素由上到下,由左到右的次序重新排列成一個新的m×n的矩陣。使用reshape函數時,重排後矩陣元素的個數必須與原矩陣相同。

Problem#2 詹弘彥

PROBLEM #2

  1. During SARS period, people who passed the airport gate should have their temperatures measured. Suppose that B is the recorded body temperatures in Fahrenheit and B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5]. Please workout a program to do: a) Converse the unit of B into Centigrade b)Decide who got the temperature? Design a matrix D to show that "1" for the one who has a fever (>38C) and "0" for the normal.

題旨:找出哪些人超過38度西,超過只為1,其他為0

分析:Step1. 先要知道華氏和攝氏的單位換算

          Step2. 利用MATLAB的比較關係即可得到10

程式內容:

B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5];

C=(B-32)/9*5;

D=(C>38)

執行結果:

D =   0     0     1     1     0     0     0     1     1     0

討論:

矩陣需要等維才能作相加減,但是在攝氏與華氏轉換公式中亦可使用C=(B-32.)/9*5,單一元素與等值的的的。

===============================================================

  1. There are two matrices A and B, in which A=[ -10 8 6 4 -5 20] and B=[2 8 5 10 -6 3]. Find D using both Matlab commands .(a) D= (A>B) (b) D= (A>5) (c) D=A+B.

題旨:給兩個AB陣列,試去比較與相加。

分析:Step1. 陣列比較時先判別是否等維數

          Step2. 依題意進行AB的比較與相加,比較是將以10表示,相加減時為相對元素直接相加減。

程式內容與結果:

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

討論:

剛開始需判斷是否為相同維數,而在比較時由於為『大於』,所以『等於』與『小於』其獲得直接為0只有大於是才為1。當陣列相加時,由於是相同維數的陣列,故MATLAB將相對的元素進行相加即為所求。

===============================================================

  1. Suppose that x=[10 20 30] and y=[1 4 6], Calculate the following combinations using Matlab commands:(a) A= 3x +y (b) B=5y/x (c) C=4x2y (d) D=sin(x)cos(y) (e)5x sin(2y)

題旨:給兩個xy陣列,進行陣列的加減乘除的基本運算。

分析:Step1. 陣列維數相同時即可直接進行相加減

          Step2. 遇到陣列相乘除時,由於是陣列的關係所以需加註『.』來表示陣列,遇到三角函數表示時,需將整個函數視為一陣列來進行計算。

程式內容與結果:

x=[10 20 30];

y=[1 4 6];

A=3*x+y

A = 31    64    96

B=5*y./x

B = 0.5000    1.0000    1.0000

C=4*x.*(2*y)

C =   80         640        1440

D=sin(x).*cos(y)

D =  -0.2939   -0.5967   -0.9487

E=5*x.*sin(2*y)

E =  45.4649   98.9358  -80.4859

討論:

此題主要是練習陣列的乘除計算,特別需注意的是兩陣列相乘除時,需要加標註『.』來表示陣列,所以MATLAB就以『.*』與『./』為陣列的乘除符號,即可得到所求。

===============================================================

  1. A set of resistors are expressed in an array as R=[ 10 30 200 400]ohms. Write a M-file program to calculate the equivalent resistance if (a) all the resistors are in series (b) all of the resistors are in parallel.

題旨:建立一M檔案,將題目所給的R電阻陣列進行串連與並連的計算。

分析:Step1. 先開啟先的檔案,儲存後即為M檔案

Step2. 利用sum的指令即可進行元素的相加

Step3. 注意串連與並連的表示方式

程式內容:

M-FILE

function ex4(R)

S=sum(R)

P=1/sum(1./R)

 

結果:

ex4([10 30 200 400])

S = 640

P = 7.1006

討論:

本題主要是練習sum指令的運用,值得注意的地方就是R為一陣列,所以在進行相除時需以『./』的方式進行運算,其結果即為所求。

===============================================================

  1. Suppose matrix A=1:24, please reform A into matrices B in size 3x8; C in size 6x4; D in size 2x12.

題旨:A為一從124的陣列形式排列(1x24),試將A陣列變換成其他維數的矩陣表示之。

分析:Step1. A為一陣列,所以需先輸入A值來定義其陣列

 Step2.在變換成其他維度矩陣時,需利用指令reshape,其指令可將矩陣重新編排其行列。

程式內容與結果:

A=1:24

A =

  Columns 1 through 17

     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17

  Columns 18 through 24

    18    19    20    21    22    23    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

 

討論:

此題為練習單一陣列的維數變換,既將一陣列變換成多維矩陣,其指令reshape即能變換成其他維數的矩陣,值得注意的是原A1x24的陣列,若是變換其他形式的矩陣時也需行與列的排數相乘為24,若是不以24表示,其元素將為不足,MATLAB無法表示。

Problem #2 吳堉光

%%%%%%%%%%%%%%
% Question 1 %
%%%%%%%%%%%%%%
%題旨:將體溫矩陣轉換成攝氏並以38C作為判斷體溫是否過高的布林陣列

%分析與程式流程:
%首先將以華式為單位的B轉換為以攝氏為單位的C
%再將矩陣C以攝氏38度為判斷準則,利用">"作為判斷並且存以陣列D
%程式內容
clear all
B=[98 100 102 104 98.4 98.2 98.5 101 102 99.5];
C=(B-32)*5/9;
Q1_D=(C>38)


%%%%%%%%%%%%%%
% Question 2 %
%%%%%%%%%%%%%%
%題旨:矩陣的各個元素的比較以及element之間的運算

%分析與程式流程:
%先定義出兩個變數分別為A和B
%進行矩陣的比較及運算
%程式內容
clear all
A=[ -10 8 6 4 -5 20];
B=[2 8 5 10 -6 3];
Q2_D_a=(A>B)
Q2_D_b=(A>5)
Q2_D_c=(A+B)


%%%%%%%%%%%%%%
% Question 3 %
%%%%%%%%%%%%%%
%題旨:矩陣的基本運算

%分析與程式流程:
%先定義出兩個變數分別為x和y
%進行矩陣的運算
%程式內容
clear all
x=[10 20 30];
y=[1 4 6];
Q3_a=3*x+y
Q3_b=5*y./x
Q3_b_1=5*y/x
Q3_c=4*x*2.*y
Q3_d=sin(x).*cos(y)
Q3_e=5*x.*sin(2*y)

%%%%%%%%%%%%%%
% Question 4 %
%%%%%%%%%%%%%%
%題旨:利用矩陣的方式求出電阻的串聯並聯

%分析與程式流程:
%先定義R的電阻形成的矩陣
%以sum函數求出矩陣內的總和以並聯公式求出並聯電阻
%程式內容
clear all
R=[10 30 200 400];
Q4_R_s=sum(R)
Q4_R_p=1/(sum(1./R))


%%%%%%%%%%%%%%
% Question 5 %
%%%%%%%%%%%%%%
%題旨:矩陣A是一個1x24的列矩陣,將矩陣A利用reshape指令分別變化成
%矩陣B(3x8) 矩陣C(6x4) 矩陣D(2x12)

%分析與程式流程:
%矩陣A=1:24 為一從1遞增到24的1x24矩陣
%利用reshape(A,m,n)將矩陣A以排列磁磚的方式排列成變化成m x n的陣列
%程式內容
clear all
A=linspace(1,24,24);
Q5_B=reshape(A,3,8)
Q5_C=reshape(A,6,4)
Q5_D=reshape(A,2,12)

執行結果:
Q1_D =

0 0 1 1 0 0 0 1 1 0

討論:
直接比較比起利用for迴圈一一比較較為快速,也可以利用find函數來找出其index


Q2_D_a =

0 0 1 0 1 1


Q2_D_b =

0 1 1 0 0 1


Q2_D_c =

-8 16 11 14 -11 23

討論:
直接對於element作比較以及運算

Q3_a =

31 64 96


Q3_b =

0.5000 1.0000 1.0000


Q3_b_1 =

0.9643


Q3_c =

80 640 1440


Q3_d =

-0.2939 -0.5967 -0.9487


Q3_e =

45.4649 98.9358 -80.4859

討論:
對於矩陣的element之間的運算要注意乘除之前的".",然而b小題有無卻出現兩種不同的答案
不過對於陣列運算注意維數外若是要element運算則程式寫法要注意


Q4_R_s =

640


Q4_R_p =

7.1006

討論:
sum函數可以直接求出陣列內每個元素的總和


Q5_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


Q5_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


Q5_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

討論:
定義矩陣的方式可以直接A=(1:24)或是用linspace但是要注意的是要分成多少元素要寫出
reshape可以將陣列排列成想要的維度,但是要注意要和元素總量相同

10/03/2006

problem#02黃聖峰

%------------------------程式碼----------------------------------%
close all;
clc;
%-----------------------第一題 ----------------------------------%
%----------這是個温度換算和找出超過攝氏38度的程式------------------%
F=[98 100 102 104 98.4 98.2 98.5 101 102 99.5]; % Fahrenheit %
question_1_Centigrade=(F-32)*5/9 % Fahrenheit to Centigrade %
question_1_D=(question_1_Centigrade > 38) % 找出大於38度的denote "1"and "0" for the normal %
%-----------------------------------------------------------------%


%-------------------------第二題-----------------------------------%
%-----------------這是個matrices的判斷式----------------------------- %
A=[-10 8 6 4 -5 20];
B=[2 8 5 10 -6 3];
question_2_D_1=(A>B) % 找出A>B %
question_2_D_2=(A>5) % 找出A>5 %
question_2_D_3=(A+B) % A+B %
%------------------------------------------------------------------%


%----------------------------第三題--------------------------------%
%--------------------------這是個矩陣運算的程式------------------------ %
x=[10 20 30];
y=[1 4 6];
question_3_a=3*x+y
question_3_b=5*y./x
uestion_3_b1=5*y/x
question_3_c=4*x*2.*y
question_3_d=sind(x).*cosd(y)
question_3_e=5*x.*sind(2*y)

%在這一題要注意的是點的應用;而B=5y/x這一個題目很特別,因為有"有點b=5*y./x"和"沒點b1=5*y/x"的答案會有差異%
%------------------------------------------------------------------------%


%-----------------------------第四題--------------------------------------%
%----------------------------這是個電阻串並聯的換算------------------------%
R=[10 30 200 400]; %四種電阻%
R1=sum(R) %電阻串聯為全部的電阻值相加%
R2=1/(sum(1./R)) %利用並聯電阻公式1/R = 1/R1 + 1/R2求出並聯時的電阻值%
%------------------------------------------------------------------------%


%-------------------------第五題----------------------------------------%
%-----------------------------這是個矩陣重新排列的程式-------------------%
a=1:24;
question_5_b=reshape(a,3,8) %重新組成的 3x8 矩陣%
question_5_c=reshape(a,6,4) %重新組成的 6x4 矩陣%
question_5_d=reshape(a,2,12) %重新組成的 2x12 矩陣%
%------------------------------------------------------------------------%

執行結果
question_1_Centigrade =
36.6667 37.7778 38.8889 40.0000 36.8889 36.7778 36.9444 38.3333 38.8889 37.5000

question_1_D = 0 0 1 1 0 0 0 1 1 0

question_2_D_1 = 0 0 1 0 1 1
question_2_D_2 = 0 1 1 0 0 1
question_2_D_3 = -8 16 11 14 -11 23

question_3_a = 31 64 96
question_3_b = 0.5000 1.0000 1.0000
question_3_b1 = 0.9643
question_3_c = 80 640 1440
question_3_d = 0.1736 0.3412 0.4973
question_3_e = 1.7450 13.9173 31.1868

question_4_R1 = 640
question_4_R2 = 7.1006


question_5_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

question_5_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

question_5_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

10/02/2006

作業回答原則

目前作業已經歷problem#1及problem#2,大家對解題的方式應有所瞭解,不過由於題目內容有限,僅集中在某些部份,無法涵蓋各種層面。而且,這種繳交方式也有缺點,因為事先繳交的人可以成為其他同學參考的樣本,因而同樣的題目其所得之結果常會千篇一律,沒有創新性,也很難判定成績之高低。為提供繳交作業之趣味性及效率,只好另思作業繳交方法,使作業繳交的過程富變化,而其內容更具可看性及參考性。

今後繳交作業的構想:


一、張貼問題題目來源分兩項,其一為老師固定每週出題,另一為學生自行思考後張貼的題目。原則上每一張貼僅限一題,但其內容可分小項。學生自行張貼部份每週每位同學以張貼一道題目為原則,採用自問自答方式。題目內容應具深度,不得與現有題重覆,且勿超出當週內容前後的範圍太多。學生思考題目由學生自行利用本部落格之特別電郵位址張貼。張貼時,主題之格式如下:"張大牛:如何一個計算樑的彎曲度"。其中張大牛為張貼者姓名,冒號之後為其標題。每題最好能在label中顯示張貼者姓名。

二、學生答題:同學可上網就現有題目作答,沒有回答期限。除自問自答外,學生作答時必須利用comment(回應)的功能回傳,不能使用本部落格之電郵張貼功能。老師出題部份第一位回答者可以全程作答,學生出題部份則採用補充回應的方式。若有參考資料及圖片,可以利用超連結的方式處理。所有題目中,其後之回應內容必須參考前面已回應同學所做的答案,以不重覆為原則,提出新的作法或在其他同學已回答的答案中提出新觀點或補充性看法。每次回應時,應書寫回應者之姓名,以滋識別。

三、每章作業題:每章作業題均有限時,繳交期限為當天午夜前,逾時不計分。請按連線"每週習題請按此==>"之按鈕作答,或直接進入http://exam4matlab.blogspot.com/以迴應方式繳交。若有繪圖則採用連結方式處理。

四、作業成績之計算:至學期末時,成績統一計算。成績算法如下:張貼者最高一題五分,第一位回應者最高五分,其次依序最高遞減0.5分。重覆回應相同問題者,不佔排名,但每次最高酌加0.5分。此外,參與講義部份之回應者,其成績之算法與作業相同。上述作業均在明年一月十二日午夜到期,逾期不收件,請同學注意。

10/01/2006

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指令可以有效的對矩陣作變形的動作,但限制在於總元素數目
必須固定,而且排序的順序依照矩陣的排列順序以同一行開始排,之後在排
列到下一行,所以按提議可能需搭配轉置矩陣等