Matlab投影片1

Download Report

Transcript Matlab投影片1

Matlab教學
Speaker:林昱志
Date:2012/10/18
1
Outline
•
•
•
•
MATLAB簡介
算術邏輯運算
Matlab陣列
Matlab矩陣
2
MATLAB簡介
• 由MathWorks公司於1984年推出的數學軟體。
• 名稱是由「矩陣實驗室」(MATrix
LABoratory)所合成。
• Matlab為各種動態系統模擬、數位訊號處理、
科學計算、科學目視等領域的標準程式語言。
• Matlab是一個計算核心,圍繞著這個計算核
心,有許多針對不同應用所開發的應用程式,
稱為工具箱(Toolboxes)。
3
MATLAB外觀
現階段的目錄
(Current Folder)
詳細資訊
(Details)
指令視窗
(Command Window)
工作空間變數列表
(Workspace Window)
指令歷史列表
(Command History)
4
MATLAB外觀
新的M檔案
(New M-file)
現在工作目錄
(Current Directory)
Command Window: 開啟或關閉「指令視窗」
Command History: 開啟或關閉「指令歷史列」
Current Folder : 開啟或關閉「MATLAB 瀏覽器」
Workspace Browser: 開啟或關閉「工作空間瀏覽器」
Product Help : 開啟或關閉「線上支援瀏覽器」
Function Brower: 開啟或關閉「函數瀏覽器」
5
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
6
算術邏輯運算
• 一般數學符號運算
– 在Matlab命令視窗(Command Window)內的提
示符號(>>)之後輸入運算式,並按入 Enter 鍵即
可。例如:
• >> (5*2+3.5)/5
• ans =2.7000
– 若不想讓Matlab每次都顯示運算結果,只需在運
算式最後加上分號(;)即可,例如:
• >> (5*2+3.5)/5;
7
算術邏輯運算
• 算術運算
符號
運算
Matlab形式
^
幂次運算:a b
a^b
*
乘法:a × b
a*b
/
右除法:a ÷ b
a/b
\
左除法:b ÷ a
a\b
+
加法:a + b
a+b
-
減法:a - b
a-b
8
算術邏輯運算
• 優先順序
優先權
運算
第一
括號,從內部開始運算。
第二
幂次運算,由左到右。
第三
乘法與除法,兩者優先全相同,由左到右。
第四
加法與減法,兩者優先全相同,由左到右。
9
隨堂演練
• 使用Matlab進行下列算式的運算。
10 18
2
a. 6  
 5  (9 )
