MATLAB
MATLAB
基本操作基本操作(參考資料:電腦在化工上之應用電腦在化工上之應用電腦在化工上之應用電腦在化工上之應用 逢甲大學陳奇中老師)
Introduction to MATLAB Introduction to MATLAB
• MATLAB為美國Mathworks公司於1984年 所推出的數學科技運算軟體。其名稱來自 於MATrix LABobratory的縮寫,特長於矩 陣相關運算及各領域數值問題。目前最新 版本為7.11,本校計中版本為6.1與7.x,其 網站為http://www.mathworks.com
Why MATLAB ? Why MATLAB ?
• MATLAB是個直譯式高階語言,和其他常 見的C/C++、JAVA及VB等高階語言比較起 來,MATLAB在程式撰寫及資訊視覺化視 窗這兩方面相當方便,初學者可說是一學 就會、入門輕鬆。MATLAB省略許多複雜 令人頭大的語法,採取接近人類思維的語 法,同時提供許多指令處理複雜運算。
MATLAB
MATLAB
特色特色特色特色特色特色特色特色• MATLAB目前已被廣泛應用於數學、工 程、物理、化學、醫學、金融、生物資訊 等領域有關數值計算問題。其主要特色有:
1.在矩陣及線性代數上,提供各種先進的演 算法則來做數值運算。
2. 簡單好學,語法簡單。
3. 程式重複使用方便且快速。
MATLAB
MATLAB
特色特色特色特色特色特色特色特色4. 提供非常完備的數學函數,且能讓使用者 定義自己的函數。
5. 二、三維的繪圖功能強大,完整的資料視 覺化顯示功能,幫助使用者分析資料。
6. 提供超過40種以上的工具箱(ToolBox),
包含各種控制、統計、通訊、訊號處理、
影像處理、神經網路、模糊邏輯、小波、
數為訊號處理、符號數學運算、以及生物 資訊等,可以幫助使用者處理相關領域問 題。
參考書籍 參考書籍 參考書籍 參考書籍參考書籍 參考書籍 參考書籍 參考書籍
• MATLAB程式設計程式設計程式設計程式設計【【【入門篇【入門篇入門篇】入門篇】】,】 作者作者作者作者: 張智張智張智張智 星
星 星
星, 初版2004 年 9 月, 清蔚科技 出版
• MATLAB在工程上的應用在工程上的應用在工程上的應用在工程上的應用, 作者作者作者作者: 歐崇明歐崇明歐崇明歐崇明, 初版2005 年 10月 , 高立圖書 出版
如何進入 如何進入 如何進入 如何進入如何進入 如何進入 如何進入
如何進入
MATLAB MATLAB
????????• step 1 進入Windows
• step 2 載入Matlab
如何做簡單數學運算 如何做簡單數學運算 如何做簡單數學運算
如何做簡單數學運算???? 如何做簡單數學運算
如何做簡單數學運算如何做簡單數學運算
如何做簡單數學運算????
– 在MATLAB 命令視窗(Command Window)
內的提示符號(>>)之後輸入運算式,並按入 Enter 鍵即可。例如:
>> (5*2+3.5)/5 ans =
2.7000
– 若不想讓 MATLAB 每次都顯示運算結果,只
需在運算式最後加上分號(;)即可,例如:
>> (5*2+3.5)/5;
如何做簡單數學運算 如何做簡單數學運算 如何做簡單數學運算
如何做簡單數學運算???? 如何做簡單數學運算
如何做簡單數學運算如何做簡單數學運算
如何做簡單數學運算????
• Ex 1: 五隻雞和二隻兔,共幾隻腳?
>>chicken=5;
>>rabbit=2;
>>legs=chicken*2+rabbit*4 執行結果
執行結果執行結果 執行結果 legs =
18
• Ex 2: 求
>>exp(-3)*cos(3)/asin(0.5)
ans =
-0.0941
• Ex 3: 23=?
>>2^3 ans =
8
NOTE: 運算次序運算次序運算次序運算次序 ^ ×××× / + -
) 5 . 0 ( sin
/ ) 3
cos(
13 −
−
⋅
e
變數名稱限制 變數名稱限制 變數名稱限制 變數名稱限制 變數名稱限制 變數名稱限制變數名稱限制 變數名稱限制
•變數名稱小於等於變數名稱小於等於變數名稱小於等於19變數名稱小於等於191919字元字元字元字元
•第一字元不能為數字第一字元不能為數字第一字元不能為數字第一字元不能為數字
•字元大小寫表示不同意義字元大小寫表示不同意義字元大小寫表示不同意義字元大小寫表示不同意義
• Ex1: c123 ((((o)))) 4c123(((X)( ))) c_123(((o)( ))) c-123((((X))))
註 註註
註:MATLAB 在使用變數時,不需預先經過變數宣告
(Variable Declaration)的程序,而且所有數值變數均以
預設的 double 資料型式儲存。
特殊符號 特殊符號 特殊符號 特殊符號特殊符號 特殊符號 特殊符號 特殊符號
• %% 註解%% 註解註解註解
• ;; 不顯示執行結果;; 不顯示執行結果不顯示執行結果不顯示執行結果
• ………… 連續連續連續連續
Getting workspace information Getting workspace information
• who %顯示變數名稱
• whos %顯示變數名稱及其大小格式
• dir %顯示所有檔案
• what %顯示檔案*.m或*.mat
• clc %清除螢幕
• clear %清除變數
>>clear all %清除所有變數
>>clear a b %清除變數 a 與 b
常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數常見數學函數 常見數學函數
1. abs(x) % 取絕對值
2. acos(x) % 3. acosh(x) %
4. angle(x) % 複數的角度
5. asin(x) % 6. atan(x) % 7. atanh(x) %
cos cos cos
cos (((( ))))−−−−1111 xxxx
coshcoshcosh
cosh (((( ))))−−−−1111 xxxx
sin sin
sinsin (((( ))))−−−−1111 xxxx
tan tan
tantan (((( ))))−−−−1111 xxxx
tanh tanh
tanhtanh (((( ))))−−−−1111 xxxx
常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數常見數學函數 常見數學函數
8. ceil(x) % 取最接近且大於原數的整數 (無條件進入)
9. floor(x) % 取最接近且小於原數的整數
10. round(x) % 四捨五入(取至整數為止)
11. fix(x) % 無條件捨去 12. conj(x) % 共軛複數
13. cosh(x) % cosine hyperbolic function 14. exp(x) % exponential :
15. real(x) % 取實部 imag(x) 取虛部
eeee xxxx
常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數 常見數學函數常見數學函數 常見數學函數
16. log(x) % 17. log10(x) %
18. rem(x,y) % x/y的餘數
19. sign(x) % 取正負號
20. sin(x) 21. sinh(x)
22. sqrt(x) % 23. tan(x)
24. tanh(x)
log loglog
logeeee xxxx ==== lnlnlnln xxxx log
loglog
log10101010 xxxx
x
• Ex1: 求解求解求解求解
>>分析
>> a=1; b=2; c=3;
>>x1=(-b+sqrt(b^2-4*a*c))/(2*a)
x1 =
-1.0000 + 1.4142i
>>x2=(-b-sqrt(b^2-4*a*c))/(2*a)
x2 =
-1.0000 - 1.4142i
ax
2+ bx + = c 0
x x b b ac
1 2 a
2 4
, = − ± 2 −
有關複數之種種 有關複數之種種 有關複數之種種 有關複數之種種 有關複數之種種 有關複數之種種有關複數之種種 有關複數之種種
(1) 內定符號 i及 j
>>x=1+cos(2)*i
x =
1.0000 - 0.4161i
NOTE: 若若若 i 之前是數字則直接接若 之前是數字則直接接之前是數字則直接接 i,之前是數字則直接接 ,,若不是數字則要用,若不是數字則要用若不是數字則要用*號若不是數字則要用 號號號
(2) 複數大小及角度 abs(x) , angle(x) (3) 實部及虛部 real(x) , imag(x) (4) 複數之共軛複數 conj(x)
有何線上支援 有何線上支援 有何線上支援 有何線上支援 有何線上支援 有何線上支援有何線上支援
有何線上支援????????
• help:用來查詢已知指令的用法。
• lookfor:用來尋找未知的指令。找到所需的指令 後,即可用 help 進一步找出其用法。
• helpwin 或 helpdesk:產生線上支援視窗,其效
果和直接點選 MATLAB 命令視窗工作列的圖示是 一樣的。
• doc:產生特定函數的線上支援。
向量如何處理 向量如何處理 向量如何處理 向量如何處理 向量如何處理 向量如何處理向量如何處理
向量如何處理????????
(1) 向量格式向量格式向量格式向量格式 Ex1:
>>x=[1 2 3]
x =
1 2 3
>>x=[pi/2 sqrt(2) 2]
x =
1.5708 1.4142 2.0000
(2) 向量之給法向量之給法向量之給法向量之給法
1. x=[1 2 3] %1×3向量
2. x=1:1:3 or x=1:3 %增量為1 x=起始值:增量:終值
Ex1: 0~πππ取十點π取十點取十點取十點
>>x=0:pi/9:pi
x =
Columns 1 through 7
0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 Columns 8 through 10
2.4435 2.7925 3.1416
Ex2: 0~πππ取十點π取十點取十點取十點
>>x=linspace(0,pi,10)
x =
Columns 1 through 7
0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 Columns 8 through 10
2.4435 2.7925 3.1416
NOTE: x=linspace(起始值, 終值, 點數)
= π π π π π π π π π
9 8 9
7 9
6 9
5 9
4 9
3 9
2 0 9
x
i.e.,
Ex3: 100~102 取取取取11點點點點
>>x=logspace(0,2,11)
x =
Columns 1 through 7
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 Columns 8 through 11
25.1189 39.8107 63.0957 100.0000
i.e., x=[ ] 100 100.2 100.4 100.6 100.8 101.0 ⋯ 102
(3) 如何取出向量各位置之值
如何取出向量各位置之值如何取出向量各位置之值如何取出向量各位置之值>>x=[1 2 sqrt(2)];
>>x(3)
ans =
1.4142
(4) 向量運算
向量運算向量運算向量運算>>x=[1 2 3];
>> y=cos(x) % note: y=向量向量向量向量 y =
0.5403 -0.4161 -0.9900
Ex: 理想氣體已知溫度理想氣體已知溫度理想氣體已知溫度理想氣體已知溫度tttt及壓力及壓力及壓力及壓力pppp莫耳數莫耳數莫耳數莫耳數nnnn求體求體求體求體 積
積 積
積。。。。當實驗數據溫度當實驗數據溫度當實驗數據溫度當實驗數據溫度、、、、壓力壓力壓力壓力。。。。數具有很多數具有很多數具有很多數具有很多 組時組時
組時組時,,,,可以向量處理可以向量處理可以向量處理可以向量處理。。。。
>> t=[100 200 300 400 500]; % temperature in K
>> p=[2 3 4 5 6]; % atm
>> n=1; % mole
>> r=8.314; % joule/K mol
>> v=n*r*t./p
v =
415.7000 554.2667 623.5500 665.1200 692.8333
NOTE: 除號除號除號除號/ 之前的點之前的點之前的點之前的點. 表示向量內各數值分別做除的計算表示向量內各數值分別做除的計算表示向量內各數值分別做除的計算表示向量內各數值分別做除的計算
(5) roots 解多項式
解多項式解多項式解多項式(向量的應用向量的應用向量的應用向量的應用)Usage: roots([ ])
Ex:
>>roots([2 3 0 1 0 1]) ans =
-1.7246
-0.3632 + 0.6597i -0.3632 - 0.6597i
0.4755 + 0.5339i 0.4755 - 0.5339i
a xn n + an−1x n−1+ +⋯ a x1 1 + =a0 0
an an−1 an−2 ⋯ a1 a0
2x5 + 3x4 + x2 + =1 0
(6) 向量合併
向量合併向量合併向量合併>>x=[1 2 3 3 2 1];
>>y=[4 5];
>>a=[x y]
a =
1 2 3 3 2 1 4 5
>>b=[a(1:2:5) 1 0 1]
b =
1 3 2 1 0 1
向量之運算 向量之運算 向量之運算 向量之運算 向量之運算 向量之運算向量之運算 向量之運算
(1)
向量之加減法向量之加減法向量之加減法向量之加減法Ex:
>>x=[1 2 3]
>>a=x+1 %向量與純量之加法向量與純量之加法向量與純量之加法向量與純量之加法 a =
2 3 4
>>1-x ans =
0 -1 -2
>>x=[1 2 3];
>>y=[4 5 6];
>>x+y %向量與向量之加法向量與向量之加法向量與向量之加法向量與向量之加法 ans =
5 7 9
>>z=[-1 -2];
>>x+z
??? Error using ==> +
Matrix dimensions must agree.
NOTE: x+z %向量大小不一致向量大小不一致向量大小不一致向量大小不一致,無法計算無法計算無法計算無法計算
(2) 向量的乘法
向量的乘法向量的乘法向量的乘法>>x=[1 2 3];
>>pi*x %純量乘向量
ans =
3.1416 6.2832 9.4248
>>x=[1 2 3];
>>y=[4 5 6];
>>x.*y %向量乘向量
ans =
4 10 18
(3) 向量的除法
向量的除法向量的除法向量的除法與乘法相同,其中x./y表 ,x.\y表示
>>x=[1 2 3];
>>y=[4 5 6];
>>x./y %向量除向量
ans =
0.2500 0.4000 0.5000
x y
y x
向量的轉置 向量的轉置 向量的轉置 向量的轉置 向量的轉置 向量的轉置向量的轉置 向量的轉置
Ex:
>>x=[1 2 3]; %列向量列向量列向量列向量
>>y=x' %行向量行向量行向量行向量
y = 1 2 3
Ex:
(1 2 3) 與(4 5 6) 內積=?>>x=[1 2 3];
>>y=[4 5 6];
>>x*y' % 內積內積內積內積
ans = 32
>>x.*y %向量向量向量向量 ans =
4 10 18
Ex:
>>x=[1+i 2 3-i];
>>x' %共軛轉置共軛轉置共軛轉置共軛轉置 ans =
1.0000 - 1.0000i 2.0000
3.0000 + 1.0000i
>>x.' %轉置但不取共軛轉置但不取共軛轉置但不取共軛轉置但不取共軛 ans =
1.0000 + 1.0000i 2.0000
3.0000 - 1.0000i
矩陣如何處理 矩陣如何處理 矩陣如何處理 矩陣如何處理 矩陣如何處理 矩陣如何處理矩陣如何處理 矩陣如何處理
(1)
如何輸入一個矩陣如何輸入一個矩陣如何輸入一個矩陣如何輸入一個矩陣Ex:
法一.
>>A=[ 1 2 3 4 5 6 7 8 9] ;
法二.
>>A=[1 2 3 ; 4 5 6 ; 7 8 9];
1 2 3 4 5 6 7 8 9
(2) 矩陣的擴增
矩陣的擴增矩陣的擴增矩陣的擴增>>A=[1 2 3 ; 4 5 6 ; 7 8 9]
>>R=[10 11 12]
A =
1 2 3 4 5 6 7 8 9
R =
10 11 12
>>B=[A;R]
>>R=[10 11 12]
B =
1 2 3 4 5 6 7 8 9 10 11 12
>>C=[A;R']
??? All rows in the bracketed expression must have the same number of columns.
(3)
矩陣的索引或下標矩陣的索引或下標矩陣的索引或下標矩陣的索引或下標• 矩陣 A 中,位於第 i 橫列、第 j 直行的元
素可表示為 A(i, j)
i 與 j 即是此元素的下標(Subscript)或索引
(Index)
• MATLAB 中,所有矩陣的內部表示法都是
以直行為主的一維向量
A(i, j) 和 A(i+(j-1)*m) 是完全一樣的~m為矩陣A的 列數
• 我們可以使用一維或二維下標來存取矩陣
(3)
矩陣的索引或下標矩陣的索引或下標矩陣的索引或下標矩陣的索引或下標Ex:
>>a=[1 2 ;3 4];
>>a(3,3)=1; % a在在在在(3,3)位置值是位置值是位置值是位置值是1
>>a
a =
1 2 0 3 4 0 0 0 1
(3) 如何從矩陣中取值或舉出一個子矩陣
如何從矩陣中取值或舉出一個子矩陣如何從矩陣中取值或舉出一個子矩陣如何從矩陣中取值或舉出一個子矩陣>>A=[1 2 3;4 5 6;7 8 9]
>>X=A(3,2) %X=A(row , column)
>>B=A(1:2,1:2)
>>C=A( : ,1:2) %C=A((((全取全取全取全取 , 第一行至第二行第一行至第二行第一行至第二行)第一行至第二行)))
>>D=A(2:3, : )
>>E=A(1:2,[1 3]) A =
1 2 3 4 5 6 7 8 9
X = 8 B =
1 2 4 5 C =
1 2 4 5 7 8
D =
4 5 6 7 8 9 E =
1 3 4 6
(4) 一些相關指令
一些相關指令一些相關指令一些相關指令flipud(a) %上下顛倒
fliplr(a) %左右顛倒
rot90(a) %旋轉90度(逆時針)
reshape(a,m,n) %重定矩陣行列數
diag(v) %取對角線元素所形成之向量
(5) 矩陣轉置
矩陣轉置矩陣轉置矩陣轉置B' 複數轉置為共軛轉置複數轉置為共軛轉置複數轉置為共軛轉置複數轉置為共軛轉置 , B.' 單純轉置單純轉置單純轉置單純轉置 1 2
A 3 4
=
1 3 A ' 2 4
=
1 1
B 1 3
i
i i
+
=
−
1 1
B' 1 3
i
i i
+
=
− −
1 1
B.' 3
i
i i i
−
= +
NOTE:取出矩陣大小為度取出矩陣大小為度取出矩陣大小為度取出矩陣大小為度 [r,c]=size(A)
r=列數列數列數列數 c=行數行數行數行數 n=length(v)
顯示向量之長度或矩陣之列數 顯示向量之長度或矩陣之列數 顯示向量之長度或矩陣之列數 顯示向量之長度或矩陣之列數
NOTE:將矩陣變為向量將矩陣變為向量將矩陣變為向量將矩陣變為向量
>>A=[1 2 ; 3 4];
>>B=A(:) B =
1 3 2 4
NOTE: 將矩陣的某行將矩陣的某行將矩陣的某行將矩陣的某行、、、、某列消除某列消除某列消除某列消除
Ex:
>>A=[1 2; 3 4; 5 6];
>>A(2,:)=[ ] A =
1 2 5 6
將第二列全部空白 將第二列全部空白將第二列全部空白
將第二列全部空白(即取消即取消即取消)即取消
1 2 A 3 4 5 6
=
1 2 A 5 6
=
矩陣運算相關指令 矩陣運算相關指令 矩陣運算相關指令 矩陣運算相關指令 矩陣運算相關指令 矩陣運算相關指令矩陣運算相關指令 矩陣運算相關指令
1. det(A) %行列式值
2. inv(A) %反矩陣
3. eig(A) %特徵值
4. rank(A) %秩、階數
5. cond(A) %2-norm條件數
6. poly(A) %特徵多項式
7. polyvalm(v,A) %矩陣多項式求值
8. expm(A) % 9. [r,c]=size(A)
10. n=length(v)
eA
一些特殊矩陣 一些特殊矩陣 一些特殊矩陣 一些特殊矩陣 一些特殊矩陣 一些特殊矩陣一些特殊矩陣 一些特殊矩陣
1. eye(n,m) %單位矩陣nxm
2. eye(n) %單位矩陣nxn
3. ones(n,m) %常數矩陣nxm全部為1
4. ones(n) %常數矩陣nxn全部為1
5. zeros(n,m) %常數矩陣nxm全部為0
6. zeros(n) %常數矩陣nxn全部為0
7. rand(n,m) %亂數所形成nxm的矩陣
8. randn(n) %亂數所形成nxn的矩陣
如何儲存變數 如何儲存變數 如何儲存變數 如何儲存變數 如何儲存變數 如何儲存變數如何儲存變數 如何儲存變數
? ?
• 使用使用使用使用 save 保存變數保存變數保存變數保存變數
save:將所有變數以二進位格式存至『matlab.mat』中 save fname:將所有變數存至『fname.mat』中
save fname X Y:將變數 X 與 Y 存至『fname.mat』中 save fname X -ascii:使用 8 位數文字格式將變數 X 存至
『fname』中
save fname X -ascii -double:使用 16 位數文字格式將變
數 X 存至『fname』中
如何載入數據檔 如何載入數據檔 如何載入數據檔 如何載入數據檔 如何載入數據檔 如何載入數據檔如何載入數據檔 如何載入數據檔
? ?
• 使用 load 載入變數:
load:由『matlab.mat』中載入所有變數
load fname:由『fname.mat』中載入所有變數
load fname X Y:由『fname.mat』中載入變數 X 與 Y load fname -ascii:由文字檔『fname』中載入變數 load fname.ext:由文字檔『fname.ext』中載入變數
•
變數命名方式:– binary (.mat):恢復變數原始名稱
– ASCII:變數以檔名來命名,檔名中所有數字換成底線;若檔 名開頭第一個字元為數字或底線,則在之前加上一個‘X’
找最大值 找最大值 找最大值 找最大值找最大值 找最大值 找最大值 找最大值
>>[m,index]=max(data)
• Note: m為每個為每個為每個column之最大值為每個 之最大值之最大值之最大值, index為為為為 最大值發生處
最大值發生處 最大值發生處 最大值發生處
m=15 9 23 index=2 2 4
data =
12 8 18 15 9 22 13 5 19 14 7 23 10 3 20
找最小值 找最小值 找最小值 找最小值找最小值 找最小值 找最小值 找最小值
>>[n,index]=min(data) n=10 3 18
index=5 5 1
求平均值 求平均值求平均值 求平均值求平均值 求平均值 求平均值
求平均值 和和和和和和和和
SUM SUM
>>avg=mean(data) avg= 12.8 6.4 20.4
>>s=sum(data) s= 64 32 102
NOTE:數據分析相關指令數據分析相關指令數據分析相關指令數據分析相關指令
corrcoef(x) cov(x)
cumprod(x) diff(x)
hist(x)
median(x)
prod(x) %連乘
sort(x) %排序 std(x) %標準差
如何做文字 如何做文字 如何做文字
如何做文字、、、、字串處理字串處理字串處理字串處理 如何做文字
如何做文字如何做文字
如何做文字、、、字串處理、字串處理字串處理字串處理
t=‘national taipei university';
u=t(17:26)
v=t(26:-1:17) u =
university v =
ytisrevinu
關係運算元 關係運算元 關係運算元 關係運算元 關係運算元 關係運算元關係運算元 關係運算元
• <
• <=
• >
• >=
• == equal to
• ~= not equal to
• 1真 0偽
Ex:
>>a=[1 2 3 4];
>>b=[5 6 7 2];
>>a>b ans =
0 0 0 1
>>tf=b-(a>2) tf =
5 6 6 1
Ex:
>>2>3 ans =
0
>>2<=3 ans =
1
>>2==3 ans =
0
Ex: Find out , x=-1:1/3:1
>>x=-1:1/3:1;
>>sin(x)./x
Warning: Divide by zero ans =
0.8415 0.9276 0.9816 NaN 0.9816 0.9276 0.8415
>>x==0 ans =
0 0 0 1 0 0 0
>>x=x+(x==0)*eps; NOTE: eps 內定精確度內定精確度內定精確度內定精確度 2.2204e-16
>>sin(x)./x ans =
0.8415 0.9276 0.9816 1.0000 0.9816 0.9276 0.8415
sin( )x x
邏輯運算元 邏輯運算元 邏輯運算元 邏輯運算元 邏輯運算元 邏輯運算元邏輯運算元 邏輯運算元
& and
| or
~ not
Ex:
>>a=1:9;
>>tf=a>4 tf =
0 0 0 0 1 1 1 1 1
>>tf=~(a>4) tf =
1 1 1 1 0 0 0 0 0
>>tf=(a>2)&(a<6) tf =
0 0 1 1 1 0 0 0 0