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