590 likes | 1.52k Views
Matlab 教學. Speaker : 陳珮妮 Date : 2013/03/14. Outline. MATLAB 簡介 算術 邏輯運算 Matlab 陣列 Matlab 矩陣. MATLAB 簡介. MATLAB 名稱是由「矩陣實驗室 」 ﹙ MAT rix LAB oratory )所合成,是由 MathWorks 公司於 1984 年推出的數學軟體 。 MATLAB 為各種動態系統模擬、數位訊號處理、科學計算、科學目視等領域的標準程式語言。
E N D
Matlab教學 Speaker:陳珮妮 Date:2013/03/14
Outline • MATLAB簡介 • 算術邏輯運算 • Matlab陣列 • Matlab矩陣
MATLAB簡介 • MATLAB名稱是由「矩陣實驗室」﹙MATrixLABoratory)所合成,是由MathWorks公司於1984年推出的數學軟體。 • MATLAB為各種動態系統模擬、數位訊號處理、科學計算、科學目視等領域的標準程式語言。 • MATLAB 的許多的核心計算技術原先是源自於 EISPACK及LINPACK,目前則是以最新的LAPACK為計算基礎。
MATLAB簡介 • MATLAB早在 1978 年即已現身,當時是用 Fortran 撰寫的免費軟體,其作者是當時任教於新墨西哥大學的 Cleve Moler教授。 • The Origins of MATLAB Cleve Moler The authors of LINPACK: Jack Dongarra, Cleve Moler, Pete Stewart, and Jim Bunch in 1978.
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)。
Stateflow Coder Simulink Blocksets RTW MATLAB Toolboxes Compiler MATLAB、Simulink 及 Stateflow • MATLAB、Simulink 及 Stateflow三者的關係: • 由現有 Simulink 與 Stateflow的 C 程式碼自動產生功能,以及定點運算方塊集(Fixed-point Blockset)與 C 程式碼至 VHDL 的自動轉換功能,可看出「高階的系統模擬」或「低階的晶片演算法設計」,都可用 MATLAB/Simulink/Stateflow及相關的工具箱來達成。
指令視窗 (Command Window) 工作空間變數列表 (Workspace Window) 現階段的目錄 (Current Folder) 指令歷史列表 (Command History)
現在工作目錄 (Current Directory) 新的M檔案 (New M-file) 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 openthe Help Browser • Ctrl+F1 for the Function Hint • F1 to get the Help on Selection • Shift+F1 for the Function Browser
算術邏輯運算 • 一般數學符號運算 • 在Matlab命令視窗(Command Window)內的提示符號(>>)之後輸入運算式,並按入 Enter 鍵即可。例如: • >> (5*2+3.5)/5 • ans =2.7000 • 若不想讓Matlab每次都顯示運算結果,只需在運算式最後加上分號(;)即可,例如: • >> (5*2+3.5)/5;
算術邏輯運算 • 算術運算
算術邏輯運算 • 優先順序
變數設定與命名規則 • 變數名稱小於等於變數名稱小於等於19字元 • 第一字元不能為數字 • 字元大小寫表示不同意義 • Ex1: c123 (o) 4c123 (X) c_123 (o) c-123 (X) • Matlab在使用變數時,不需預先經過變數宣告(VariableDeclaration)的程序,而且所有數值變數均以預設的double資料型式儲存。
隨堂演練 • 五隻雞和二隻兔,共幾隻腳? >>chicken=5; >>rabbit=2; >>legs=chicken*2+rabbit*4 • 執行結果 legs = 18
隨堂演練 • 使用Matlab進行下列算式的運算。
Workspace Window • Workspace Window之變數 變數名稱 陣列大小 變數類型
Matlab所提供之資料型態 • Matlab所提供之資料型態
變數的設定與命名規則 • Matlab定義了一些常數,以方便輸入特定的數值,這些常數稱為永久常數(permanent constant)。
常用數學函數 • MATLAB 是一個科學計算軟體,因此可以支援很多常用到的數學函數 • y = abs(x) 取 x 的絕對值 • y = sin(x) 取 x 的正弦值 • y = exp(x) 自然指數 exp(x) • y = log(x) 自然對數 ln(x) • MATLAB 也支援複數運算,通常以 i或 j 代表單位虛數
輔助函數 • Matlab之輔助函數 → → lookfor mean help mean doc mean 更詳盡的使用方法 想要找到一個求平均值的函數 使用方法的查詢
隨堂演練 • 求解 >> 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
Matlab陣列 • 定義 • 純量:單一數值。 • Scalar=4; • 向量:一維之陣列,包含行向列以及列向量。 • Cvector= [4;5;6] ; • Rvector = [7,8,9] ; • 矩陣:二維之陣列,陣列中最常使用到之形式。 • Matrix = [5 6 ; 7 8] ; • 多維陣列:對於維度(Dimensions)超過1的陣列稱之。 • 陣列包含上敘之純量、向量以及矩陣。
向量 • 向量格式 >>x=[1 2 3] • 執行結果 x = 1 2 3 >>x=[pi/2 sqrt(2) 2] • 執行結果 x = 1.5708 1.4142 2.0000
向量之給法 • 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.09442.4435 2.7925 3.1416
向量 • 如何取出向量各位置之值 >>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
隨堂練習 • 解多項式 >>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
隨堂練習 • 向量合併 >>x=[1 2 3 3 2 1]; >>y=[4 5]; >>a=[x y] • 執行結果 a = 1 2 3 3 2 1 4 5 >>b=[a(1:2:5) 1 0 1] a(起始值:增量:終值) • 執行結果 b = 1 3 2 1 0 1
向量相關指令函數 • 查詢陣列相關資訊函數 >> size(Vector3) >> length(Vector3) >> ndims(Vector3) >> numel(Vector3)
向量相關指令函數 • 基本向量處理函數
Matlab矩陣 • 產生各種特殊用途矩陣之指令 :
Matlab矩陣運算 • 矩陣的數學運算
Matlab矩陣運算 • 陣列的點運算
矩陣 • 如何輸入一個矩陣 • 法一 >>A=[ 1 2 3 4 5 6 7 8 9] • 法二 >>A=[1 2 3 ; 4 5 6 ; 7 8 9]
矩陣的索引或下標 • 可以使用矩陣下標來進行矩陣的索引(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 = 1 2 0 3 4 0 0 0 1
矩陣 • 如何從矩陣中取值或舉出一個子矩陣 >>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])
隨堂練習 • 矩陣相加 A = [12 34 56 20]; B = [1 3 2 4]; C = A + B • 執行結果 C = 13 37 58 24
隨堂練習 • 矩陣相乘 A = [1; 2]; B = [3, 4, 5]; C = A*B • 執行結果 C = 3 4 5 6 8 10
三維陣列 • 將兩個矩陣疊在一起,就形成第三個維度,此第三個維度可稱為「頁」(Page),圖示如下: 頁 列 頁 行
三維陣列 • 三維陣列可對應至一個 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 為任意自然數。