420 likes | 637 Views
MATLAB 簡介. 開啟 MATLAB. Workspace 顯示目前工作環境內定義的變數 Command History 紀錄曾經下過的指令 Command Window 我們將它譯為 操作視窗,就如同一個文字操作介面,有 >> 提示號,在提示號之後輸入指令. 開啟 MATLAB( 續 ). 什麼叫 M-file : 若在 Command Window 上面寫程式,按 Enter 後發現寫錯,很難直接修改。 例如把 err = 5e-15 改成 err = 1e-10
E N D
開啟MATLAB • Workspace 顯示目前工作環境內定義的變數 • Command History 紀錄曾經下過的指令 • Command Window 我們將它譯為 操作視窗,就如同一個文字操作介面,有>> 提示號,在提示號之後輸入指令
開啟MATLAB(續) • 什麼叫M-file: 若在 Command Window 上面寫程式,按Enter 後發現寫錯,很難直接修改。 例如把 err = 5e-15改成 err = 1e-10 寫程式最好另外開啟一個檔案,把程式的「原始碼」寫在裡面,這個檔案我們稱為M-file,此檔案是純文字檔,而且副檔名必須是m 。 優點: 1.方便修改。 2.不會因為關閉Matlab 而失去原始碼。
MATLAB基本數學函數指令 • 首先 英文字母大小寫是不一樣的喔!!! • 常用的函式:
MATLAB基本數學函數指令(續) • 常用的函式:
MATLAB 複數及三角函數 • 三角函數
MATLAB關係運算 • a大於(小於)b 可表 a>(<)b • a不等於b 可表 a~=b • a等於b 可表 a=b
MATLAB矩陣運算 • 矩陣 Ex: >> A = [1, 2; 3, 4] (逗號也可以用空白代替) A = 1 2 3 4 • 矩陣四則運算: 矩陣的加+,減-,乘 *,次方^都和普通計算一樣。 A.是指A矩陣裡的純量同時運算
MATLAB矩陣運算(續) • 四則運算
矩陣的Transpose、Hermitian及矩陣的基本函式 (續) • Ex:(MATLAB) >> A=[1+2i,2+3i;3+4i,4+5i] >> A' ans = 1.0000 - 2.0000i 3.0000 - 4.0000i 2.0000 - 3.0000i 4.0000 - 5.0000i
製造特殊矩陣--0 與1 • MATLAB提供許多製造特殊矩陣的指令 • 例如:
代表矩陣元素的變數 說明矩陣位址: A(1,1)代表A的(1,1)位置元素 A(2,:)代表A的第二列 A(:,3)代表A的第三行 A(1,1:3) 代表A的第一列之第一行到第三行
冒號(:)指令 • 1:5 製造了以下序列 1 2 3 4 5 • 1:2:10製造了以下序列 1 3 5 7 9 • x = linspace(a,b,n+1): 產生一個等差序列,序列共有n+1 項,兩兩之差為(b-a)/n,而首項是a,尾項是b。 ps:x形成1乘(n+1)矩陣,x(1) = a,x(n+1)=b
分號(;)指令 • 如果想要指派數值給一個變數,而不必看到MATLAB回應變數的值,可以在指令結束之後寫一個分號 ; 如果沒放; 則MATLAB會顯示 變數名稱 = 變數值 • 如果只有值而沒有變數名稱則MATLAB會顯示 ans= 值
分號(;)指令 (續) • 如果想要變數值但是不想要變數名稱就用disp • disp( )這就是把一個變數的值印出來的意思而且不再加“ans=” EX. >>disp(‘aaa’) 是顯示aaa這串句子 >>'aaa' 是顯示ans= aaa
逗號(,)指令 • a=10,b=100,c=200,和 a=10 b=100 c=200 是一樣的,差別只差在想不想要用一列敘述就解決程式。
MATLAB的輸入、輸出 • MATLAB在使用數值的輸入和輸出,都是在Command Window底下做輸入。 • 輸入(input): EX: >>R = input(‘R=’); %輸入R值 >> k=det(R)
MATLAB的輸入、輸出(續) • 輸出(disp、fprintf): disp( )先前討論過了,這裡討論fprintf( ) 語法: fprintf('The area is %8.5f\n', area) %8.5f是8位浮點數Fixed-point ,含5位小數 \n是避免下個輸出值和這個輸出值會太接近 EX: fprintf('pi= %12.5f\n',pi) 還有%d, %s等等,可執行help fprintf參閱說明
break指令和MATLAB的迭代和邏輯分岔概念 • (for迴圈、if運算、while迴圈) break指令: 在下面的for迴圈、if運算、while迴圈中加入break 它的意思是:從 for迴圈、if運算、while迴圈中強制脫逃。 • for迴圈: • 語法: • for 變數= 向量或序列, 計算, end
break指令和MATLAB的迭代和邏輯分岔概念 (續) • Ex: MATLAB: y=1; for x = 1:2:10 % (x=1,3,5,7,9) 只有到9 y=y*x; end y
break指令和MATLAB的迭代和邏輯分岔概念(續) 注意: • 1.我們習慣用i, j, k, m, n 這些字母當作迭代的變數。不過,記得Matlab 認識複數嗎?其實i 原本是sqrt(-1) 的意思。一旦你說了 for i=1:2:100 這句,執行之後,i 的值就是99。因為我們把1:2:100 這個向量的元素一個一個代入i,而最後一個是99。如果要讓i 恢復單位虛數,就說 i = sqrt(-1) 或者 i=complex(0,1)、j 都可以。
break指令和MATLAB的迭代和邏輯分岔概念(續) • 2.sum和prod的應用: 其實如果只是做等差數列相加運算,可以用sum(1:2:10)=1+3+5+7+9 其實如果只是做等差數列相乘運算,可以用prod(1:2:10)=1*3*5*7*9 ps:利用MATLAB處理上述兩個運算,用sum和 prod才是王道
break指令和MATLAB的迭代和邏輯分岔概念(續) • if運算: • 語法1: if (True_or_False), 計算, end • 語法2; if (True_or_False), 計算A, else, 計算B, end • 語法3: if (True_or_False), 計算A, elseif (True_or_False), 計算B, else, 計算C, end
break指令和MATLAB的迭代和邏輯分岔概念(續) • MATLAB: • x = 1/7;if (x+x+x+x==1),disp('Bingo'); else,disp('Hee'); end 結果是Hee • x = 1/7;if (7*x == 1), disp('Bingo'); else, disp('Hee'); end 結果是Bingo • x = 1/3;if (x+x+x == 1), disp('Bingo'); else, disp('Hee'); end 結果是Bingo • x = 1/3;if (3*x == 1), disp('Bingo'); else, disp('Hee'); end 結果是Bingo
break指令和MATLAB的迭代和邏輯分岔概念(續) • while迴圈: 語法:while CONDITION % CONDITION “通常”是一個邏輯計算STATEMENTS; end 流程:1.算CONDITION 2.如果CONDITION的結果是FALSE,則執 行END之後的指令;否則執行STATEMENT 3.執行到END時,回到1.
break指令和MATLAB的迭代和邏輯分岔概念(續) ※for和while的應用有什麼不同? • 既然for迴圈和while迴圈可以互換,那何必提供兩種語法?原因有二: 1.風格問題 有人喜歡for,有人喜歡while 2.for迴圈通常用在事先已經確定要執行幾次的情形,while迴圈通常在一邊計算一邊看看要不要繼續做的情況。
繪圖-折線圖plot and axis • plot(x,y)的意思就是在平面座標上 從 (x1, y1) 這一點畫一條直線去(x2, y2), 從(x2, y2) 這一點畫一條直線去(x3, y3), ... 從(xn-1, yn-1) 這一點畫一條直線去(xn, yn)。 • 線的顏色: plot(x,y)內建的是黑線,如果要限定顏色 plot(x, y,'r')則是紅線,'g'表示綠色(green) 'b'表示藍色(blue)
繪圖-plot and axis (續) • 下面是許多色碼、點的圖案、線碼的表格
區間axis(v) • v = [v1 v2 v3 v4] axis(v),橫軸v1與v2間,縱軸v3與v4間,呈現圖形。 • Ex: 將-pi到pi分成300同等分的點,對應y=sin(x)的值 畫在橫軸-4~4 ,縱軸-2~2 的平面座標系上 • MATLAB: x = linspace(-pi, pi, 301); plot(x, sin(x)); axis([-4,4,-2,2]);
設定x-y相同的單位長 • 當我們製圖的時候,橫軸與縱軸的單位長未必一樣長,如果要強迫橫軸與縱軸的單位長相同,下指令 axis('equal')。 • MATLAB:(同上題) x = linspace(-pi, pi, 301); plot(x, sin(x),'r'); axis([-4,4,-2,2]); axis('equal')
設定x-y相同的單位長(續) • Ex: 畫單位圓 • MATLAB: t = linspace(0, 2*pi, 301); plot(cos(t), sin(t)); axis( 2 * [-1 1 -1 1] ); axis('equal')
繪製函式圖形( fplot( ) ) • 如果想要繪製MATLAB裡內建的函式圖形,或者已存入work的自定的可繪圖函式,可以用上述的方式,取很多很多點,利用折線圖就可以繪製了。 但是其實MATLAB已有內建繪圖的程式,只需要輸入函式和你要的區間就可以了。 • 其語法為 fplot('fun',[xmin xmax ymin ymax]) ※ymin ymax 可加可不加
繪製函式圖形( fplot( ) ) (續) • EX: >> fplot('sin(x)./x',[-20 20 -0.4 1.2]) %所有的圖形也可以做圖形標示 >> title('fplot of f(x)=sin(x)/x') >> xlabel('x'), ylabel('f(x)') • EX: >>fplot('x^3-3*x^2+x-3',[0,5,130,0])
繪圖--長條圖 bar and axis • 若v是n維向量,則bar(v)就畫出高度依序為 v1, v2 ... vn的長條圖,橫軸為1、2、…、n。 • 如果V是一個m乘n矩陣,例如: 則橫軸為1、2、3,縱軸為、、…、的高度 、屬於第一行,所以在橫軸1的位置 、屬於第二行,所以在橫軸2的位置 、屬於第三行,所以在橫軸3的位置
繪圖--長條圖 bar and axis (續) • EX: MATLAB: v=[1 4; 0 -2; 3 5]; bar(v); axis( [ 0.2 6.8 -3 6 ] ) • 當然,也可以自訂橫軸的數字,利用語法bar(x,v) (但是x v維度一定要一樣)
繪圖--長條圖 bar and axis (續) • EX: 如果30~39分有1人,40~49分有4人,60~69分有2人,70~79分有3人,80~89分有5人,90~99分有3人,100分有1人 • MATLAB: v=[1 4 0 2 3 5 3 1]; x=[35 45 55 65 75 85 95 100]; bar(x,v); axis( [ 30 105 0 6 ] ) title('輔仁數學期中考成績') xlabel('分數') ylabel('人數')
自訂函式(function) • 在M-file裡,完成你要的函式。 然後在程式的最上方,加入以下語法: function 變數名稱=函式名稱(變數名稱) • EX: function n = apple(x) 等號的左邊是要output的數據的變數名稱。 等號的右邊是要input的數據的變數名稱, 輸入參數是從呼叫者(caller) 那裡傳過 來的。 ※儲存函式,最好將M-file和函式取同樣的名字,這樣將來比較容易管理。
自訂函式(function) (續) • EX: 現在要自訂一個能解出一元二次方程式的解的函式: • M-file(檔名:fun.m): MATLAB: function y=fun(a,b,c) y(1)=(-b+sqrt(b^2-4*a*c))/2*a; y(2)=(-b-sqrt(b^2-4*a*c))/2*a;
MATLAB最重要的一節 • 請學習靈活運用help、lookfor 指令。 • EX: help lu lookfor lu ctrl+c (停止搜尋)