Download presentation
Presentation is loading. Please wait.
1
數值分析 (Numerical Analysis)
國立台北科技大學 能源與冷凍空調工程系 施陽正 老師 九十九年九月
2
Review of Matlab 國立台北科技大學冷凍空調工程系
3
簡 介 Matlab 是套應用於科學與工程領域中數值計算、分析與模擬的應用軟體,結合了數值分析、矩陣運算、訊號處理、系統模擬及繪圖等功能,功能強大、操作介面簡易。在大學課程中應用 Matlab 來輔助教學,例如線性代數、控制系統、訊號處理以及微積分。『微積分電腦輔助學習』網站由介紹一般與廣泛的應用方法切入,並以微積分為主要輔助目標。
4
Matlab 全文為 "matrix laboratory",原始發展理念是提供完整的矩陣運算指令,將資料元素當成是矩陣來處理,而主要的用途就是作矩陣式的數學運算。隨著日後增加的數學運算需求而增加了系統模擬、數值分析、訊號處理及圖形等功能,也容許使用者建立、運算其他不同的資料型態,滿足更多樣、更深入的運算需求,使 Matlab 應用範圍更為廣大。
5
基本使用語法 Matlab 中進行基本運算的方式,就是在 Matlab 命令視窗內的提示符號(“>>” 或 “?”)後面輸入運算,然後按 Enter 鍵。
6
例 1: >>(7*3+5.5)/10 ans = 上例中,若不希望 Matlab 在每次運算後都顯示結果,則在運算是後面加上 “;” 即可。 >>(7*3+5.5)/10; 查詢運算結果就在提示符號『>>』後面鍵入 "ans" 即可。 ans =
7
例 2: 另外,使用者也可以將運算結果儲存在自訂的變數中。 >>n = (7*3+5.5)/10 n =
8
例 3: 如果要一次輸入的運算式在一個以上,我們可以用 "," 或 ";" 來隔開。 >>n = (7*3+5.5)/10; p = n ^ 5 p =
9
例 4: 若是運算式太長的話,則可以用三個句號 "..." 隔開延伸到下一行 >>(7*3+5.5)/10*... 50^5
若是運算式太長的話,則可以用三個句號 "..." 隔開延伸到下一行 >>(7*3+5.5)/10*... 50^5 ans =
10
例 5: 在運算式中可以 "%" 符號加入文字,當作運算式的註解,運用在 Matlab 程式撰寫中可提高可讀性。
>>m = (7*3+5.5)/ 10 %將運算結果儲存在變數 m 中 m =
11
例 6: Matlab 中有一些永久常數(Permanent Constants)供使用者直接呼叫。 >>pi
ans =
12
常用到的幾個 Matlab 永久常數: 常數名稱 常數代表意義 i、j 基本需數單位( ) eps 代表電腦無法分析非常小的數 inf
無限大 Nan或NaN 無法定義的數值(Not A Number) pi 圓周率 p = realmax 顯示系統能表示的最大數值 realmin 顯示系統能表示的最小數值
13
一般數學運算 我們可以透過 Matlab 中的內建函示執行一般的數學運算。 例 1:
>> y=sin(50)*exp(-0.9*2^3) y = e-004
14
常用基本函數 sqrt( x ) 求 x 的平方根 real( z ) 求複數 z 的實部 imag( z ) 求複數 z 的虛部
conj( z ) 求複數 z 的共軛複數 round( x ) 求x四捨五入後的最接近整數 fix( x ) 捨去小數求對應於x的整數 floor( x ) 求不大於 x 中所有數的最大整數 ceil( x ) 求不小於 x 中所有數的最小整數 rat( x ) 將實數 x 化為分數表示 rats( x ) 將實數 x 化為多項分數展開
15
sign( x ) 符號函數(Signum function) x<0,sign( x )= x=0,sign( x )=0 當 x >0時,sign( x )=1 rem( x , y ) 求x除以 y 的餘數 gcd( x , y ) 整數 x 和 y 的最大公因數 lcm( x , y ) 整數 x 和 y 的最小公倍數 exp( x ) 自然指數(以 e 為底的指數) pow2( x ) 2的指數 log( x ) 自然對數以( e 為底的對數) log2( x ) 以2為底的對數 log10( x ) 以10為底的對數
16
常用三角函數: 函數名稱 函數功能 sin(x) 正弦函數 cos(x) 餘弦函數 tan(x) 正切函數 asin(x) 反正弦函數
acos(x) 反餘弦函數 atan(x) 反正切函數 atan2(x,y) 四象限的反正切函數 sinh(x) 雙曲正弦函數 cosh(x) 雙曲餘弦函數 tanh(x) 雙曲正切函數 asinh(x) 反雙曲正弦函數 acosh(x) 反雙曲餘弦函數 atanh(x) 反雙曲正切函數
17
繪圖 這裡介紹 Matlab 繪製一維曲線、二維曲面的方法以及儲存、列印的用法。 基本繪圖
plot 是 Matlab 繪製一維圖形的基本函數,透過各座標點的定義,再呼叫使用 plot 就可以完成簡易的一維圖形。
18
國立台北科技大學冷凍空調工程系 施陽正 老師
例一: >> x=linspace(0, 2*pi, 50); >> y=cos(x); >> plot(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
19
國立台北科技大學冷凍空調工程系 施陽正 老師
例二: >> x=linspace(0, 2*pi, 50); >> y=cos(x); >> loglog(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
20
國立台北科技大學冷凍空調工程系 施陽正 老師
例三: x軸以對數為單位 和 y軸則為一般線性為單位 >> x=linspace(0, 2*pi, 50); >> y=cos(x); >> semilogx(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
21
國立台北科技大學冷凍空調工程系 施陽正 老師
例四: x軸 為一般線性為單位y軸則以對數為單位 >> x=linspace(0, 2*pi, 50); >> y=cos(x); >> semilogy(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
22
例五: 使用plot除了如上述繪製方式外,我們可以用plot來繪製多條圖線。 plot繪製多條圖線
>> x=linspace(0, 2*pi, 50); >> plot(x, sin(x), x, cos(x));
23
plot繪製圖行功能中容許使用者改變顏色以及圖形樣式,可以選擇的顏色以及圖形樣式如下表:
字元 代表顏色 圖形樣式符號 代表圖形樣式 y 黃色 . 點 m 洋紅色 O 圓圈 c 青色 x 『X』符號 r 紅色 + 『+』符號 g 綠色 * 『*』符號 b 藍色 - 實線 w 白色 : 點線 k 黑色 -. 長點線 -- 虛線
24
國立台北科技大學冷凍空調工程系 施陽正 老師
例六: >> x=linspace(0, 2*pi, 50); >> plot(x, sin(x),'r', x, cos(x),'k'); %sin(x)以紅色表示 cos(x) 以黑色表示 國立台北科技大學冷凍空調工程系 施陽正 老師
25
國立台北科技大學冷凍空調工程系 施陽正 老師
例七: 改變plot圖形樣式 >> x=linspace(0, 2*pi, 50); >> plot(x, sin(x),'r.',x, cos(x),'k-.'); %sin(x)以紅色點圖表示表示 cos(x) 以黑色長點線表示 國立台北科技大學冷凍空調工程系 施陽正 老師
26
基本繪圖介紹完成後,皆下來介紹一維圖形其他的輔助功能。圖形繪製中為了增加圖形的可讀性,通常會在圖形中加上圖形註解以及調整圖軸以凸顯主題。 『axis』用來調整圖形的圖軸範圍
27
國立台北科技大學冷凍空調工程系 施陽正 老師
例八:『axis』整圖形的圖軸範圍 >> x=linspace(0, 2*pi, 50); >> y=cos(x); >> plot(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
28
國立台北科技大學冷凍空調工程系 施陽正 老師
>> axis([0,5,-0.5,0.5]); 國立台北科技大學冷凍空調工程系 施陽正 老師
29
若要在圖形中加入圖形註解,我們可以使用 『xlabel』、『ylabel』、『title』、『legend』、『grid on』
例九: >>x=linspace(0, 2*pi, 50); >>plot(x, sin(x),'r.',x, cos(x),'k-.'); >>xlabel('x'); % x軸註解 >>ylabel('y'); % y軸註解 >>title('ex'); % 圖形標題 >>legend('y = sin(x)','y = cos(x)'); % 圖形註解 >>grid on; % 顯示格線 國立台北科技大學冷凍空調工程系 施陽正 老師
30
更進一步地我們可以用subplot將數個小圖顯示在同一個視窗當中。
例十: >>x=linspace(0, 2*pi, 50); >>subplot(2,2,1); plot(x, sin(x)); >>subplot(2,2,2); plot(x, cos(x)); >>subplot(2,2,3); plot(x, sinh(x)); >>subplot(2,2,4); plot(x, cosh(x)); 國立台北科技大學冷凍空調工程系 施陽正 老師
31
二維圖形 針對二維圖形,Matlab 有提供一些二維圖形的函數,根據不同的圖形特性提供不同函數,以下將列表整理並舉例說明 函數名稱 函數功能
bar 長條圖 fplot 精確的函數圖形 polar 極座標圖 hist 累計圖 rose 極座標累計圖 stairs 階梯圖 fill 實心圖
32
國立台北科技大學冷凍空調工程系 施陽正 老師
例十一: bar( )長條圖 >>x=1:20; >>y=rand(size(x)); >>bar(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
33
國立台北科技大學冷凍空調工程系 施陽正 老師
例十二: fplot ( )精確的函數圖形 某些函數我們需要較為精細的數據時,可以運用fplot 來幫我們完成。 >> x=linspace(0, 2*pi, 50); >>fplot(‘sin(1/x)’, [ ]); % [ ]為繪 圖範圍 國立台北科技大學冷凍空調工程系 施陽正 老師
34
國立台北科技大學冷凍空調工程系 施陽正 老師
例十三: polar ( ) 極座標圖 >>theta=linspace(0, 2*pi); >>r=cos(8*theta); >>polar(theta, r); 國立台北科技大學冷凍空調工程系 施陽正 老師
35
國立台北科技大學冷凍空調工程系 施陽正 老師
例十四: hist ( )、rose( ) 應用於觀察大量資料的分佈與統計資訊 >> x=rand(1,42,1000); >> hist(x,42); 國立台北科技大學冷凍空調工程系 施陽正 老師
36
國立台北科技大學冷凍空調工程系 施陽正 老師
>> x=rand(1,1000); >> rose(x); %rose( ) 是以極座標表示,將資料大小表示為角度、資料個數表示為距離 國立台北科技大學冷凍空調工程系 施陽正 老師
37
國立台北科技大學冷凍空調工程系 施陽正 老師
例十五: stairs( ) 繪製梯型圖 >>x=linspace(0,10,50); >>y=sin(x).*exp(-x/3); >>stairs(x,y); 國立台北科技大學冷凍空調工程系 施陽正 老師
38
國立台北科技大學冷凍空調工程系 施陽正 老師
例十六: fill( ) 實心圖 >>x=linspace(0,10,100); >>y=sin(x).*exp(-x/9); >>fill(x,y,'r'); % 'r' 代表紅色 國立台北科技大學冷凍空調工程系 施陽正 老師
39
三維圖形 Matlab 中的三維空間繪圖基本函數為 『mesh』、『plot3』,其中 mesh 可以繪製出立體網狀圖,而 plot3 可以繪製出立體曲線圖,所繪製出的圖形會以不同的顏色來代表不同高度。
40
國立台北科技大學冷凍空調工程系 施陽正 老師
例十七: 立體網狀圖 z=x3+y3-3xy >> [x,y]=meshgrid(-2:0.1:2); >>z=x.^3+y.^3-3*x.*y; >>mesh(x,y,z) 國立台北科技大學冷凍空調工程系 施陽正 老師
41
國立台北科技大學冷凍空調工程系 施陽正 老師
例十八: z=x3+y3-3xy >> [x,y]=meshgrid(-2:0.1:2); >>z=x.^3+y.^3-3*x.*y; >>plot3(x,y,z) 國立台北科技大學冷凍空調工程系 施陽正 老師
42
國立台北科技大學冷凍空調工程系 施陽正 老師
另外一個 surf 用法類似 mesh ,介紹如下: 例十九: 立體曲面圖 z=x3+y3-3xy >> [x,y]=meshgrid(-2:0.1:2); >>z=x.^3+y.^3-3*x.*y; >>surf(x,y,z) 國立台北科技大學冷凍空調工程系 施陽正 老師
43
矩陣基本運算 矩陣基本運算 一個3x3矩陣 1 2 3 4 5 6 7 8 9 直接在 Matlab 命令視窗內的提示符號『>>』後面輸入,各項元素間至少以一個空格來分隔,列與列間則以";"分隔。而指令行最後加上個分號可避免顯示出許多不需要的東西。
44
例 6: >>A = [1 2 3; 4 5 6; 7 8 9;]; 若想知道矩陣A之內容時,則直接提示符號『>>』 後面輸入『A』即可,螢幕之顯示結果如下: A=
45
另一種輸入可以不加分號,但是強迫分行,亦可達到相同的效果:
例 7: >> B=[ ] 螢幕之顯示結果如下: B= 1 3 5 7
46
Matlab 中矩陣的基本運算符號有以下這些
+:加法運算 -:減法運算 *:乘法運算 / :右除法運算 \:左除法運算 ^:次方運算 ' :轉置矩陣
47
例 8:(基本運算) 轉置矩陣: 乘法運算: 次方運算: >>B' >>B*B >>B^3
轉置矩陣: >>B' ans = 1 5 3 7 乘法運算: >>B*B ans = 16 24 40 64 次方運算: >>B^3 ans =
48
矩陣運算中所要注意的是『矩陣的左、右除法運算結果不相等』。 例 9:
>>C=[7 9;11 13]; >>B/C ans = >>B\C ans = -3 3 4 Matlab中也可以進行複變數的宣告與運算,以“ I ”或“j”還代表虛數,如 y=2+3i。 Matlab中有幾個函數可以產生矩陣,例如:rand、magic、hilb。
49
例 10: rand(n) 與 rand(m,n) 將個別產生 nxn 與 mxn 亂數矩陣,元素分佈於0與1之間。 >>rand(3) ans =
50
magic(n)將產生一個列相加或行相加的和都相同的矩陣。
例 11: magic(n)將產生一個列相加或行相加的和都相同的矩陣。 >> magic(5) ans = 1 8 15 23 5 4 3 2 9
51
hilb(n)將產生一個 n x n 的 Hilbert 矩陣。
例 12: hilb(n)將產生一個 n x n 的 Hilbert 矩陣。 >> hilb(3) ans =
52
常用矩陣運算函數 函數名稱 函數功能 inv(A) 求矩陣A的逆矩陣(inverse) det(A) 求矩陣A的行列式值 eig(A)
53
國立台北科技大學冷凍空調工程系 施陽正 老師
微積分應用 微積分中極線與連續是基本的要素。在極限方面這裡舉列幾個Matlab 範例。 Matlab 要配合 symbolic object 來使用。 國立台北科技大學冷凍空調工程系 施陽正 老師
54
Matlab 中以 diff 指令來作微分運算
55
例四: 積分運算(不定積分) syms x y; %syms 定義符號變數 int(x) ans=1/2*x^2 int(sin(x)) ans=-cos(x)
56
程式撰寫 Matlab 對於高階應用需求提供程式撰寫的功能,可用來處理大量資料的計算 或系統模擬。 這樣的方式很類似過去作業系統DOS中撰寫的批次檔一般,把許多一連串的指令或函數集合起來運作。 通常MATLAB程式碼撰寫的檔案以『m』為副檔名。這些副檔名為『m』的 檔案一般又分為兩種類型,其中一種為巨集式的MATLAB命令集;另一種則是 構成函式(function)。使用者可以使用MATLAB內建的『M檔案編輯器』(M-File Editor)或其他編輯器來撰寫編輯M檔案。 底下為一個M檔案內容範例:(令檔名為sample1.m)
57
國立台北科技大學冷凍空調工程系 施陽正 老師
底下為一個M檔案內容範例: (令檔名為sample1.m)%程式撰寫繪圖 國立台北科技大學冷凍空調工程系 施陽正 老師
58
在MATLAB中我們要執行這個M檔案中的程式碼,可以在MATLAB的指令視窗中輸入 >>sample1 則會出現程式執行結果
像sample1.m這類的M檔案所產生的效果,等同於在MATLAB指令列中一行一行輸入 sample1.m裡每一列指令所產生的結果。這類型的M檔案即為巨集式M檔案。 95/02
59
程式流程控制 MATLAB在程式撰寫應用中有一些指令會影響程式執行的流程, 可以歸納為兩類,一種為迴圈指令,另一種則是條件指令。 MATLAB迴圈類指令有 for迴圈 以及 while迴圈。 for迴圈 for 迴圈一般用法 for varname = x:y:z for varname = [a b c ...]
61
國立台北科技大學冷凍空調工程系 施陽正 老師
MATLAB條件類指令可分為 if-else 和 switch case 國立台北科技大學冷凍空調工程系 施陽正 老師
62
前面我們提過的範例sample1.m裡頭也有if條件指令
國立台北科技大學冷凍空調工程系 施陽正 老師
71
國立台北科技大學冷凍空調工程系 施陽正 老師
72
國立台北科技大學冷凍空調工程系 施陽正 老師
95/02 國立台北科技大學冷凍空調工程系 施陽正 老師
Similar presentations