65
MATLAB 7 在工程上的應用 MATLAB 7 在工程上的應用 2 數字陣列胞陣列以及結構陣列 1

MATLAB 7MATLAB 7 在工程上的應用eportfolio.lib.ksu.edu.tw/user/T/0/T093000099/repository/計算機... · 包含了m x n 陣列A的尺寸。 sort(A) 函數sort(A)將陣列A中的每一行

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • MATLAB 7 在工程上的應用MATLAB 7 在工程上的應用

    第 2 章數字陣列、胞陣列、以及結構陣列數字陣列 胞陣列 以及結構陣列

    1

  • 圖2.1–1 以直角座標表示向量的位置。

    向量 p 可以用下列三個分量來指定: x y 以及 z 並可以寫成定: x、y 、以及 z,並可以寫成下列形式:p = [x, y, z]。

    然而 MATLAB 可以使用超過三然而,MATLAB 可以使用超過三個以上元素的向量。

    2

  • 要建立列向量,將元素以逗號隔開。例如,要建立列向量,將元素以逗號隔開。例如,

    >>p = [3,7,9]p [ , , ]p =

    3 7 9

    要建立行向量,則使用轉置標記(')。

    >>p = [3,7,9]'p =p

    3799

    3

  • 你也可以使用分號隔開元素來建立一個行向量。例如,

    >>g = [3;7;9]

    g =g =

    3

    7

    99

    你也可以將兩個向量「接起來」成為另一個向量。例如,

    建立列向量 此列向量前面三行的值為r [2 4 20] 然後建立列向量u,此列向量前面三行的值為r = [2,4,20],然後第四、第五、第六行的值為w = [9,6 3],你可以輸入u = [r w]以產生向量u = [2 4 20 9 6 3]。-6,3],你可以輸入u = [r,w]以產生向量u = [2,4,20,9,-6,3]。

    4

  • 冒號運算子(:)可以很容易地建立出固定間隔的大向量。輸入( )

    >>x = [m:q:n]

    此指令建立向量 每個值中間的間隔為 第一個值為 如此指令建立向量 x,每個值中間的間隔為 q。第一個值為m。如果 m-n 是 q 的整數倍,則最後一個值為 n。若不是整數倍,則最後一個值會小於 n。最後一個值會小於 n

    舉例來說,輸入x = [0:2:8],可以建立出向量x = [0,2,4,6,8],如舉例來說 輸入x [0:2:8] 可以建立出向量x [0,2,4,6,8] 如果輸入的是x = [0:2:7],則建立出向量x = [0,2,4,6]。

    要建立一個列向量 內容的值為5到8且間隔為0 1 則需要輸要建立一個列向量z,內容的值為5到8且間隔為0.1,則需要輸入z = [5:0.1:8]。

    如果增量q被省略,則程式會假設成1。因此y = [-3:2],可以建立出向量y = [-3,-2,-1,0,1,2]。

    5

  • linspace指令可以用來建立線性間隔的列向量,但給定的linspace指令可以用來建立線性間隔的列向量,但給定的引數是向量內值的數目而不是增量。語法為

    linspace(x1 x2 n),其中x1以及x2為上界與下界,n是數字linspace(x1,x2,n) 其中x1以及x2為上界與下界 n是數字的點數。例如,linspace(5,8,31)等效於[5:0.1:8]。如果n被省略,則間隔為1。省略 則間隔為

    指令logspace可以建立以對數為間隔的陣列。語法為g plogspace(a,b,n),其中n為10a到10b之間的點數。例如x = logspace(-1,1,4)產生向量x = [0.1000,0.4642,2.1544,10.000]。如果被省略,則點數的預設值為50。

    6

  • 矩陣

    矩陣具有多個列以及行 舉例來說 矩陣矩陣具有多個列以及行。舉例來說,矩陣

    M =2 4 10

    16 3 7 8 4 98 4 9 3 12 15

    具有四列以及三行。

    向量是矩陣的特例,指僅具有一列或者一行的矩陣。

    7

  • 建立矩陣

    最直接建立矩陣的方式就是直接一列一列輸入,並且每一列

    中間的元素以逗號或者空白隔開 而每一列又以分號隔開中間的元素以逗號或者空白隔開,而每一列又以分號隔開。

    例如,我們輸入

    >>A = [2,4,10;16,3,7];

    則可以建立下列矩陣:

    2 4 1016 3 7

    A =16 3 7

    記住,用逗號或者空白分開不同行的元素,而使用分號隔開

    8

    不同列。

  • 由向量建立矩陣

    假設 a = [1,3,5]以及b = [7,9,11] (列向量)。注意下列處理程假設 [ , , ]以及 [ , , ] (列向量) 注意下列處理程序中 [a b] 以及 [a;b]會得到不同的結果:>>c = [a b];c [a b];c =

    1 3 5 7 9 111 3 5 7 9 11>>D = [a;b]D =D

    1 3 57 9 117 9 11

    不見得要使用符號來建立新的陣列。舉例來說,你可以輸入

    >> D = [[1 3 5];[7 9 11]]

    9

    >> D = [[1,3,5];[7,9,11]]更多相關資料請查詢課本第2-7~2-8頁

  • 陣列處理

    冒號運算子可以用來選取個別的元素、列、行、或者陣列的「子陣列 底下是一些範例:或者陣列的「子陣列」。底下是一些範例:

    • v(:)表示所有向量v中的列或行元素。( )

    • v(2:5)表示第二個到第五個元素;也就是v(2),v(3),(4) (5)v(4),v(5)。

    • A(:,3)表示矩陣A中第三行的所有元素。( , )

    • A(:,2 :5)表示A中第二行到第五行的所有元素。

    • A(2 :3,1 :3)表示列的範圍為第二列到第三列,行的範圍為第一行到第三行,這其中所有的元素。

    10

  • 你可以使用陣列索引將陣列中的元素擷取出來成為一個小

    的陣列 例如 我們建立陣列B的陣列。例如,我們建立陣列B

    2 4 10 13B =

    2 4 10 1316 3 7 18 8 4 9 25

    接下來輸入C = B(2:3,1:3),可以得到下列的矩陣:

    8 4 9 253 12 15 17

    接下來輸入C B(2:3,1:3) 可以得到下列的矩陣

    C = 16 3 78 4 9

    11

    更多相關資料請查詢課本第2-8~2-9頁

  • 表2.1–1 其他陣列函數

    [u,v,w] = find(A) 計算出陣列 u 以及v,包含矩陣A中非零的元素的列索引以及行索引,並且陣列w包含這些非零元素的值。陣列w可以省略。

    length(A) 如果A是向量,則此函數可以計算出A中元素的數目,如果A是一個m × n矩陣。

    max(A)如果A是向量且所有的元素皆為實數,則

    (A)函數傳回A中最大數字的元素 如果Amax(A) max(A)函數傳回A中最大數字的元素。如果A為矩陣且包含的元素均為實數,則傳回一個包含每一行中最大元素的列向量。如果任何一個含每一行中最大元素的列向量。如果任何一個元素是複數,則max(A)傳回具有最大量值大小的元素。

    12(接下頁)

  • 表2.1–1 其他陣列函數(承上頁)

    和 ( )類似 但是將最大的值儲存於[x,k] = max(A)

    和max(A)類似,但是將最大的值儲存於列向量x中並且將索引儲存於列 向量k中。

    min(A)及[x,k]= min(A)

    k中

    和max類似,但是傳回最小的值。

    size(A) 函數size(A)傳回列向量[m n],包含了m x n 陣列A的尺寸。

    sort(A) 函數sort(A)將陣列A中的每一行排序 根據由小到大的順序並且傳排序,根據由小到大的順序並且傳回與原本A同樣尺寸的陣列。

    sum(A) 函數sum(A)將陣列A中每一行的元素相加,並且傳回包含所有和的列

    13

    向量。

  • 函數size(A)傳回列向量[m n],包含了陣列A的尺寸。如果A是函數size(A)傳回列向量[m n] 包含了陣列A的尺寸 如果A是向量,則length(A)函數可以計算出元素的數目,如果A是一個m × n矩陣,則算出m或者n中最大的值。m × n矩陣,則算出m或者n中最大的值。

    例如,如果例如,如果

    A =6 2

    –10 –5A 10 53 0

    則 max(A)傳回向量[6,2];min(A)傳回向量[-10, -5]; size(A)會回傳向量 [3, 2];以及length(A)會回傳3。( ) g ( )

    14更多相關資料請查詢課本第2-11~2-12頁

  • 向量的量值大小、長度以及絕對值向量的量值大小、長度以及絕對值

    應記住這些名詞在MATLAB中的精確定義。MATLAB指令length會計算出向量中元素的數目。具有元素x1, x2, …, xn 的向量 x 的量值大小為一個純量,其值為(x12 + x22 + … + xn2),也就是向量的幾何長度。向量 x 的絕對值為一個向量,其元素為向量x中元素的絕對值。

    例如,x = [2,-4,5]長度為 3(由指令l h( )計算) 長度為 3(由指令length(x)計算)

    量值大小為[22 + (–4)2 + 52] = 6.7082(由指令t( * ’)計算)sqrt(x*x’)計算)

    其絕對值為[2,4,5](由指令abs(x)計算)

    15更多相關資料請查詢課本第 2-12~2-13頁

  • 圖2.1–2 工作區瀏覽器。

    16更多相關資料請查詢課本第2-13頁

  • 圖2.1–3 陣列編輯器。

    17更多相關資料請查詢課本第2-14頁

  • 多維陣列

    將兩維的矩陣「層層疊起」,就可以得到三維矩陣。每一「層」我們稱之為「頁」。層」我們稱之為 頁」。

    沿著維度 將陣列A C串cat(n,A,B,C, ...) 沿著維度n將陣列A、B、C串成一列成為一個新的陣列。

    18

    更多相關資料請查詢課本第2-15~2-16頁

  • A1 = [4 5 3; 6 8 9;1 0 2], A2 = [6 0 4; 2 3 7;9 1 5]A1 = [4 5 3; 6 8 9;1 0 2], A2 = [6 0 4; 2 3 7;9 1 5] A=cat(3,A1,A2)A=cat(3,A1,A2) A(:, :, 1) % first pageA(:, :, 1) % first page A(:, :, 2) % second pageA(:, :, 2) % second page( , , ) p g( , , ) p g %%%% A = [8 9;2 5] ;B = [4 7; 6 3];A = [8 9;2 5] ;B = [4 7; 6 3]; A [8 9;2 5] ;B [4 7; 6 3];A [8 9;2 5] ;B [4 7; 6 3]; C = cat(1, A, B)C = cat(1, A, B) C = cat(2 A B)C = cat(2 A B) C = cat(2, A, B)C = cat(2, A, B) C = cat(3, A, B)C = cat(3, A, B)

  • 圖2.3–1 向量乘上純量的幾何圖解說明。

    若 r = [x, y, z],則 v = 2r y=2[x, y, z] = [2x, 2y, 2z]。

    20

  • 將矩陣 A乘以純量 w會得到一個新的矩陣,其元素就是A將矩陣 A乘以純量 w會得到一個新的矩陣,其元素就是A中的每一個元素乘以w。舉例來說:

    2 9 = 6 273 5 –7=

    15 –21

    在MATLAB中乘法進行如下:

    >>A = [2, 9; 5,-7];>>3*Aans =ans =

    6 2715 -21

    21

  • 圖2.3–2 向量的加法。(a)平行四邊行定律。(b)三維空間中兩個向量的加法。

    22

  • 陣列的加法與減法

    舉例來說:

    6 –210 3

    + 9 8–12 14

    = 15 6–2 17

    陣列的減法以類似的方式進行陣列的減法以類似的方式進行。

    式 的陣列加法在 中進行如下式(2.3–1)的陣列加法在 MATLAB中進行如下:>>A = [6,-2;10,3];

    B [9 8 12 14]>>B = [9,8;-12,14]>>A+Bans =

    15 62 17

    23

    -2 17更多相關資料請查詢課本第2-17~2-18頁

  • 將陣列乘以一個純量可以很容易地定義出來並且實行計算。將陣列乘以一個純量可以很容易地定義出來並且實行計算。然而,將兩個陣列相乘就不是那麼直接。

    MATLAB使用兩種定義的乘法:

    1. 陣列乘法。 Array1. 陣列乘法2. 矩陣乘法。 Matrix

    • 對於兩個陣列進行除法與冪次運算時,必須要小心的定義。

    • MATLAB 對於陣列具有兩種型式的算數運算。接下來我們介紹其中一種形式,此形式也稱之為逐元運算。接下來我們會介紹矩陣運算 每一種運算方式都有對應的應用方式介紹矩陣運算。每一種運算方式都有對應的應用方式。

    24

  • 表2.3–1 逐元運算

    符號

    +

    範例

    [6 3]+2=[8 5]

    運算

    純量陣列加法

    形式

    A + b+

    -

    [6,3]+2 [8,5]

    [8,3]-5=[3,-2]

    [6 5]+[4 8] [10 13]

    純量陣列加法

    純量陣列減法

    A + b

    A – b

    +[6,5]+[4,8]=[10,13]

    [6,5]-[4,8]=[2,-3]陣列加法

    陣列減法

    A + B

    A B-

    .*

    [3,5].*[4,8]=[12,40]

    [2,5]./[4,8]=[2/4,5/8]

    陣列減法

    陣列乘法

    A – B

    A.*B

    ./ [2,5].\[4,8]=[2\4,5\8]

    [3,5].^2=[3^2,5^2]陣列右除法 A./B

    .\

    .^

    [3,5]. 2 [3 2,5 2]

    2.^[3,5]=[2^3,2^5]

    [3 5] ^[2 4] [3^2 5^4]

    陣列左除法

    陣列冪次運算

    A.\B

    A.^B

    25

    . [3,5].^[2,4]=[3^2,5^4]陣列冪次運算 A. B

  • Example 2.3Example 2.3--11 向量和相對速度向量和相對速度Example 2.3Example 2.3 1 1 向量和相對速度向量和相對速度 VVRR = V= VTT –– VVCC VVTT = 60i +0j= 60i +0j VVCC = 45cos(55= 45cos(55))ii + 45sin(55 + 45sin(55 )j)j % % 轉換轉換55 deg 55 deg 為徑度量為徑度量((RadRad)) V_T =[ 60, 0];V_T =[ 60, 0]; V_C = [45*V_C = [45*coscos(55(55*pi/180*pi/180), 45sin(55 ), 45sin(55 *pi/180*pi/180)];)]; V_R = V_T V_R = V_T –– V_C V_C 34.1891 34.1891 --36.861836.8618 SR = |V_R| = SR = |V_R| = sqrtsqrt(V_R(1)^2+V_R(2)^2)(V_R(1)^2+V_R(2)^2)

    26More? See page 86.

  • 圖2.3–3

    55 deg

    VR

    55 deg

    V_T=60i

    V_C=45cos(55)i + 45sin(55 )j

    27

  • 陣列或者逐元運算的定義是根據具有相同維度大小的陣列來定陣列或者逐元運算的定義是根據具有相同維度大小的陣列來定義的。 x.*y的乘積的定義如下,其中 x以及y具有n個元素:

    x.*y = [x(1)y(1), x(2)y(2), ... , x(n)y(n)]

    其中 以及 是列向量 舉例來說 如果其中x以及y是列向量。舉例來說,如果

    x = [2 4 – 5] y = [– 7 3 – 8]x [2, 4, 5], y [ 7, 3, 8]

    則z = x.*y可以得到

    z = [2(– 7), 4 (3), –5(–8)] = [–14, 12, 40]

    28

  • 其中x以及y是行向量,則x *y的結果是一個行向量。舉例來說,其中x以及y是行向量,則x. y的結果是一個行向量。舉例來說,z = (x’).*(y’)得到

    2(–7)4(3)

    5( 8)

    –141240

    =z =

    其中x’是一個3 × 1的行向量,因此與 y向量的維度大小不同,

    –5(–8) 40

    yy的維度大小為 1 × 3。

    因此向量 以及 拿來計算 ’ * 以及 * ’會產生錯誤訊息因此向量x以及y拿來計算 x’.*y 以及y.*x’會產生錯誤訊息,因為這樣的運算在 MATLAB中沒有定義。

    29

  • 陣列的運算方式是將陣列中對應位置的元素進行計算。舉陣列的運算方式是將陣列中對應位置的元素進行計算。舉例來說,陣列乘法運算 A.*B 會得到矩陣 C ,且此矩陣舉有和矩陣 A以及 B舉有相同維度大小的矩陣,且其中的元素為 ci j = ai j bi j 。例如,如果

    A = 11 5–9 4

    B = –7 86 2

    則C = A.*B得到

    C = 11(–7) 5(8) = –77 40C–9(6) 4(2) –54 8

    30

    更多相關資料請查詢課本第2-20~2-21頁

  • 內建的 MATLAB函數,例如 sqrt(x) 以及 exp(x) 會將陣列內建的 MATLAB函數,例如 sqrt(x) 以及 exp(x) 會將陣列引數自動運算得到一個與陣列引數 x具有相同維度大小的陣列。

    因此這些函數我們稱為向量化函數。

    例如,下列的對話中,結果y和引數x具有相同的維度大小。

    >>x = [4, 16, 25];>>y = sqrt(x)y =

    2 4 5

    31

  • 然而,當要用這些函數相乘或者相除,或者在指數裡面使然而,當要用這些函數相乘或者相除,或者在指數裡面使

    用,如果引數為陣列,則使用逐元運算。

    例如,要計算z = (ey sin x) cos2x,則要輸入

    z = exp(y) *sin(x) *(cos(x)) ^2z exp(y). sin(x). (cos(x)). 2

    很明顯的 如果 的尺寸和 的尺寸不相同的話 你會得到很明顯的,如果x的尺寸和y的尺寸不相同的話,你會得到錯誤訊息。結果z和x以及y具有相同尺寸。

    32更多相關資料請查詢課本第2-22頁

  • Example 2.3Example 2.3--2 2 向量與位移向量與位移a p e .3a p e .3 向量與位移向量與位移

    %( ) 1 55i 36j 25k%( ) 1 55i 36j 25k 22 20i 59j 15k20i 59j 15k %(a) r1 = 55i +36j+25k%(a) r1 = 55i +36j+25k,, r2 = r2 = --20i +59j+15k20i +59j+15k % dis01 = ??% dis01 = ?? r1 [55 36 25]; r2 [r1 [55 36 25]; r2 [ 20 59 15];20 59 15]; r1 =[55 36 25]; r2 =[r1 =[55 36 25]; r2 =[--20 59 15];20 59 15]; dis01 = sqrt(sum(r1.*r1)) % dis01 = sqrt(sum(r1.*r1)) % 或或 dis01 = sqrt(r1*r1’) dis01 = sqrt(r1*r1’) dis01 =dis01 = dis01 =dis01 = 70.327870.3278 %(b) R = r2%(b) R = r2 –– r1r1

    R %(b) R r2 %(b) R r2 r1r1 R = r2 R = r2 –– r1;r1; dis R = sqrt(R*R’) dis R = sqrt(R*R’)

    r1

    2_ q ( )_ q ( ) r2

    33

  • 陣列除法陣列除法的定義 也叫做逐元除法 和陣列乘法的定義非常類陣列除法的定義,也叫做逐元除法,和陣列乘法的定義非常類似,當然,除了一個陣列除以另一個陣列中的元素這種情形。兩個陣列必須要有相同尺寸。陣列右除法的符號為./。例如,如兩個陣列必須要有相同尺寸 陣列右除法的符號為./ 例如 如果

    x = [8, 12, 15] y = [–2, 6, 5][ ] y [ ]

    接下來z = x./y得到z = [8/(–2), 12/6, 15/5] = [–4, 2, 3][ ( ), , ] [ , , ]

    24 20 –4 5又,如果

    A = 24 20– 9 4

    B = 4 53 2

    接下來 C = A./B得到

    C = 24/(–4) 20/5–9/3 4/2

    = –6 4–3 2

    34更多相關資料請查詢課本第2-23~2-24頁

  • Example 2.3Example 2.3--4 4 運輸路線分析運輸路線分析

    >>d = [560, 440, 490, 530, 370] %km>>d = [560, 440, 490, 530, 370] %kmd [560, 440, 490, 530, 370] %kmd [560, 440, 490, 530, 370] %km >>t = [10.3, 8.2, 9.1, 10.1, 7.5] % hrs>>t = [10.3, 8.2, 9.1, 10.1, 7.5] % hrs >>speed = d./t>>speed = d./t speed d./tspeed d./t speed =speed = 54 3689 53 6585 53 8462 52 4752 49 333354 3689 53 6585 53 8462 52 4752 49 3333 54.3689 53.6585 53.8462 52.4752 49.333354.3689 53.6585 53.8462 52.4752 49.3333

    >>[highest speed route] = max(speed)>>[highest speed route] = max(speed) >>[highest_speed, route] max(speed)>>[highest_speed, route] max(speed) highest_speed =highest_speed = 54 368954 3689 54.368954.3689 route =route = 11

    35

    11

  • 陣列指數運算陣列指數運算

    MATLAB不只讓我們可以計算陣列的次方,也可用來取陣列的純量次方以及陣列的陣列次方。

    要根據逐元進行指數運算 我們使用 ^這個符號要根據逐元進行指數運算,我們使用.^這個符號。

    例如,如果x = [3 5 8],則輸入x ^3可以得到陣列 [33 53例如,如果x = [3, 5, 8],則輸入x. 3可以得到陣列 [3 , 5 , 83] = [27, 125, 512] 。

    36

  • 我們可計算純量的陣列次方。例如,p = [2 4 5],則輸入我們可計算純量的陣列次方。例如,p = [2, 4, 5],則輸入3.^p會得到陣列[32, 34, 35] = [9, 81, 243]。

    記住.^是合起來是一個單一的符號;在3.^p中的這個點並不是跟著數字3後面的小數點 下列的運算 使用上面所定義是跟著數字3後面的小數點。下列的運算,使用上面所定義的p,均為等效的算式可以得到正確的答案:

    3.^p3 0 ^3.0.^p3..^p(3) ^(3).^p3.^[2,4,5]

    37

    更多相關資料請查詢課本第2-25頁

  • 測試問題瞭解程度測試問題瞭解程度

    T2 3-1 T2.3 1 a) 本單元兩陣列 A = [21,27;-18,8];B = [-7,-3;9,4]; A.*BA. B A./B B.^3

    38

  • Example 2 3Example 2 3--55 電流和電阻功率消耗電流和電阻功率消耗Example 2.3Example 2.3--5 5 電流和電阻功率消耗電流和電阻功率消耗

    >>R = [10000 20000 35000 100000 200000];>>R = [10000 20000 35000 100000 200000]; >>R = [10000, 20000, 35000, 100000, 200000];>>R = [10000, 20000, 35000, 100000, 200000]; >>v = [120, 80, 110, 200, 350];>>v = [120, 80, 110, 200, 350]; >>current = v /R>>current = v /R >>current = v./R>>current = v./R current =current = 0 0120 0 0040 0 0031 0 0020 0 00180 0120 0 0040 0 0031 0 0020 0 0018 0.0120 0.0040 0.0031 0.0020 0.00180.0120 0.0040 0.0031 0.0020 0.0018

    >>power v ^2 /R>>power v ^2 /R >>power = v.^2./R>>power = v.^2./R power =power =

    1 4400 0 3200 0 3457 0 4000 0 61251 4400 0 3200 0 3457 0 4000 0 6125 1.4400 0.3200 0.3457 0.4000 0.61251.4400 0.3200 0.3457 0.4000 0.6125

    39

  • Example 2.3Example 2.3--77高度與速度高度與速度pp 高度與速度高度與速度

    % % 資料輸入資料輸入 % % 產生產生 6 x 4 6 x 4 角度陣列角度陣列

    g = 9.8;g = 9.8; v = [10:2:20];th =v = [10:2:20];th =

    theta=[];theta=[]; for k=1:length(v)for k=1:length(v)

    v [10:2:20];th v [10:2:20];th [50:10:80][50:10:80]

    thr = th*(pi/180);thr = th*(pi/180);

    theta = [theta;thr];theta = [theta;thr]; endend thr th (pi/180);thr th (pi/180);

    % % 產生產生6 x 4 6 x 4 速率陣列速率陣列 el [];el [];

    % % 計算計算 6 x 46 x 4高度值陣列高度值陣列 h =h = vel=[];vel=[];

    for k=1:length(th)for k=1:length(th)

    h h (vel.^2.*(sin(theta)).^2)/((vel.^2.*(sin(theta)).^2)/(2*g)2*g)

    vel = [vel,v'];vel = [vel,v']; endend

    2 g)2 g)

    40

  • % % 產生產生 6 x 56 x 5速率與高度速率與高度陣列陣列

    H = [v',h];H = [v',h];

    %% 產生產生7 x 57 x 5陣列表陣列表 % % 產生產生7 x 57 x 5陣列表陣列表

    table = [0,th;H]table = [0,th;H]

    41

  • 矩陣與矩陣乘法

    我們可以將此定義推展到兩個矩陣AB的乘法。A的行數必須要與B的列數相同。列與行的乘法形成行向量,而且這些行向量與B的列數相同。列與行的乘法形成行向量,而且這些行向量最後會形成矩陣。AB積的列數和A相同,且行數和 B 相同。

    6 2 (6)(9) + ( 2)( 5) (6)(8) + ( 2)(12)6 –2 10 34 7

    9 8–5 12

    = (6)(9) + (– 2)(– 5) (6)(8) + (– 2)(12)(10)(9) + (3)(– 5) (10)(8) + (3)(12)(4)(9) + (7)(– 5) (4)(8) + (7)(12)

    64 24 75 1161 116

    =1 116

    42

  • 在MATLAB中使用運算子*來進行矩陣的乘法。下列的MATLAB處理程序顯示出如何進行式(2.4-4)中的矩陣乘法。

    >>A = [6,-2;10,3;4,7];A [6, 2;10,3;4,7];>>B = [9,8;-5,12];>>A*B>>A*Bans =

    64 2475 1161 116

    43

  • 矩陣乘法並不一定具有可交換性;也就是說,一般的情矩陣乘法並不一定具有可交換性;也就是說,一般的情況下AB BA 。一個簡單的例子如下,說明此事實:

    AB = 6 –210 3

    9 8–12 14

    = 78 2054 122

    BA = 9 8–12 14

    6 –210 3

    = 134 668 65

    在矩陣的乘法中將矩陣的順序調換是一個常見且容易犯的錯的錯。

    44更多相關資料請查詢課本第2-34頁

  • 測試問題瞭解程度測試問題瞭解程度

    T2.4-1 T2.4-2 T2.4 1 u = [6,-8,3];

    [5 3 4]

    T2.4 2 A = [7,4;-3,2;5,9]; B = [1,8;7,6]

    w = [5,3,-4] u*w’

    B [1,8;7,6] A*B

    45

  • Example 2.4Example 2.4--11 製造成本分析製造成本分析Example 2.4Example 2.4 1 1 製造成本分析製造成本分析

    >>hourly cost = [10, 12, >>hourly cost = [10, 12, unit cost =unit cost =ou y_cos [ 0, ,ou y_cos [ 0, ,14, 9];14, 9];

    >>hours_1 = [6, 2, 3, 4];>>hours_1 = [6, 2, 3, 4];

    unit_cost =unit_cost = 162 114 149162 114 149 %%_ [ ]_ [ ]

    >>process_cost_1 = >>process_cost_1 = hourly_cost.*hours_1hourly_cost.*hours_1

    %% >>units = [10, 5, 7];>>units = [10, 5, 7]; >>total cost =>>total cost =

    process_cost_1 =process_cost_1 = 60 24 42 3660 24 42 36

    >>total_cost = >>total_cost = units*unit_cost'units*unit_cost'

    total cost =total cost = %%-------------------------------------------- >>hours_2 = [5, 3, 2, 0];>>hours_2 = [5, 3, 2, 0];

    total_cost total_cost 32333233

    >>hours_3 = [4, 1, 5, 3];>>hours_3 = [4, 1, 5, 3]; >>unit cost = >>unit cost =

    46

    __hourly_cost*[hours_1', hourly_cost*[hours_1', hours_2', hours_3']hours_2', hours_3'] More? See pages 100.

  • 測試問題瞭解程度

    T2.4-3

    測試問題瞭解程度

    T2.4 3 A = [6,-2;10,3];B = [9,8;-12,14]

    A*B A*B B*A

    47

  • Example 2 4Example 2 4 22 產品成本分析產品成本分析Example 2.4Example 2.4--2 2 產品成本分析產品成本分析

    U [6 2 1 2 5 4 4 3 2 9 7 3]U [6 2 1 2 5 4 4 3 2 9 7 3] >>U = [6, 2, 1;2, 5, 4;4, 3, 2;9, 7, 3];>>U = [6, 2, 1;2, 5, 4;4, 3, 2;9, 7, 3]; >>P = [10, 12, 13, 15;8, 7, 6, 4;12, 10, 13, 9;6, 4, 11, 5];>>P = [10, 12, 13, 15;8, 7, 6, 4;12, 10, 13, 9;6, 4, 11, 5]; >>Q arterl Costs s m(U'*P)>>Q arterl Costs s m(U'*P) >>Quarterly_Costs = sum(U'*P)>>Quarterly_Costs = sum(U'*P) Quarterly_Costs =Quarterly_Costs = 400 351 509 355400 351 509 355 400 351 509 355400 351 509 355 >>Category_Costs = sum((U'*P)')>>Category_Costs = sum((U'*P)') Category Costs =Category Costs = Category_Costs Category_Costs 760 539 316760 539 316

    48More? See pages 100.

  • 特殊矩陣

    有兩個不具交換性的例外分別為零矩陣,標記為 0,以及單位矩陣 標記為 零矩陣包含的元素全部為零並且和單位矩陣,標記為 I。零矩陣包含的元素全部為零並且和空矩陣 [ ] 不同,空矩陣並不包含任何元素。單位矩陣則是一個方陣,其對角線元素均為一,而其他的元素則等於是一個方陣,其對角線元素均為一,而其他的元素則等於零。例如,一個2 × 2的單位矩陣為

    I = 1 00 1

    這些矩陣具有下列的特性:

    0A = A0 = 0

    49

    IA = AI = A

  • 函數eye(n)以及 eye(size(A)) 可用來建立 n × n 的單位矩陣,函數eye(n)以及 eye(size(A)) 可用來建立 n × n 的單位矩陣並且此單位矩陣具有與矩陣A相同的維度大小。

    有時候我們會想要初始化一個矩陣使其具有均為零的元素。而zeros這個指令建立元素均為零的矩陣。

    輸入zeros(n)建立n × n 的零矩陣,輸入zeros(m,n)建立m × n的零矩陣。的零矩陣

    輸入zeros(size(A))建立出與矩陣A具有相同維度的零矩陣。此種類的矩陣對於我們事先不知道矩陣維度的時候這一類此種類的矩陣對於我們事先不知道矩陣維度的時候這一類的應用是非常有用的。

    指令ones的語法和這些指令是相同的,差別在於產生的陣列的元素均為1。

    50

    的元素均為

    更多相關資料請查詢課本第2-36~2-37頁

  • 多項式的乘法與除法多項式的乘法與除法

    • 函數 conv(a,b)計算由係數陣列a以及b所描述的兩個多項式的乘積 這兩個多項式的次方並不一定要相等 所得到的的乘積。這兩個多項式的次方並不一定要相等。所得到的結果為乘積多項式的係數陣列。

    • 函數[q,r] = deconv(num,den)計算以係數陣列num表示的分子多項式除以用係數陣列den所描述的分母多項式。商式為係數陣列q,而餘式則以係數陣列r表示。

    51

  • 多項式的乘法與除法範例多項式的乘法與除法範例

    >>a = [9,-5,3,7];b [ ]>>b = [6,-1,2];

    >>product = conv(a,b)product =

    54 -39 41 29 -1 1454 39 41 29 1 14>>[quotient, remainder] = deconv(a,b)

    iquotient =1.5 -0.5833

    remainder =0 0 -0 5833 8 1667

    52

    0 0 0.5833 8.1667

    更多相關資料請查詢課本第2-39~2-40頁

  • 多項式的根多項式的根

    計算由係數陣列a所描述的多項式的根。所得到的結果為乘積多項式的根的行向量。

    例如,

    >>r = roots([2, 14, 20])r =

    -22-5

    53更多相關資料請查詢課本第 2-40頁

  • 多項式的係數

    計算多項式的係數,此多項式的根為陣列r中的數值。所得到的結果為列陣列,包含了多項式的係數,順序則是依照降冪排列。

    例如,例如, roots

    >>c = poly([-2, -5])c =

    1 7 10

    54更多相關資料請查詢課本第2-40頁

  • 畫出多項式

    函數 polyval(a,x)計算多項式在自變數x處的函數值,此自變數可以為矩陣或者向量。多項式的係數依照

    降冪排列存於陣列a中,其結果的尺寸和x相同。

    55

  • 畫出多項式的範例畫出多項式的範例

    畫出此多項式 f (x) = 9x3 – 5x2 + 3x + 7,對應的區間為 –2 ≤ x ≤ 5,則需要輸入

    >> [9 5 3 7]>>a = [9,-5,3,7];

    >>x = [-2:0.01:5];[ ];

    >>f = polyval(a,x);

    >>plot(x,f),xlabel(’x’),ylabel(’f(x)’)

    56

    更多相關資料請查詢課本第2-41~2-43頁

  • 測試問題瞭解程度測試問題瞭解程度

    T2.5-1 roots([1,13,52,6]) poly(ans) poly(ans)

    T2 5 2 T2.5-2 p1 = [20,-7,5,10];p2 = [4,12,-3]

    ( 1 2) conv(p1,p2)

    57

  • T2 5 3 %Using the deconv T2.5-3 p1 = [12,5,-2,3];p2 =[3,-

    7 4 ]

    %Using the deconv command, the session is

    p1 = [6,4,0,-5]; p2 = [12,-7,4 ] [q,r] = deconv(p1,p2)

    p [ , , , ]; p [ ,7,3,9]

    [q,r] = deconv(p1,p2);

    T2.5-4 p1 = [6 4 0 5];p2 = [12

    ratio = polyval(q,2)+polyval(r,2)/p

    p1 = [6,4,0,-5];p2 = [12,-7,3,9]

    ratio =

    olyval(p2,2)

    ratio polyval(p1,2)/polyval(p2,2) T2.5-5

    x = [-7:0.01:1]; plot(x,polyval([1,13,52,6],

    x)),xlabel(‘x’),ylabel(‘y’)

    58

  • ENDENDENDEND

    59

  • 函數 敘述

    表2.6–1 胞陣列函數

    函數

    C = cell(n)

    敘述

    建立空矩陣的 n × n 胞陣列 C 。

    C = cell(n,m) 建立空矩陣的 n × m 胞陣列 C 。

    celldisp(C)

    cellplot(C)

    顯示胞陣列C中的內容。

    顯示胞陣列C中的圖形表示。p ( )

    C = num2cell(A) 將數值陣列A轉換成胞陣列 C。

    [X,Y, ...] = deal(A,B, ...)

    匹配輸入與輸出列表。等效於 X = A, Y = B, . . . .

    [X,Y, ...] = deal(A)

    i ll(C)

    匹配輸入與輸出列表。等效於 X = A, Y = A 如果C為胞陣列則回傳1 ,否則回傳 0。

    60

    iscell(C) A, . . . .如果C為胞陣列則回傳1 否則回傳 0

    更多相關資料請查詢課本第2-43~2-48頁

  • 圖2.7–1 安排資料於結構陣列 student之中。

    61

  • 表2.7–1 結構函數

    函數

    fi ld (S)

    敘述

    傳回與結構陣列S有關的欄位names = fieldnames(S) 名稱並且指派到S中,一個字

    串的胞陣列。

    F = getfield(S,’field’)傳回結構陣列S欄位'field’的內容。等效於F = S field。g ( ) 內容 等效於F S.field

    如果'field’是結構陣列S中的

    isfield(S,’field’)欄位名稱,則傳回1,否則傳回0。

    62

  • 表2.7–1 結構函數(承上頁)

    S = rmfield(S,’field’) 將結構陣列S中的欄位'field’移除除。

    將結構陣列 中的欄位' 的S = setfield(S,’field’,V) 將結構陣列S中的欄位'field’的內容設為V中的值。

    將結構陣列S中的欄S = struct(’f1’,’v1’,’f2’,’v2’,...) 將結構陣列S中的欄位'f1’、’f2’、...的內容設為'v1’、’v2’、 中的值。為 v1 、 v2 、...中的值。

    63

    更多相關資料請查詢課本第2-48~2-53頁

  • Homework problemsHomework problems.

    2020、、2626

    64

  • Homework problemsHomework problems.

    3535、、3636、、4444

    65