Download presentation
Presentation is loading. Please wait.
1
MATLAB簡介
2
開啟MATLAB Workspace 顯示目前工作環境內定義的變數 Command History 紀錄曾經下過的指令
Command Window 我們將它譯為 操作視窗,就如同一個文 字操作介面,有 >> 提示號,在提示號 之後輸入指令 2018/11/15
3
開啟MATLAB(續) 什麼叫M-file: 若在 Command Window 上面寫程式,按 Enter 後發現寫錯,很難直接修改。
例如把 err = 5e-15改成 err = 1e-10 寫程式最好另外開啟一個檔案,把程式的「原 始碼」寫在裡面,這個檔案我們稱為M-file, 此檔案是純文字檔,而且副檔名必須是 m 。 優點: 1.方便修改。 2.不會因為關閉Matlab 而失去原始碼。 2018/11/15
4
MATLAB基本數學函數指令 首先 英文字母大小寫是不一樣的喔!!! 常用的函式: 名稱 內容 函式 絕對值a 矩陣各元素取絕對值
abs(a) 根號a 矩陣各元素取根號 sqrt(a) a的b次方 方陣A的b次方 a^b 複數 實部、虛部 c=a+bi complex(a,b) real(c), imag(c) 四捨五入 小數去掉 round(x) fix(x) 2018/11/15
5
MATLAB基本數學函數指令(續) 常用的函式: 名稱 內容 函式 自然對數e的a次方 矩陣各元素取exp( ) exp(a)
矩陣各元素取log( ) log(a) 10為底 矩陣各元素取log10( ) log10(a) 2為底 矩陣各元素取log2( ) log2(a) 餘數 rem(-7,3)=-1 mod(-7,3)= 2 rem(x,y) mod(x,y) 2018/11/15
6
MATLAB 複數及三角函數 三角函數 正弦 sin( ) 餘弦 cos( ) 正切 tan( ) 餘切 cot( ) 正割 sec( )
餘割 csc( ) 反正弦 asin( ) 反餘弦 acos( ) 反正切 atan( ) 反餘切 acot( ) 反正割 asec( ) 反餘割 acsc( ) 2018/11/15
7
MATLAB關係運算 a大於(小於)b 可表 a>(<)b a不等於b 可表 a~=b a等於b 可表 a=b
2018/11/15
8
MATLAB邏輯運算 名稱 函式 小於 < 相等 = = 小於等於 <= 大於 > 大於等於 >= 否 是 1 且
是 1 且 & 或 | 非 ~ 2018/11/15
9
MATLAB矩陣運算 A.是指A矩陣裡的純量同時運算 矩陣 Ex:
矩陣四則運算: 矩陣的加+,減-,乘 *,次方^都和普通計算一 樣。 A.是指A矩陣裡的純量同時運算 2018/11/15
10
MATLAB矩陣運算(續) 四則運算 函式 說明 A*B 一般的矩陣運算 A.*B 將相同長度陣列A、B中的元素相乘,結果還是矩陣 A/B
2018/11/15
11
矩陣的Transpose、Hermitian及矩陣的基本函式
名稱 函式 conjugate transpose A’ 或者 transpose(A) transpose transpose(A) 列數,行數 size(A) rank rank(A) determinant det(A) trace trace(A) inverse inv(A) 2-norm norm(A) 2018/11/15
12
矩陣的Transpose、Hermitian及矩陣的基本函式 (續)
名稱 函式 1-norm norm(A,1) infinite-norm norm(A,inf) eigenvalue eig(A) singular value svd(A) B:eigenvector C:eigenvalue組成的矩陣 [B,C]=eig(A) B*C*D=A B,D:unitary matrix C:singular value A:m×n B:m×m C:m×n D:n×n [B,C,D]=svd(A) 2018/11/15
13
矩陣的Transpose、Hermitian及矩陣的基本函式 (續)
Ex:(MATLAB) >> A=[1+2i,2+3i;3+4i,4+5i] >> A' ans = i i i i 2018/11/15
14
製造特殊矩陣--0 與 1 MATLAB提供許多製造特殊矩陣的指令 例如: 名稱 函式 2乘3的零矩陣 zeros(2,3)
元素都是1的2乘3的矩陣 ones(2,3) 3乘3的零方陣 zeros(3) 元素都是1的3乘3的方陣 ones(3) 3乘3的單位方陣 eye(3) 2乘3的矩陣 對角線是1其餘是0 eye(2,3) 2018/11/15
15
代表矩陣元素的變數 說明矩陣位址: A(1,1) 代表A的(1,1)位置元素 A(2,:) 代表A的第二列 A(:,3) 代表A的第三行
2018/11/15
16
冒號(:)指令 1:5 製造了以下序列 1 2 3 4 5 1:2:10製造了以下序列 1 3 5 7 9
1:2:10製造了以下序列 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 2018/11/15
17
分號(;)指令 如果想要指派數值給一個變數,而不必 看到MATLAB回應變數的值,可以在指 令結束之後寫一個分號 ;
變數名稱 = 變數值 如果只有值而沒有變數名稱則MATLAB 會顯示 ans = 值 2018/11/15
18
分號(;)指令 (續) 如果想要變數值但是不想要變數名稱就用 disp
disp( ) 這就是把一個變數的值印出來的 意思而且不再加“ans=” EX. >>disp(‘aaa’) 是顯示aaa這串句子 >> 'aaa' 是顯示ans= aaa 2018/11/15
19
逗號(,)指令 a=10,b=100,c=200,和 a=10 b=100 c=200 是一樣的,差別只差在想不想要用一列 敘述就解決程式。
2018/11/15
20
MATLAB的輸入、輸出 MATLAB在使用數值的輸入和輸出,都 是在Command Window底下做輸入。 輸入(input): EX:
>>R = input(‘R=’); %輸入R值 >> k=det(R) 2018/11/15
21
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參閱說 明 2018/11/15
22
break指令和MATLAB的迭代和邏輯分岔概念
(for迴圈、if運算、while迴圈) break指令: 在下面的for迴圈、if運算、while迴 圈中加入break 它的意思是:從 for迴圈、if運算、 while迴圈中強制脫逃。 for迴圈: 語法: for 變數 = 向量或序列, 計算, end 2018/11/15
23
break指令和MATLAB的迭代和邏輯分岔概念 (續)
Ex: MATLAB: y=1; for x = 1:2:10 % (x=1,3,5,7,9) 只有到9 y=y*x; end y 2018/11/15
24
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 都可以。 2018/11/15
25
break指令和MATLAB的迭代和邏輯分岔概念(續)
2.sum和prod的應用: 其實如果只是做等差數列相加運算, 可以用sum(1:2:10)= 其實如果只是做等差數列相乘運算, 可以用prod(1:2:10)=1*3*5*7*9 ps:利用MATLAB處理上述兩個運算,用 sum和 prod才是王道 2018/11/15
26
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 2018/11/15
27
break指令和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 x = 1/3; if (3*x == 1), disp('Bingo'); else, disp('Hee'); end 2018/11/15
28
break指令和MATLAB的迭代和邏輯分岔概念(續)
while迴圈: 語法:while CONDITION % CONDITION “通常”是一個邏輯計算 STATEMENTS; end 流程:1.算 CONDITION 2.如果CONDITION的結果是FALSE,則執 行END之後的指令;否則執行STATEMENT 3.執行到END時,回到1. 2018/11/15
29
break指令和MATLAB的迭代和邏輯分岔概念(續)
※for和while的應用有什麼不同? 既然for迴圈和while迴圈可以互換,那 何必提供兩種語法?原因有二: 1.風格問題 有人喜歡for,有人喜歡 while 2.for迴圈通常用在事先已經確定要執 行幾次的情形,while迴圈通常在一邊 計算一邊看看要不要繼續做的情況。 2018/11/15
30
繪圖-折線圖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) 2018/11/15
31
繪圖-plot and axis (續) 下面是許多色碼、點的圖案、線碼的表格 色碼 顏色 標點碼 標點 線碼 線名稱 Y 黃色 . 點 -
實線 W 白色 O 圓點 : 虛線 K 黑色 X 叉點 -. 點虛線 R 紅色 + 加號 -- 折線 G 綠色 * 星號 B 藍色 S 方塊 2018/11/15
32
區間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]); 2018/11/15
33
設定x-y相同的單位長 當我們製圖的時候,橫軸與縱軸的單位 長未必一樣長,如果要強迫橫軸與縱軸 的單位長相同,下指令 axis('equal')。 MATLAB:(同上題) x = linspace(-pi, pi, 301); plot(x, sin(x),'r'); axis([-4,4,-2,2]); axis('equal') 2018/11/15
34
設定x-y相同的單位長(續) Ex: 畫單位圓 MATLAB: t = linspace(0, 2*pi, 301);
plot(cos(t), sin(t)); axis( 2 * [ ] ); axis('equal') 2018/11/15
35
繪製函式圖形( fplot( ) ) 如果想要繪製MATLAB裡內建的函式圖形, 或者已存入work的自定的可繪圖函式, 可以用上述的方式,取很多很多點,利 用折線圖就可以繪製了。 但是其實MATLAB已有內建繪圖的程式, 只需要輸入函式和你要的區間就可以了。 其語法為 fplot('fun',[xmin xmax ymin ymax]) ※ymin ymax 可加可不加 2018/11/15
36
繪製函式圖形( fplot( ) ) (續) EX:
>> fplot('sin(x)./x',[ ]) %所有的圖形也可以做圖形標示 >> title('fplot of f(x)=sin(x)/x') >> xlabel('x'), ylabel('f(x)') >>fplot('x^3-3*x^2+x-3',[0,5,130,0]) 2018/11/15
37
繪圖--長條圖 bar and axis 若v是n維向量,則bar(v)就畫出高度依序 為
v1, v2 ... vn的長條圖,橫軸為1、 2、…、n。 如果V是一個m乘n矩陣,例如: 則橫軸為1、2、3,縱軸為 、 、…、 的高度 、 屬於第一行,所以在橫軸1的位置 、 屬於第二行,所以在橫軸2的位置 、 屬於第三行,所以在橫軸3的位置 2018/11/15
38
繪圖--長條圖 bar and axis (續)
EX: MATLAB: v=[1 4; 0 -2; 3 5]; bar(v); axis( [ ] ) 當然,也可以自訂橫軸的數字,利用語 法bar(x,v) (但是x v維度一定要一 樣) 2018/11/15
39
繪圖--長條圖 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=[ ]; x=[ ]; bar(x,v); axis( [ ] ) title('輔仁數學期中考成績') xlabel('分數') ylabel('人數') 2018/11/15
40
自訂函式(function) 在M-file裡,完成你要的函式。 然後在程式的最上方,加入以下語法:
EX: function n = apple(x) 等號的左邊是要output的數據的變數名稱。 等號的右邊是要input的數據的變數名稱, 輸入參數是從呼叫者 (caller) 那裡傳過 來的。 ※儲存函式,最好將M-file和函式取同樣的 名字,這樣將來比較容易管理。 2018/11/15
41
自訂函式(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; 2018/11/15
42
MATLAB最重要的一節 請學習靈活運用help、lookfor 指令。 EX: help lu lookfor lu
ctrl+c (停止搜尋) 2018/11/15
Similar presentations