Transcript Matlab

Matlab教學
Speaker:陳珮妮
Date:2013/03/14
1
Outline
 MATLAB簡介
 算術邏輯運算
 Matlab陣列
 Matlab矩陣
2
MATLAB簡介
 MATLAB名稱是由「矩陣實驗室」﹙MATrix LABoratory)所
合成,是由MathWorks公司於1984年推出的數學軟體。
 MATLAB為各種動態系統模擬、數位訊號處理、科學計算、
科學目視等領域的標準程式語言。
 MATLAB 的許多的核心計算技術原先是源自於 EISPACK及
LINPACK,目前則是以最新的LAPACK為計算基礎。
3
MATLAB簡介
 MATLAB早在 1978 年即已現身,當時是用 Fortran 撰
寫的免費軟體,其作者是當時任教於新墨西哥大學的
Cleve Moler 教授。
 The Origins of MATLAB
The authors of LINPACK:
Jack Dongarra, Cleve Moler, Pete Stewart, and Jim Bunch in 1978.
Cleve Moler
MATLAB簡介
 Jack Little(又稱為 John Little)將 MATLAB 以C語言重
寫,並於 1984 年成立 MathWorks公司,首次推出
MATLAB 商用版。
 MathWorks在 Newsgroup 上進行對使用者的技術指導,
在 WWW 興起之後,就提供各項技術支援與搜尋功能,
並在內聯網(Intranet)方面,以 Web 與資料庫的整
合來進行軟體 bug 的追蹤、修復與管理。
Jack Little
MATLAB簡介
 MATLAB 早期以矩陣運算為主,第 4 版推出握把式圖形
(Handle Graphics),第 5 版中允許使用者建立許多不同的
資料型態,(如多維陣列、結構陣列、異質陣列等)。
 MATLAB 是一個計算核心,圍繞著這個計算核心,有許多針
對不同應用所開發的應用程式,稱為工具箱(Toolboxes)。
Simulink 及 Stateflow
 Simulink 專用於連續或離散時間的動態系統模擬。 Simulink
是一個模擬核心,圍繞著這個核心所開發的應用程式稱為
方塊集(Blocksets)。
 Stateflow 則用於模擬有限狀態機(Finite State Machines)或
事件驅動系統(Event-driven Systems)。
MATLAB、Simulink 及 Stateflow
 MATLAB、Simulink 及 Stateflow三者的關係:
Stateflow
Blocksets
Toolboxes
Simulink
MATLAB
Coder
RTW
Compiler
 由現有 Simulink 與 Stateflow 的 C 程式碼自動產生功能,以
及定點運算方塊集(Fixed-point Blockset)與 C 程式碼至
VHDL 的自動轉換功能,可看出「高階的系統模擬」或「低
階的晶片演算法設計」,都可用 MATLAB/Simulink/Stateflow
及相關的工具箱來達成。
8
工作空間變數列表
(Workspace Window)
現階段的目錄
(Current Folder)
指令視窗
(Command Window)
指令歷史列表
(Command History)
9
新的M檔案
(New M-file)
現在工作目錄
(Current Directory)
0 Command Window: 開啟或關閉「指令視窗」
1 Command History: 開啟或關閉「指令歷史列」
2 Current Folder : 開啟或關閉「MATLAB 瀏覽器」
3 Workspace Browser: 開啟或關閉「工作空間瀏覽器」
Product Help : 開啟或關閉「線上支援瀏覽器」
Function Brower: 開啟或關閉「函數瀏覽器」
10
Getting Help
 Menu Help > Product Help to open the Help Browser
 Ctrl+F1 for the Function Hint
 F1 to get the Help on Selection
 Shift+F1 for the Function Browser
11
算術邏輯運算
 一般數學符號運算
 在Matlab命令視窗(Command Window)內的提示符號(>>)
之後輸入運算式,並按入 Enter 鍵即可。例如:
>> (5*2+3.5)/5
ans =2.7000
 若不想讓Matlab每次都顯示運算結果,只需在運算式最
