[go: up one dir, main page]

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

PDF
用十分鐘瞭解 機率、統計、還有R軟體
PDF
Recurrent Neural Network 遞迴式神經網路
PDF
Differential evolution optimization technique
PDF
An Overview of [Linux] Kernel Lock Improvements -- Linuxcon NA 2014
PDF
【DeepLearning研修】Transformerの基礎と応用 -- 第1回 Transformerの基本
PDF
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
PDF
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PDF
PRML 2.3節 - ガウス分布
用十分鐘瞭解 機率、統計、還有R軟體
Recurrent Neural Network 遞迴式神經網路
Differential evolution optimization technique
An Overview of [Linux] Kernel Lock Improvements -- Linuxcon NA 2014
【DeepLearning研修】Transformerの基礎と応用 -- 第1回 Transformerの基本
「3.1.2最小二乗法の幾何学」PRML勉強会4 @筑波大学 #prml学ぼう
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PRML 2.3節 - ガウス分布

What's hot (20)

PDF
強化學習 Reinforcement Learning
PPT
Loops in matlab
PDF
最適腕識別
PPTX
統計的学習の基礎_3章
PPTX
Machine Learning using Support Vector Machine
PDF
PRML輪読#5
PDF
Brief Introduction to Deep Learning + Solving XOR using ANNs
PDF
Fisher線形判別分析とFisher Weight Maps
PDF
シンギュラリティを知らずに機械学習を語るな
PDF
Calculus 1 Lecture Notes (Functions and Their Graphs)
PDF
Programming with matlab session 5 looping
PDF
カステラ本勉強会 第三回
PDF
03 convexfunctions
PPT
Rate of change and tangent lines
PDF
高速フーリエ変換
PDF
[Dl輪読会]bridging the gaps between residual learning, recurrent neural networks...
PPT
Randomized Algorithms
PPTX
クラシックな機械学習の入門  5. サポートベクターマシン
PDF
2章グラフ理論スピード入門
PPTX
Grid search (parameter tuning)
強化學習 Reinforcement Learning
Loops in matlab
最適腕識別
統計的学習の基礎_3章
Machine Learning using Support Vector Machine
PRML輪読#5
Brief Introduction to Deep Learning + Solving XOR using ANNs
Fisher線形判別分析とFisher Weight Maps
シンギュラリティを知らずに機械学習を語るな
Calculus 1 Lecture Notes (Functions and Their Graphs)
Programming with matlab session 5 looping
カステラ本勉強会 第三回
03 convexfunctions
Rate of change and tangent lines
高速フーリエ変換
[Dl輪読会]bridging the gaps between residual learning, recurrent neural networks...
Randomized Algorithms
クラシックな機械学習の入門  5. サポートベクターマシン
2章グラフ理論スピード入門
Grid search (parameter tuning)
Ad

Similar to Matlab 在機率與統計的應用 (20)

PPT
Lua 30+ Programming Skills and 20+ Optimization Tips
PDF
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
DOC
实验一 Mathematica软件简介
DOC
实验一 Mathematica软件简介
PPT
第六章 函數與巨集
PDF
Swift编程语言入门教程 中文版
PDF
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
PPTX
ncuma_pylab.pptx
PDF
Lambda演算与邱奇编码
PPT
C程式-函式與巨集
PDF
PDF
Ch10 教學
PPT
Effective_Vim
DOC
Free Marker中文文档
PPT
07 陣列與字串
PDF
Ppt 78-100
PPTX
Sicmutils 介紹:Scmutils 的 Clojure 版函式庫
PDF
Ppt 78-100
PDF
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
PDF
Python基本資料運算
Lua 30+ Programming Skills and 20+ Optimization Tips
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
实验一 Mathematica软件简介
实验一 Mathematica软件简介
第六章 函數與巨集
Swift编程语言入门教程 中文版
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
ncuma_pylab.pptx
Lambda演算与邱奇编码
C程式-函式與巨集
Ch10 教學
Effective_Vim
Free Marker中文文档
07 陣列與字串
Ppt 78-100
Sicmutils 介紹:Scmutils 的 Clojure 版函式庫
Ppt 78-100
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Python基本資料運算
Ad

More from PingLun Liao (20)

PDF
深入探討 C 語言
ODP
Git 程式碼版本控制軟體介紹
PDF
給沒有程式設計經驗的人
PDF
陣列與指標
PPT
Perl For Bioinformatics
ODP
C++ STL 概觀
ODP
C++ Function
ODP
C 檔案輸入與輸出
ODP
Win32 視窗程式設計基礎
ODP
Android 2D 遊戲設計基礎
ODP
Android 介面設計
ODP
Java 視窗程式設計
ODP
Java 網路程式
ODP
Android introduction
ODP
RESTful
ODP
Web service
ODP
How toprogram
ODP
Generic Programming
ODP
Object-Oriented Programming
ODP
Object-Based Programming Part II
深入探討 C 語言
Git 程式碼版本控制軟體介紹
給沒有程式設計經驗的人
陣列與指標
Perl For Bioinformatics
C++ STL 概觀
C++ Function
C 檔案輸入與輸出
Win32 視窗程式設計基礎
Android 2D 遊戲設計基礎
Android 介面設計
Java 視窗程式設計
Java 網路程式
Android introduction
RESTful
Web service
How toprogram
Generic Programming
Object-Oriented Programming
Object-Based Programming Part II

Matlab 在機率與統計的應用