13 5  7
1
4
b. 6  (35 )  14
0.35
10
變數設定與命名規則
• 把計算的結果設定給一個變數(variable),以方便後
•
•
•
續之使用。(ex: var1 = 12/64 ;)
第一個字母必需是英文字母,字母間不可留空格。
最多只能有31個字母,Matlab會忽略多餘字母。
Matlab在使用變數時,不需預先經過變數宣告
(Variable Declaration)的程序,而且所有數值變數
均以預設的double資料型式儲存。
11
Example
•
•
•
•
•
>> a = 1;
>> b = 2;
>> A = [a b; 3 4]
>> class(A)
>> size(A)
12
Workspace Window
• Workspace Window之變數
變數名稱
陣列大小
變數類型
13
Working with Workspace
14
Matlab所提供之資料型態
• Matlab所提供之資料型態
陣列
數值形態
字元
Char
邏輯
Logical
多值
Cell
結構
Structure
Function
handle
n-bit數值
一般數值
int8, uint8
Double
Single
int16, uint16
int32, uint32
int64, uint64
15
運算子
• Matlab中「=」運算子和數學中等號的意義是不同的。
• 符號「=」在Matlab中叫做指派(assignment)或者
•
•
•
取代(replacement)。
當鍵入x=3時,即是告訴Matlab將3指派給變數x。
當鍵入x=x+2時,這告訴Matlab在目前的x的值再加
上2以取代目前x的值,此時新的x值為5。
在左手邊(left-hand)的變數將會被右手邊(righthand)所產生的新值取代掉。
– 依照以上的限制式,6=x或x+18=20是不被允許的。
16
工作區的對話指令
指令
說明
clc
清除命令視窗。
clear
清除工作區內所有的變數。
clear var
清除工作區內的變數var。
exist(‘name’)
決定是否有任一個檔案或者變數以name存在。
who
查詢於目前的工作區內,有哪些變數在使用。
whos
同who,但會列出每一個變數詳細的資料。
whos var
查詢變數var的詳細資訊。
:
冒號:產生固定間隔的陣列。
,
逗號:分開矩陣中的元素。
;
分號:制止螢幕得顯示;同時也用於顯示新的一列。
…
省略符號:接續成同一行。
17
變數的設定與命名規則
• Matlab定義了一些常數,以方便輸入特定的
數值,這些常數稱為永久常數(permanent
constant)。
永久常數
說明
ans
儲存最近一次答案的暫存變數。
pi
圓周率,π=3.14159265358979。
Inf或INF
無限大(∞)。
i, j
虛數(imaginary numbers)。
NAN或nan
不存在的數。
realmax
系統所能表示得最大的數。
realmin
系統所能表示得最小的數。
18
隨堂演練
• 高度h及半徑r的圓柱體體積為V=πr2h。
• 一個特殊的圓柱型水槽高度為15m且半徑為
8m,現在我們要建造另一個容量多20%,但
高度維持一樣的水槽,請問半徑要多少?
r=?m
r=8m
V : 20% up
h = 15 m
h = 15 m
19
隨堂演練
• 高度h及半徑r的圓柱體體積為V=πr2h。
• 一個特殊的圓柱型水槽高度為15m且半徑為
8m,現在我們要建造另一個容量多20%,但
高度維持一樣的水槽,請問半徑要多少?
r=?m
r=8m
V : 20% up
h = 15 m
h = 15 m
r=8;
指派半徑及高度給r及h
優先權注意,同:V = pi*(r^2)*h;
舊的體積V被新的體積V取代
h = 15 ;
V = pi*r^2*h;
V = V + 0.2*V;
r = (V/(pi*h))^0.5
20
一些常用的數學函數
• 常用的數學函數
函數
Matlab語法
ex
exp(x)
ln(x)
log(x)
log10x
log10(x)
cos x
cos(x)
sin x
sin(x)
tan x
tan(x)
21
輔助函數
• Matlab之輔助函數
指令
說明
lookfor topic
其對應的敘述中具有特定關鍵字topic的所有函數,顯
示函簡短敘述與命令視窗中。
help
顯示所有函數的目錄清單,以及各函數類別所代表之
意義。
help function
在命令視窗中顯示特定函數function之敘述。
doc
於輔助瀏覽器中顯示說明文件之起始頁。
doc function
顯示Matlab函數function的文件。
lookfor mean
→
想要找到一個求平均值的函數
help mean
→
使用方法的查詢
doc mean
更詳盡的使用方法
22
Matlab陣列
• 要熟悉Matlab的語法,首先必須先學習如何操作
•
陣列裡的元素。
定義
– 純量:單一數值。
• Scalar = 4 ;
– 向量:一維之陣列,包含行向列以及列向量。
• Cvector = [4;5;6] ;
• Rvector = [7,8,9] ;
– 矩陣:二維之陣列,陣列中最常使用到之形式。
• Matrix = [5 6 ; 7 8] ;
– 多維陣列:對於維度(Dimensions)超過1的陣列稱之。
• 陣列包含上敘之純量、向量以及矩陣。
23
Example
•
•
•
•
•
•
>> Rector1 = [7,8,9]
>> Rector2 = [7 8 9]
>> Rector1(1)
>> Rector2(2)
>> Vector1 = [4;5;6]
>> Vector1(3)
Rvector
7
8
Rvector(i)
9
1
2
Vector
Vector(i)
4
1
5
2
6
3
3
24
共軛轉置與轉置
• 共軛轉置:『’』
Rector1
– >> Rector3 = Rector1’
• 轉置:『.’』
Vector2
7
7
– >> Vector2 = Rector1.’
Rector3
8
9
8
9
Vector1
4
5
4
5
6
6
25
向量相關指令函數
• 建立向量之指令函數
指令與函數
說明
a:b
從a到b,間隔為1,建立一列向量。
a : step : b
從a到b,間隔為step,建立一列向量。
linspace(a, b)
從a到b,建立具有100個元素的列向量。
linspace(a, b, n) 從a到b,建立具有n個元素的列向量。
•
•
•
•
>> Vector1 = 1:4
>> Vector2 = uint8(1:4)
>> Vector3 = [1:0.5:4]
>> Vector4 = linspace(1,5,10)
26
向量相關指令函數
• 查詢陣列相關資訊函數
•
•
•
•
函數
說明
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)
27
向量相關指令函數
• 基本向量處理函數
函數
說明
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)。
28
隨堂演練
• 建立一列向量X,其元素由0到10,間距為0.5,
並將向量裡的元素由大到小排列、計算其總和
(sum)、維度(size)以及元素個數(numel)。
29
隨堂演練
• 建立一列向量X,其元素由0到10,間距為0.5,
並將向量裡的元素由大到小排列、計算其總和
(sum)、維度(size)以及元素個數(numel)。
– >> x = 0:0.5:10 ;
– >> sum(x) ;
– >> size(x) ;
– >> numel(x) ;
– >> sort(x,’descend’);
30
Matlab矩陣
• Matrix1 = [5 6 ; 7 8]
• Matrix1(3)
Matrix
Matrix(i)
5
6
1
3
7
8
2
4
• 按照列以及行之順序。
• A(i,j)=A(列之順序,行之順序)
• Matrix1(2,1)
Matrix(i,j)
Matrix
j
5
6
7
8
(1,1)
(1,2)
(2,1)
(2,2)
i
31
Matlab矩陣
• A= [1:1:4; 5:2:11; 12:3:21]
• 冒號(:)
– 代表一整列或一整行
– A(:,3) (取出矩陣 A 的第三個直行)
• end
– 這個保留字來代表某一維度的最大值
– A(end,end) (矩陣 A 的右下角元素)
– A(:,end) (矩陣 A 的最後一個直行)
32
Matlab矩陣
• A= [1:1:4; 5:2:11; 12:3:21]
• 可以直接刪除矩陣的某一整個橫列或直行
– A(2,:) = [] (刪除A矩陣的第二列)
– A(:,[2 3]) = [] (刪除 A 矩陣的第二、三直行)
• 可以取代矩陣的某一整個橫列或直行
– A(2,:) = [0] (取代A矩陣的第二列)
– A(:,[2 3]) = [1] (取代A 矩陣的第二、三直行)
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
隨堂演練
• 產生維度為3×3的魔方陣,計算其做最大值
(max),以及最小值(min)。
35
隨堂演練
• 產生維度為3×3的魔方陣,計算其做最大值
(max),以及最小值(min)。
max
max
8
Matrix = magic(3)
8
1
6
3
5
7
4
9
2
9
7
min
9
min
3
1
2
1
• Matlab函數運算時,會對行向量先進行運算。
36
Matlab矩陣運算
• 函數max以及min當有兩個接收變數時可以知
道最大元素所在之index,用法如下:
– [ max_val , max_index ] = max(x)
– [ min_val , min_index ] = min(x)
37
Example
• 利用函式max或是min找出magic(3)中最大元
素之二維索引。
– [max_val1, index] = max( Matrix ) ;
Matrix = magic( 3 ) ;
8
1
6
3
5
7
4
9
2
max
index
max_val1
8
9
7
1
3
2
38
Example
• 利用函式max或是min找出magic(3)中最大元
素之二維索引。
– [max_val , c_index] = max( max_val1 ) ;
– r_index= index( c_index ) ;
– Max = Matrix( r_index , c_index)
index
max_val1
8
9
7
1
3
max
2
index(c_index)
max_val
c_index
r_index
9
2
3
39
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)。
40
Matlab矩陣運算
• 陣列的點運算
指令
說明
A.*B
將矩陣A內的元素乘上矩陣B內相同位置得元素。
A.^n
將矩陣A內的每個元素同乘以其n次方。
A.’
計算矩陣A的轉置(transpose)。
A./B
將矩陣A裡面的每一個元素除以B裡面每一個相對應的元素。
A.\B
將矩陣B裡面的每一個元素除以A裡面每一個相對應的元素。
41
Example
•
•
•
•
•
•
>> A = 1:3, B = 4:6
>> A + B, A - B, A + 1, B - 2
>> A' * B, A * B', A * 2, A * B
>> A .* B, A' .* B', A .* 2, A' .* B
>> A ./ B, A' ./ B', A ./ 2, A / 2
>> A .^ B, (A') .^ (B'), A .^ 2, 2 .^ B
• >> A = 5, B = [1:3; 4:6; 7:9]
• >> B <= A, B > 5,
42
二維陣列
• 二維陣列又簡稱矩陣,具有兩個維度
– 「橫列」(Row)
– 「直行」(Column)
j (Column)
i (Row)
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
(3,1)
(3,2)
(3,3)
(3,4)
(4,1)
(4,2)
(4,3)
(4,4)
43
三維陣列
• 將兩個二維陣列疊在一起,就形成第三個維度,
此第三個維度稱為「頁」(Page)。
(1,1,n) (1,2,n) (1,3,n) (1,4,n)
k (page)
(2,1,n) (2,2,n) (2,3,n) (2,4,n)
j (Column)
(3,1,n) (3,2,n) (3,3,n) (3,4,n)
(4,1,n) (4,2,n) (4,3,n) (4,4,n)
i (Row)
(1,1,2) (1,2,2) (1,3,2) (1,4,2)
(2,1,2) (2,2,2) (2,3,2) (2,4,2)
(1,1,1) (1,2,1) (1,3,1) (1,4,1)
(3,1,2) (3,2,2) (3,3,2) (3,4,2)
(2,1,1) (2,2,1) (2,3,1) (2,4,1)
(4,1,2) (4,2,2) (4,3,2) (4,4,2)
(3,1,1) (3,2,1) (3,3,1) (3,4,1)
(4,1,1) (4,2,1) (4,3,1) (4,4,1)
44
四維陣列
• 四維陣列的第四個維度可視為「箱」(Box),
而每個箱是由一個三維陣列所組成,其定址方
式為(列,行,頁,箱)。
– 一個 2×2×3×4 的四維陣列,可表示成4個箱,每
個箱都由一個 2×2×3 的三維陣列所組成,圖示如
下:
A(:,:,:,1)
A(:,:,:,2)
A(:,:,:,3)
A(:,:,:,4)
45