後加上分號(;)即可,例如:
>> (5*2+3.5)/5;
12
算術邏輯運算
 算術運算
符號
^
運算
幂次運算:a b
Matlab形式
a^b
*
/
\
乘法:a × b
右除法:a ÷ b
左除法:b ÷ a
a*b
a/b
a\b
+
加法:a + b
a+b
-
減法:a - b
a-b
13
算術邏輯運算
 優先順序
優先權 運算
第一
括號,從內部開始運算。
第二
幂次運算,由左到右。
第三
第四
乘法與除法,兩者優先全相同,由左到右。
加法與減法,兩者優先全相同,由左到右。
14
變數設定與命名規則
 變數名稱小於等於變數名稱小於等於19字元
 第一字元不能為數字
 字元大小寫表示不同意義
 Ex1: c123 (o)
4c123 (X)
c_123 (o)
c-123 (X)
 Matlab在使用變數時,不需預先經過變數宣告(Variable
Declaration)的程序,而且所有數值變數均以預設的double資
料型式儲存。
15
隨堂演練
 五隻雞和二隻兔,共幾隻腳?
>>chicken=5;
>>rabbit=2;
>>legs=chicken*2+rabbit*4
 執行結果
legs =
18
16
隨堂演練
 使用Matlab進行下列算式的運算。
10 18
a. 6  
 5  (9 2 )
13 5  7
1
4
b. 6  (35 )  14
0.35
17
Workspace Window
 Workspace Window之變數
變數名稱
陣列大小
變數類型
18
Working with Workspace
19
Matlab所提供之資料型態
 Matlab所提供之資料型態
陣列
數值形態
字元
Char
邏輯
Logical
多值
Cell
結構
Structure
Function
handle
n-bit數值
一般數值
int8, uint8
Double
Single
int16, uint16
int32, uint32
int64, uint64
20
工作區的對話指令
指令
說明
clc
清除命令視窗。
clear
清除工作區內所有的變數。
clear var
清除工作區內的變數var。
exist(‘name’)
決定是否有任一個檔案或者變數以name存在。
who
查詢於目前的工作區內,有哪些變數在使用。
whos
同who,但會列出每一個變數詳細的資料。
whos var
查詢變數var的詳細資訊。
:
冒號:產生固定間隔的陣列。
,
逗號:分開矩陣中的元素。
;
分號:制止螢幕得顯示;同時也用於顯示新的一列。
…
省略符號:接續成同一行。
21
變數的設定與命名規則
 Matlab定義了一些常數,以方便輸入特定的數值,這些常
數稱為永久常數(permanent constant)。
永久常數
說明
ans
儲存最近一次答案的暫存變數。
pi
圓周率,π=3.14159265358979。
Inf或INF
無限大(∞)。
i, j
虛數(imaginary numbers)。
NAN或nan
不存在的數。
realmax
系統所能表示得最大的數。
realmin
系統所能表示得最小的數。
22
常用數學函數
 MATLAB 是一個科學計算軟體,因此可以支援很多常用到的
數學函數




y = abs(x)
y = sin(x)
y = exp(x)
y = log(x)
 取 x 的絕對值
 取 x 的正弦值
 自然指數 exp(x)
 自然對數 ln(x)
 MATLAB 也支援複數運算,通常以 i 或 j 代表單位虛數
輔助函數
指令
說明
 Matlab之輔助函數
lookfor topic
其對應的敘述中具有特定關鍵字topic的所有函數,顯
示函簡短敘述與命令視窗中。
help
顯示所有函數的目錄清單,以及各函數類別所代表之
意義。
help function
在命令視窗中顯示特定函數function之敘述。
doc
於輔助瀏覽器中顯示說明文件之起始頁。
doc function
顯示Matlab函數function的文件。
lookfor mean
→
想要找到一個求平均值的函數
help mean
使用方法的查詢
→
doc mean
更詳盡的使用方法
24
隨堂演練
 求解𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0
>> 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
25
Matlab陣列
 定義
 純量:單一數值。
