1、1數值分析(Numerical Analysis)國立台北科技大學能源與冷凍空調工程系 施陽正 老師九十九年九月2 Review of Matlab國立台北科技大學冷凍空調工程系3簡簡 介介 Matlab 是套應用於科學與工程領域中數值計算、分析與模擬的應用軟體,結合了數值分析、矩陣運算、訊號處理、系統模擬及繪圖等功能,功能強大、操作介面簡易。在大學課程中應用 Matlab 來輔助教學,例如線性代數、控制系統、訊號處理以及微積分。微積分電腦輔助學習網站由介紹一般與廣泛的應用方法切入,並以微積分為主要輔助目標。4 Matlab 全文為 matrix laboratory,原始發展理念是提供完整的
2、矩陣運算指令,將資料元素當成是矩陣來處理,而主要的用途就是作矩陣式的數學運算。隨著日後增加的數學運算需求而增加了系統模擬、數值分析、訊號處理及圖形等功能,也容許使用者建立、運算其他不同的資料型態,滿足更多樣、更深入的運算需求,使 Matlab 應用範圍更為廣大。5基本使用語法基本使用語法 Matlab 中進行基本運算的方式,就是在 Matlab 命令視窗內的提示符號(“”或“?”)後面輸入運算,然後按 Enter 鍵。6(7*3+5.5)/10 ans=2.6500上例中,若不希望 Matlab 在每次運算後都顯示結果,則在運算是後面加上“;”即可。(7*3+5.5)/10;查詢運算結果就在提
3、示符號後面鍵入 ans 即可。ans=2.65007另外,使用者也可以將運算結果儲存在自訂的變數中。n=(7*3+5.5)/10 n=2.65008如果要一次輸入的運算式在一個以上,我們可以用,或;來隔開。n=(7*3+5.5)/10;p=n 5 p=130.68619若是運算式太長的話,則可以用三個句號.隔開延伸到下一行(7*3+5.5)/10*.505 ans=82812500010在運算式中可以%符號加入文字,當作運算式的註解,運用在 Matlab 程式撰寫中可提高可讀性。m=(7*3+5.5)/10%將運算結果儲存在變數 m 中 m=2.650011Matlab 中有一些永久常數(Pe
4、rmanent Constants)供使用者直接呼叫。pi ans=3.141612常用到的幾個 Matlab 永久常數:常數名稱常數名稱 常數代表意義常數代表意義 i i、j j 基本需數單位(基本需數單位()epseps代表電腦無法分析非常小的數代表電腦無法分析非常小的數infinf無限大無限大 NanNan或或NaNNaN 無法定義的數值(無法定義的數值(Not A NumberNot A Number)pi pi 圓周率圓周率 p=3.1415926.p=3.1415926.realmaxrealmax顯示系統能表示的最大數值顯示系統能表示的最大數值 realmin realmin 顯
5、示系統能表示的最小數值顯示系統能表示的最小數值 13一般數學運算一般數學運算我們可以透過 Matlab 中的內建函示執行一般的數學運算。例 1:y=sin(50)*exp(-0.9*23)y=-1.9589e-00414常用基本函數常用基本函數 sqrtsqrt(x)(x)求求 x x 的平方根的平方根real(z)real(z)求複數求複數 z z 的實部的實部imag(z)imag(z)求複數求複數 z z 的虛部的虛部conj(z)conj(z)求複數求複數 z z 的共軛複數的共軛複數round(x)round(x)求求x x四捨五入後的最接近整數四捨五入後的最接近整數fix(x)fi
6、x(x)捨去小數求對應於捨去小數求對應於x x的整數的整數floor(x)floor(x)求不大於求不大於 x x 中所有數的最大整數中所有數的最大整數ceil(x)ceil(x)求不小於求不小於 x x 中所有數的最小整數中所有數的最小整數rat(x)rat(x)將實數將實數 x x 化為分數表示化為分數表示rats(x)rats(x)將實數將實數 x x 化為多項分數展開化為多項分數展開15sign(x)sign(x)符號函數符號函數(Signum function)(Signum function)x0 x0 x 0時,時,sign(x)=1 sign(x)=1 rem(x,y)rem(
7、x,y)求求x x除以除以 y y 的餘數的餘數gcd(x,y)gcd(x,y)整數整數 x x 和和 y y 的最大公因數的最大公因數lcm(x,y)lcm(x,y)整數整數 x x 和和 y y 的最小公倍數的最小公倍數exp(x)exp(x)自然指數(以自然指數(以 e e 為底的指數)為底的指數)pow2(x)pow2(x)2 2的指數的指數log(x)log(x)自然對數以自然對數以(e(e 為底的對數為底的對數)log2(x)log2(x)以以2 2為底的對數為底的對數log10(x)log10(x)以以1010為底的對數為底的對數16常用三角函數:函數名稱函數名稱 函數功能函數功
8、能sin(x)sin(x)正弦函數正弦函數cos(x)cos(x)餘弦函數餘弦函數tan(x)tan(x)正切函數正切函數asin(x)asin(x)反正弦函數反正弦函數acos(x)acos(x)反餘弦函數反餘弦函數atan(x)atan(x)反正切函數反正切函數atan2(atan2(x,yx,y)四象限的反正切四象限的反正切函數函數sinh(x)sinh(x)雙曲正弦函數雙曲正弦函數cosh(x)cosh(x)雙曲餘弦函數雙曲餘弦函數tanh(x)tanh(x)雙曲正切函數雙曲正切函數asinh(x)asinh(x)反雙曲正弦函數反雙曲正弦函數acosh(x)acosh(x)反雙曲餘弦函
9、數反雙曲餘弦函數atanhatanh(x)(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);國立台北科技大學冷凍空調工程系
10、 施陽正 老師20 x軸以對數為單位 和 y軸則為一般線性為單位 x=linspace(0,2*pi,50);y=cos(x);semilogx(x,y);國立台北科技大學冷凍空調工程系 施陽正 老師21x軸 為一般線性為單位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);23plot繪製圖行功能中容許使用者改變顏色以及圖形樣式,可以選擇的顏色以及圖形
11、樣式如下表:字元字元代表顏色代表顏色 圖形樣式符號圖形樣式符號 代表圖形樣式代表圖形樣式y y黃色黃色.點點m m洋紅色洋紅色O O圓圈圓圈c c青色青色x xX X符號符號r r紅色紅色+符號符號g g綠色綠色*符號符號b b藍色藍色-實線實線w w白色白色:點線點線k k黑色黑色-.-.長點線長點線-虛線虛線國立台北科技大學冷凍空調工程系 施陽正 老師24 x=linspace(0,2*pi,50);plot(x,sin(x),r,x,cos(x),k);%sin(x)以紅色表示 cos(x)以黑色表示 國立台北科技大學冷凍空調工程系 施陽正 老師25改變plot圖形樣式 x=linspa
12、ce(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);國立台北科技大學冷凍空調工程
13、系 施陽正 老師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=linspac
14、e(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()長
15、條圖 x=1:20;y=rand(size(x);bar(x,y);國立台北科技大學冷凍空調工程系 施陽正 老師33例十二:fplot()精確的函數圖形 某些函數我們需要較為精細的數據時,可以運用fplot 來幫我們完成。x=linspace(0,2*pi,50);fplot(sin(1/x),0.001 0.5);%0.001 0.5為繪 圖範圍 國立台北科技大學冷凍空調工程系 施陽正 老師34例十三:polar()極座標圖 theta=linspace(0,2*pi);r=cos(8*theta);polar(theta,r);國立台北科技大學冷凍空調工程系 施陽正 老師35例十四:his
16、t()、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(
17、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
18、.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矩陣基本運算矩陣基本運算 矩陣基本運算矩陣基本運算一個矩陣 1 2 3 4 5 6 7 8 9直接在 Matlab 命令視窗內的提示符號後面輸入,各項元素間至少以一個空格來分隔,列與列間則以;分隔。而指令行最後加上個分號可避免顯示出許多不需要的東西。44例 6:A=1 2 3;4 5 6;7 8 9
19、;若想知道矩陣之內容時,則直接提示符號後面輸入A即可,螢幕之顯示結果如下:A=1 2 3 4 5 6 7 8 945另一種輸入可以不加分號,但是強迫分行,亦可達到相同的效果:例 7:B=1 35 7螢幕之顯示結果如下:B=1 3 5 746Matlab 中矩陣的基本運算符號有以下這些+:加法運算-:減法運算*:乘法運算/:右除法運算:左除法運算:次方運算 :轉置矩陣47 轉置矩陣:B ans=1 5 3 7 乘法運算:B*B ans=16 24 40 64 次方運算:B3 ans=856576 1353216 2255360 3563008例 8:(基本運算)48矩陣運算中所要注意的是矩陣的左
20、、右除法運算結果不相等。例 9:C=7 9;11 13;B/C ans=2.5000-1.5000 1.5000-0.5000 BC ans=-2-3 3 4Matlab中也可以進行複變數的宣告與運算,以“I”或“j”還代表虛數,如 y=2+3i。Matlab中有幾個函數可以產生矩陣,例如:rand、magic、hilb。49例 10:rand(n)與 rand(m,n)將個別產生 nn 與 mn 亂數矩陣,元素分佈於0與1之間。rand(3)ans=0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.821450例 11:mag
21、ic(n)將產生一個列相加或行相加的和都相同的矩陣。magic(5)ans=17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 951例 12:hilb(n)將產生一個 n x n 的 Hilbert 矩陣。hilb(3)ans=1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.200052常用矩陣運算函數常用矩陣運算函數函數名稱函數功能inv(A)求矩陣A的逆矩陣(inverse)det(A)求矩陣A的行列式值eig(A)求矩陣A的特徵值與特徵向量國立
22、台北科技大學冷凍空調工程系 施陽正 老師53微積分應用微積分應用 微積分中極線與連續是基本的要素。在極限方面這裡舉列幾個Matlab 範例。Matlab 要配合 symbolic object 來使用。54Matlab 中以 diff 指令來作微分運算55例四:積分運算(不定積分)syms x y;%syms syms x y;%syms 定義符號變數定義符號變數 int(x)ans=1/2*x2 int(sin(x)ans=-cos(x)56 Matlab 對於高階應用需求提供程式撰寫的功能,可用來處理大量資料的計算 或系統模擬。這樣的方式很類似過去作業系統DOS中撰寫的批次檔一般,把許多一
23、連串的指令或函數集合起來運作。通常MATLAB程式碼撰寫的檔案以m為副檔名。這些副檔名為m的 檔案一般又分為兩種類型,其中一種為巨集式的MATLAB命令集;另一種則是 構成函式(function)。使用者可以使用MATLAB內建的M檔案編輯器(M-File Editor)或其他編輯器來撰寫編輯M檔案。底下為一個M檔案內容範例:(令檔名為sample1.m)程式撰寫程式撰寫國立台北科技大學冷凍空調工程系 施陽正 老師57底下為一個M檔案內容範例:(令檔名為sample1.m)%程式撰寫繪圖95/0258在MATLAB中我們要執行這個M檔案中的程式碼,可以在MATLAB的指令視窗中輸入 sampl
24、e1 則會出現程式執行結果 像sample1.m這類的M檔案所產生的效果,等同於在MATLAB指令列中一行一行輸入 sample1.m裡每一列指令所產生的結果。這類型的M檔案即為巨集式M檔案。59程式流程控制程式流程控制 MATLAB在程式撰寫應用中有一些指令會影響程式執行的流程,可以歸納為兩類,一種為迴圈指令,另一種則是條件指令。MATLAB迴圈類指令有 for迴圈 以及 while迴圈。for迴圈for 迴圈一般用法 for varname=x:y:zfor varname=a b c.60國立台北科技大學冷凍空調工程系 施陽正 老師61MATLAB條件類指令可分為 if-else 和 switch case國立台北科技大學冷凍空調工程系 施陽正 老師62前面我們提過的範例sample1.m裡頭也有if條件指令 6364656667686970國立台北科技大學冷凍空調工程系 施陽正 老師7195/02國立台北科技大學冷凍空調工程系 施陽正 老師72