Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Matlab: 機率與統計的應用
Syllabus

Matlab Overview

Vectors & Matrices

M Files

流程控制

2d Graphics

機率與統計常用函式

除錯技巧 (optional)
MATLAB 外觀
MATLAB 外觀
●
四個小視窗,分別說明如下:
– 最左方是顯示目前目錄( current folder )的視窗。
– 最右方的視窗可以顯示工作空間( workspace )內的變數名稱及其 。值
– 中間上方的視窗是 MATLAB 編輯器( editor ),也具備除錯功能。
– 中間下方的視窗是 MATLAB 命令視窗( command window ),可讓使用者輸
入任何 MATLAB 指令。
常用指令
●
檢 版本:查 version 、 ver
●
測試電腦速度: bench
●
說明文件: doc, help
●
列出記憶體中所有變數: who
●
清除記憶空間之資料: clear
●
中止執行: ^c
●
執行範例程式: demo
●
離開 MATLAB : quit 、 exit
變數與基本運算
●
一般數學運算
– 3 + 4
– 3 ^ 3
– ...etc
●
變數
– X = 3 + 4 ^ 4 – 4
●
若不想讓 MATLAB 每次都顯示運算結果,只需在運算式最後加上分號即可。
– X = 3 + 4 ^ 4 – 4;
變數命名規則與使用
●
第一個字元必需是英文字母,後面可以接數字或是底線。
●
最多只能有 31 個字母, MATLAB 會忽略多餘字母。 
●
MATLAB 在使用變數時,不需預先經過變數宣告
( Variable Declaration )的程序,而且所有數 變數均以值
預設的 double 資料型態(佔用 8 個 bytes )來儲存。
註解
●
註解( Comments )為百分比符號( % )
– y = (5*2+3.5)/5; % 將運算結果儲存在變數 y ,但不
用顯示於螢幕
– z = y^2 % 將運算結果儲存在變數 z ,並顯示
於螢幕
矩陣的索引或下標
●
矩陣 A 中,位於第 i 橫列、第 j 直行的元素可表示為 A(i, j)
– i 與 j 即是此元素的下標( Subscript )或索引( Index )
●
MATLAB 中,所有矩陣的內部表示法都是以直行為主的一維向量
– A(i, j) 和 A(i+(j-1)*m) 是完全一樣的,其中 m 為矩陣 A 的列數
矩陣的索引或下標
向量與矩陣的處理
●
MATLAB 中的變數還可用來儲存向量( Vectors )及矩陣( Matrix ),以進
行各種運算,例如:
– s = [1 2 3 4]; t = 2*s+1;
●
取出向量中的一個元素或一部份來做運算,例如:
– t(3) = 2 % 將向量 t 的第三個元素更改為 2
– t(6) = 10 % 在向量 t 加入第六個元素,其 為值 10
– t(4) = [] % 將向量 t 的第四個元素刪除, [] 代表空集合
– t(2:4) – 1
向量與矩陣的處理
●
建立大小為 m×n 的矩陣 ( m 代表矩陣的橫列數, n 代表矩陣的直
行數),但必需在每一橫列結尾加上分號( ; ),例如:
– A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
– zeros(m, n) % 產生維度為 m×n ,構成元素全為 0 的矩陣
– ones(m, n) % 產生維度為 m×n ,構成元素全為 1 的矩陣
– rand(m, n) % 產生均 分 於勻 佈 [0, 1] 的亂數矩陣,其維度為 m×n
– Example: matrice_demo.m
程式流程控制

if

switch

while