Scalar = 4 ;
 向量:一維之陣列,包含行向列以及列向量。
Cvector = [4;5;6] ;
Rvector = [7,8,9] ;
 矩陣:二維之陣列,陣列中最常使用到之形式。
Matrix = [5 6 ; 7 8] ;
 多維陣列:對於維度(Dimensions)超過1的陣列稱之。
 陣列包含上敘之純量、向量以及矩陣。
26
向量
 向量格式
>>x=[1 2 3]
 執行結果
x=
123
>>x=[pi/2 sqrt(2) 2]
 執行結果
x=
1.5708 1.4142 2.0000
27
向量之給法
 x=[1 2 3] %1×3向量
 x=1:1:3 or x=1:3 %增量為1
 x=起始值:增量:終值
 Ex1:0~π取十點
>>x=0:pi/9:pi
 執行結果
x=
0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 2.4435 2.7925 3.1416
28
向量
 如何取出向量各位置之值
>>x=[1 2 sqrt(2)];
>>x(3)
ans =
1.4142
 向量運算
>>x=[1 2 3];
>> y=cos(x) % note: y=向量
y=
0.5403 -0.4161 -0.9900
29
隨堂練習
 解多項式2𝑥 5 + 3𝑥 4 + 𝑥 2 + 1 = 0
>>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
30
隨堂練習

向量合併
>>x=[1 2 3 3 2 1];
>>y=[4 5];
>>a=[x y]

執行結果
a=
12332145
>>b=[a(1:2:5) 1 0 1]
a(起始值:增量:終值)

執行結果
b=
132101
31
向量相關指令函數
 查詢陣列相關資訊函數
函數
說明
size(m)
查詢矩陣m之維度(dimensions) 。
length(m)
查詢矩陣m的行數。
ndims(m)
查詢矩陣m的維數。(number of dimensions)
numel(m)
查詢矩陣m的元數個數。(number of elements)
>> size(Vector3)
>> length(Vector3)
>> ndims(Vector3)
>> numel(Vector3)
32
向量相關指令函數
 基本向量處理函數
函數
說明
sum(v)
計算向量v之總和。
prod(v)
計算向量v之乘積。
max(v)
計算向量v之最大值。
min(v)
計算向量v之最小值。
sort(v)
將向量v裡的元素由小到大排列。
sort(v, ’descend’)
將向量v裡的元素由大到小排列。
cumsum(v)
計算向量v的累加(cumulative sum)。
cumprod(v)
計算向量v的累乘(cumulative product)。
33
Matlab矩陣
 產生各種特殊用途矩陣之指令 :
指令
說明
zeros(m,n)
產生維度為m×n,構成元素全為0的矩陣 。
ones(m,n)
產生維度為m×n,構成元素全為1的矩陣。
eye(n)
產生維度為n×n,對角線的各元素全為1,其他各元素全為0
的單位矩陣。
pascal(m,n)
產生維度為m×n的Pascal矩陣。
vander(m,n)
產生維度為m×n的Vandermonde矩陣。
hilb(n)
產生維度為n×n的Hilbert 矩陣。
rand(m,n)
產生[0, 1] 均勻分佈的亂數矩陣,其維度為 m×n。
randn(m,n)
產生µ =0,σ=1的正規分佈亂數矩陣,其維度為 m×n。
magic(n)
產生維度為n×n的魔方陣,其各個直行、橫列及兩對角線的
元素和都相等。
34
Matlab矩陣運算
 矩陣的數學運算
矩陣運算
說明
A+B
矩陣A加上矩陣B
A-B
矩陣A減去矩陣B
A*B
矩陣A乘上矩陣B
A^n
矩陣A的n次方,即矩陣A連乘n次,其中A必須為方陣。
A’
矩陣A的共軛轉置。
A\B
A左除B,相當於把A的反矩陣乘以B,即A-1B。
inv(A)
計算矩陣A的反函數(inverse)。
det(A)
計算矩陣A的行列式值(determinate)。
35
Matlab矩陣運算
 陣列的點運算