for
if 條件敘述if { 條件敘述1 }
{ 指令敘述1 };
end
if { 條件敘述2 }
{ 指令敘述2 };
elseif{ 條件敘述3 }
{ 指令敘述3 };
else
{ 指令敘述 4};
end
Example: if_demo.m
switch 條件式
switch switch_expr
case case_expr,
statement, ..., statement
case {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
otherwise,
statement, ..., statement
end
Example: switch_demo.m
Loops
while expression
{statements};
end
for var = expression
{statements};
End
Example: while_demo.m, for_demo.m
Matlab 程式 案檔 (M files)

M files( *.m)

Scripts ( 底稿 )

Functions ( 函式 )

Edit

Open filename.m

Edit filename.m

Execute

Filename (without .m extension)
Example

TheScripts.m

FunFunc.m
– FunFunc 1
– FunFunc(1)
– FunFunc X
Scripts

包含 MATLAB 各種指令

指令視窗中直接輸入 名,即會執行 案內的所有指令,結檔 檔
果如同在 MATLAB 命令列逐一執行各列指令一樣。 

註解符號為 % 。快捷鍵: CTRL + r 與 CTRL + t 。

所產生的變數也都存放在 MATLAB 的基本工作空間
( Base Workspace )
Scripts 的優缺點

優點

適用於簡單但重複性高的程式碼

產生的變數保留在基本工作空間中
− 變數檢視及除錯容易

缺點

不支援輸入及輸出引數( Input/Output
Arguments )
• TheScripts2 arg1 arg2 ==> fail

產生的變數保留在基本工作空間中
− 變數互相覆蓋而造成程式錯誤
Functions

也是 M 檔案的一種

可接受輸入變數,並將結果送至輸出變數

運算過程產生的變數都存放在函數本身的工
作空間

不會和 MATLAB 基本工作空間的變數相互覆蓋

函數適用於大型程式碼

使程式碼模組化( Modularized )並易於維護與
改進
Subfunctions

M 檔案可以包含一個以上的函式

一個主要函式( Primary Function )

多個次要函式( Subfunctions )

次要函式只能被同檔案中的函式(主函或次函式)呼叫,但
不能被不同檔案的其他函式呼叫

主要函式與次要函式的位置

主要函式必需出現在最上方

其後接上任意數目的次要函式

次要函式的次序並無任何限制
函式語法
● function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
● Example: demo.m
Example

FunFunc.m

Which is false?

FunFunc(4)

[a b] = FunFunc(4)

[a b] = FunFunc(magic(3))

[a b] = FunFunc([1 2 3])
常用統計函式
●
平均值 mean
●
中間值 median
●
數眾 mode
●
最大值 max
●
最小值 min
●
Example: sta_demo.m
●
變異數 var
●
標準差 std
●
全距 range
●
相關係數 corrcoef
Probability Distributions
● Probability density functions
– Y = exppdf(X, mu)
– Y = normpdf(X, mu, sigma)
● Cumulative density functions
– Y = expcdf(X, mu)
– Y = normcdf(X, mu, sigma)
●
Example: pdis_demo.m
亂數產生器 (Random Number
Generators)
● Probability density functions (pdf)
●
均 分 亂數勻 佈 rand
●
常態分 亂數佈 randn
●
Poisson 亂數 poissrnd
●
常態亂數 (Normal (Gaussian)) normrnd
●
指數亂數 (Exponential) exprnd
●
通用指令 random
●
示範指令: randtool
●
Example: rnd_demo.m
基本的繪圖指令
●
最基本的繪圖指令: plot
●
對 x 座標及相對應的 y 座標進行描點作圖
– 範例: plotxy01.mx = linspace(0, 2*pi); % 在 0 到 2*pi 間,等分取 100 個點
y = sin(x); % 計算 x 的正弦函數值
plot(x, y); % 進行二維平面描點作圖
Plot 基本繪圖 -2
●
一次畫出多條曲線
– 將 x 及 y 座標依次送入 plot 指令
– 範例: plotxy02.m
x = linspace(0, 2*pi); % 在 0 到 2*pi 間,等分取 100 個點
plot(x, sin(x), x, cos(x), x, sin(x)+cos(x)); % 進行多條曲線描點作圖
Plot 基本繪圖 -3
●
可以使用不同的線標( Marker )來作圖
– 範例: plotxy03.m
x = linspace(0, 2*pi); % 在 0 到 2*pi 間,等分取 100 個點
plot(x, sin(x), 'o', x, cos(x), 'x', x, sin(x)+cos(x), '*');
Plot 基本繪圖 -4
●
只給定一個矩陣 y
– 對矩陣 y 的每一個行向量 (Column Vector) 作圖
– 範例: plot04.m
y = peaks; % 產生一個 49×49 的矩陣
plot(y); % 對矩陣 y 的每一個行向量作圖
Plot 基本繪圖 -5
●
x 和 y 都是矩陣
●
plot(x, y) 會取用 y 的每一個行向量和對應的 x 行向
量作圖
– 範例: plotxy05.m
x = peaks;
y = x'; % 求矩陣 x 的轉置矩陣 x'
plot(x, y); % 取用矩陣 y 的每一行向量,與對應矩陣 x
% 的每一個行向量作圖
提示
●
一般情況下, MATLAB 將矩陣視為行向量的集合
●
對只能處理向量的函數 (Ex : max 、 min 、 mean)
– 給定一個矩陣,函數會對矩陣的行向量一一進行處
理或運算
直方圖及 hist 指令
●
直方圖 (Histogram)
– 對大量的資料,顯示資料的分 情況和統計特性佈
– 若資料量 大,直方圖會逼近於這些資料的機率密夠
度函數( PDF, probability density function )
●
hist 指令
– 將資料依大小分成數堆,將每堆的個數畫出
直方圖範例
●
將 10000 個由 randn
產生的正規分 之亂數佈
分成 25 堆
– plotxy20.m
●
Result
% 產生 10000 個正規分 亂數佈
x = randn(10000, 1);
% 繪出直方圖,分成 25 堆
hist(x, 25);
整合範例
● normDemo.m
● normExample.m
除錯技巧 Debugger
 MATLAB 的除錯器 (Debugger) 功能包含:
 查詢每一個函數的工作空間( Workspace )
 顯示函數呼叫過程中的的堆疊( Function Call
Stack )
 一列一列地執行 M 檔案( Step-by-step
Execution )
 一般程式語言的錯誤分類
 語法錯誤
 邏輯錯誤
一般除錯技巧 (1/2)

一般偵測邏輯錯誤的方法:

去除運算式最尾端的分號,運算式執行的結果會印在
MATLAB 指令視窗中。

在程式中加入 keyboard 指令,可使程式執行至此處
即暫停,並顯示“ k >>” 的提示號( k 代表
keyboard ),以便查看或改變工作空間的任何變數,
若要繼續執行程式,可在 MATLAB 指令視窗下輸入“
return” 並按下 Enter 鍵。
•Example: debugger.m
一般除錯技巧 (2/2)

使用判斷式及 fprintf 指令印出變數的值。

在除錯一個單獨函數時,可在其第一列的函數宣告列
加上 % ,並定義輸入引數的值,此時我們就可以直接
以腳本( Scripts )的方式來執行此 M 檔案,並保留
所有變數於 MATLAB 工作空間之中。

使用 MATLAB 的除錯器。
以圖形介面進行程式除錯

進行除錯,可由指令列下達 edit 或 open 指令
,例如:
>> edit debugger
可開啟 MATLAB 除錯器(也是編輯器)
除錯指令與圖示
圖 示 MATLAB 對應指令 說 明
dbstop/dbclear 設立或移除中斷點
dbclear all 移除所有中斷點
dbstep 執行下一列程式碼
dbstep in 進入某函數程式碼
dbstep out 退出某函數程式碼
dbcont
繼續執行程式碼
dbquit 跳出除錯模式
設立中斷點 (1)

欲設立中斷點於檔案的第一列,可利用滑鼠將游
標置於該列並點取 圖示。 ( 紅點,代表中斷點
)
設立中斷點 (2)

若執行此函式,即可停於該中斷點:
>> debugger
( 綠色箭號顯示現在所在的位置 )
檢視變數或運算式
 中斷後可在指令列檢視各個變數的值,或選取工
具列上的 stack 下接式選單,以跳至不同的工
作空間。
 檢視變數或運算式有三 :
 將游標移到變數附近
 在指令列輸入變數或運算式。
 選取變數或運算式後,利用滑鼠右鍵點取,並選
擇“ Evaluate Selection” 。
逐步執行

若按下 圖示(或在指令列輸入 dbstep ),則綠
色箭號變成向下,代表即將離開此次函數。

再按 (或於指令列輸入 dbstep )數次,即可完
成整個函數的逐步執行。
不同版本的 MATLAB 圖示對應關係
第六 / 七版
圖示
第五版
圖示
MATLAB
對應指令
說 明
dbstop/dbclear
設立或移除中斷點
dbclear all
移除所有中斷點
dbstep
執行下一列程式碼
dbstep in
進入某函數程式碼
無
dbstep out
退出某函數程式碼
dbcont
繼續執行程式碼
dbquit
跳出除錯模式
無
dbtype
列出程式碼
Who am I
2006~2010 國科會計畫研究助理
2007/9~2011/10 校內助教
2011/12~2014/10 環隆科技股份有限公司 軟體二級工程師 ( 研發役 )
Blog:http://kusogameprogramming.blogspot.tw/
FaceBook:https://www.facebook.com/LiaoPingLun
Google+:https://plus.google.com/+PingLunLiao
Youtube:https://www.youtube.com/channel/UClnsiixSemOSeq2Nu-82RFQ
Email: pinglunliao at gmail dot com
LINE ID: Holan.Liao

More Related Content

Matlab 在機率與統計的應用