指令
說明
A.*B
將矩陣A內的元素乘上矩陣B內相同位置得元素。
A.^n
將矩陣A內的每個元素同乘以其n次方。
A.’
計算矩陣A的轉置(transpose)。
A./B
將矩陣A裡面的每一個元素除以B裡面每一個相對應的元素。
A.\B
將矩陣B裡面的每一個元素除以A裡面每一個相對應的元素。
36
矩陣
 如何輸入一個矩陣
 法一
>>A=[ 1 2 3
456
7 8 9]
 法二
>>A=[1 2 3 ; 4 5 6 ; 7 8 9]
37
矩陣的索引或下標
38
矩陣的索引或下標
 可以使用矩陣下標來進行矩陣的索引(Indexing)
 A(4:5,2:3) -取出矩陣 A 的 第四、五 橫列與 二、三 直行所形成的部份
矩陣
 A([9 14; 10 15]) - 用一維下標的方式來達到同樣目的
 用冒號(:), 取出一整列或一整行
 A(:, 5) -取出矩陣 A 的第五個直行
 用 end 這個保留字來代表某一維度的最大值
 A(:, end) - 矩陣 A 的最後一個直行
 可以直接刪除矩陣的某一整個橫列或直行
 A(2, :) = [] – 刪除A矩陣的第二列
 A(:, [2 4 5]) = [] - 刪除 A 矩陣的第二、四、五直行
矩陣的索引或下標
 可把矩陣 A 和其倒數「並排」起來,得到新矩陣 B
 B = [A 1./A]
% 1./A 是矩陣 A 每個元素的倒數
 用 diag 指令取出矩陣的對角線各元素




D = diag(B)% 取出矩陣 B 的對角線元素
D = diag(v) % 產生以向量 v 為主對角線的方陣
E = A*diag(v)
% 將矩陣A的每個行向量乘上向量v的元素
E = diag(v)*A
% 將矩陣A的每個列向量乘上向量v的元素
 用 reshape 指令來改變一個矩陣的維度
 B = B(1:4, 1:4);
 C = reshape(B, 2, 8) % 將矩陣 B 排成 2×8 的新矩陣 C
 MATLAB 會先將矩陣 B 排成一個行向量(即 MATLAB 內部的矩陣表示
法),再將此行向量塞成 2×8 的新矩陣
隨堂練習
>>a=[1 2 ;3 4];
>>a(3,3)=1; % a在(3,3)位置值是1
>>a
 執行結果
a=
120
340
001
41
矩陣
 如何從矩陣中取值或舉出一個子矩陣
>>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])
42
隨堂練習
 矩陣相加
A = [12 34 56 20];
B = [1 3 2 4];
C=A+B
 執行結果
C=
13 37 58 24
43
隨堂練習
 矩陣相乘
A = [1; 2];
B = [3, 4, 5];
C = A*B
 執行結果
C=
3
4
5
6
8 10
44
三維陣列
 將兩個矩陣疊在一起,就形成第三個維度,此第三個維度可稱為「頁」
(Page),圖示如下:
頁
列
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
(3,1)
(3,2)
(3,3)
(3,4)
行
(3,4)
頁
三維陣列
 三維陣列可對應至一個 X - Y - Z 三維立體座標,圖示如下:
Y(行)
X(列)
Z(頁)
三維陣列
 三維陣列定址,可以 (列,行,頁) 定之。
 以維度為 3×4×2 的三維陣列為例,其定址方式可圖示如下:
 陣列 A 是三維陣列,其中 A(:,:,1)代表第一頁的二維陣列,A(:,:,2)
代表第二頁的二維陣列。
四維陣列
 四維陣列的第四個維度可視為「箱」(Box),而每個箱是由一
個三維陣列所組成,其定址方式為 (列,行,頁,箱)。
 例如:一個 2×2×3×5 的四維陣列,可表示成 5 個箱,每個箱都由一個
2×2×3 的三維陣列所組成,圖示如下:
 依此可類推至 n 維陣列,n 為任意自然數。