340 likes | 677 Views
MATLAB 介紹. 導論. MATLAB 是一項 資料分析 與 視覺化 的工具 ,強力支援矩陣與矩陣運算。 MATLAB 具有 優異的繪圖 (2D 、 3D ) 能力 ,與獨特的 程式語言 能力。 為何 MATLAB 會成為影像處理工具 ,其中一個理由便是具有影像處理相關處理程序所需之影像處理工具箱 ( IPT ) 。. Matlab 介面. 介面說明. Workspace : 顯示目前工作環境內定義的變數 Command Window : 就如同一個文字操作介面,有 >> 提示號,在提示號之後輸入指令 Command History
E N D
導論 • MATLAB是一項資料分析與視覺化的工具,強力支援矩陣與矩陣運算。 • MATLAB具有優異的繪圖(2D、3D)能力,與獨特的程式語言能力。 • 為何MATLAB會成為影像處理工具,其中一個理由便是具有影像處理相關處理程序所需之影像處理工具箱(IPT)。
介面說明 • Workspace: 顯示目前工作環境內定義的變數 • Command Window: 就如同一個文字操作介面,有 >> 提示號,在提示號之後輸入指令 • Command History 紀錄曾經下過的指令
介面說明(cont.) • Current Directory Window 預設路徑C:\Users\..\Documents\MATLAB 當你的圖片檔案或M檔案至於此路徑時, 使用時只需呼叫檔名,不必給予檔案路徑。
指令操作 • 在command window輸入指令 • 按下 [Enter] 就執行計算並且顯示答案 • Matlab不在乎空格 ex: 2*3-4 等同於 2 * 3 - 4 • 變數分大小寫 ex: imre 不等同於 IMRE
MATLAB基本用法 • 基本運算與函數 • 在MATLAB下進行基本數學運算(+、-、*、/、^),只需將運算式直接打入提示號(>>)之後,並按入Enter鍵即可。例如: >> 2 + 2 ans = 4 • 若想改變輸出格式可使用format函數。例如: >> format long % 顯示格式可取至雙精度浮點數>> 11/7ans= 1.571428571428571>>format • 內建基礎數學函數。例如: >> sqrt(2) >> sin(pi/8) >> log(10)
MATLAB常用的基本數學函數 • abs(x): 純量的絕對值或向量的長度 • sqrt(x): 開平方 r • round(x): 四捨五入至最近整數 • fix(x): 無論正負,捨去小數至最近整數 • floor(x): 地板函數,即捨去正小數至最近整數 • ceil(x): 天花板函數,即加入正小數至最近整數 • sign(x): 符號函數 (Signum function)。 當x<0時,sign(x)=-1;當x=0時,sign(x)=0; 當x>0時,sign(x)=1。 • rem(x,y): 求x除以y的餘數 • gcd(x,y): 整數x和y的最大公因數 • lcm(x,y): 整數x和y的最小公倍數 • exp(x): 自然指數 • pow2(x): 2的指數 (2X) • log(x): 以e為底的對數,即自然對數 • log2(x): 以2為底的對數 • log10(x): 以10為底的對數
MATLAB常用的三角函數 • sin(x): 正弦函數 • cos(x): 餘弦函數 • tan(x): 正切函數 • asin(x): 反正弦函數 • acos(x): 反餘弦函數 • atan(x): 反正切函數 • atan2(x,y):四象限的反正切函數 • sinh(x): 雙曲線正弦函數 • cosh(x): 雙曲線餘弦函數 • tanh(x): 雙曲線正切函數 • asinh(x): 反雙曲線正弦函數 • acosh(x): 反雙曲線餘弦函數 • atanh(x): 反雙曲線正切函數
變數與工作空間 • 變數命名的規則 • 第一個字母必須是英文字母 • 其後可以是字母、數字、底線(_)任意組合,字母間不可留空格 。 • 最多只能有63個字母,MATLAB會忽略多餘字母 例如: a = 5 ^ (7 /2)a = 279.5085
變數與工作空間 • 工作空間可列出目前所有定義了的變數、數據資料型態以及位元組大小。(View選單) • 另可在命令視窗使用whos函數取得相同資訊。
純量、向量與矩陣 • MATLAB中有許多產生與處理矩陣的指令。 • 在資料形式有時會稱之為純量、向量與矩陣,但MATLAB都會將其視為矩陣資料。 • 純量為1X1陣列類型 • 向量為一維陣列類型 • 矩陣為二維或更高維度陣類型
矩陣元素 • 矩陣產生方式,首先可以將矩陣一列一列鍵入,使用空白或逗號分隔,分號用來隔列。例如: • a=[4 -2 -4 7;1 5 -3 2;6 -8 -5 -6;-7 3 0 1] a = 4 -2 -4 7 1 5 -3 2 6 -8 -5 -6 -7 3 0 1
矩陣元素 • 矩陣元素存取---使用標準列,行的索引方式取得。例如: a(2,3) %取得第2列第3行的元素 • MATLAB也可使用單一索引數字求得矩陣元素。例如: a(10) %取得原矩陣a(2,3)之元素。 • 一個r列c行的矩陣M,元素m(i,j)可對應位置為m(i + r*(j-1))。
矩陣元素 • 使用單一索引一次存取好幾個矩陣元素:a([1 6 11 16]) • MATLAB的冒號(:)運算子,產生一整列的數值,稱之為數值向量。例如:a :b %可產生由a到b所有整數 • 也可使用冒號(:)運算子產生一等差數列。a : i:b %可產生由a增加i到b所有整數 • 我們也可利用linspace來產生任意的等差數列: x = linspace(4, 10, 6) % 等差數列:首項為4,末項為10,項數為6 x = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000
矩陣元素 • 可將上面冒號運用在矩陣元素存取。a(2,1:3) a(2:4,3) a(2:3,3:4) a(3,:) a(:,2) a(:) % 鍵入冒號可將二維矩陣(依逐行方式)形成一行向量顯示
矩陣元素 • end函數表示陣列元素索引之最大值。例如: v(end:1) %反轉向量值v(end:-2:1) %表示由最後一個元素開始顯示,每次遞減2 ,直到第一個元素停止。 a(end,end) a(end, end-2) a(2:end,end:-2:1) • 使用向量來當一個矩陣的索引 E=a([1 3],[2 3])
矩陣運算 • MATLAB支援所有標準矩陣運算,矩陣可相加、相減、相乘或反轉,也可取矩陣的次方。 • b=[2 4 -7 -4;5 6 3 -2;1 -8 -5 -3;0 -6 7 -1] b = 2 4 -7 -4 5 6 3 -2 1 -8 -5 -3 0 -6 7 -1 例如: 2*a – 3*b
矩陣運算 • Operator Name Comments and Examples • + Array and matrix addition a + b, A + B, or a + A. • − Array and matrix subtraction a − b, A − B, A − a,. • . * Array multiplication Cv= A.*B, C(I, J) = A(I, J)*B(I, J). • * Matrix multiplication A*B, standard matrix multiplication. • ./ Array right division† C = A./B, C(I, J) = A(I, J)/B(I, J). • .\ Array left division† C = A.\B, C(I, J) = B(I, J)/A(I, J). • / Matrix right division A/B is the preferred way to compute A*inv(B).
矩陣運算 • Operator Name Comments and Examples • \ Matrix left division A\B is the preferred way to compute inv(A)*B. • .^ Array power If C = A.^B, then C(I, J) = A(I, J)^B(I, J). • .' matrix transpose A.', standard matrix transpose. • ' matrix transpose A', standard matrix transpose. • + Unary plus +A is the same as 0 + A. • − Unary minus −A is the same as 0 − A or −1*A.
矩陣運算 • 反矩陣函數inv inv(a) • 矩陣轉置 a’ • 矩陣上下顛倒flipud及左右顛倒fliplr flipud(a) fliplr(a) • 若要重新安排矩陣的形狀,可用reshape命令: reshape(a, 2, 8)
點運算子 • 點運算子主要使矩陣運算看成陣列之運算 例如: a=[1 2;3 4] b=[2 3;4 5] a.*b %產生a與b對應元素相乘 ans = 2 6 12 20
建構矩陣 • 我們可以透過將所有元素列出的方式建構矩陣。不過,有些特殊矩陣可使用MATLAB內部函數建立,如全部是0或 1的矩陣,可由zeros與ones產生。例如: zeros(n) zeros(m,n) zeros(a) • 亂數矩陣可以使用rand與randn產生。 • rand產生的區間為[0, 1]的平均分佈矩陣 • randn產生的平均值為0,標準差為1的常態分佈矩陣 floor(10*rand(3)) floor(100*randn(3,5))
建構矩陣 • 函數meshgrid可以自動產生2D或3D笛卡兒空間 [rows cols]=meshgrid(1:10,1:10) • 函數size可以求得矩陣維度的大小 size(a)
If Else • 用法:if (True or False), 計算, end ex: if (isempty(t)) t = 0; End • 用法: if (True_or_False),計算, else,計算, end
switch • 用法:switch (switch_expr) case case_expr_1 statement1 otherwise statement1 end ex: switch (value) case {1 ,3 ,5 ,7 , 9} disp(‘the value is odd.’); case {2 ,4 , 6, 8, 10} disp(‘the value is even.’); otherwise disp(‘the value is out of range.’); end
For loop • 用法:for 變數 = 向量或序列, 計算, end ex: for i = 1:100, ex: for i=1:2:100 , y(i) =2; s = s+i; End end ex: for x = [0 1 5 3], disp(x); //印出 x end
While loop • 用法:while expression , 計算, end ex: i=1; ex: i=1 while i <= 100while i <= 100 y(i) =2; s = s+i; i=i+1; i=i+2; end end
向量化 • 向量化代表要將整個矩陣或向量進行一項運算,例如:大部分程式語言,要將一個陣列元素帶入某項運算,必須使用迴圈來完成。MATLAB的向量化允許我們在大多數情況可以不用迴圈,是非常有效率的替代方案。例如: for i=1:10^6 ; sin(i); end %可用下一列指令取代 i=1:10^6;sin(i);
向量化 • 再舉一個例子,可以使用下列指令產生前10 個數字平方: [1:10].^2 • 向量化也可使用邏輯運算子進行使用下列指令求 矩陣a所有正元素: a>0
繪圖 • 折線圖plot(): 用法:plot(x,y),其中 x 和 y 是維度相同的序列或向量。 ex: x=[0 :0.1: 2*pi]; plot(x,sin(x)) 畫出從 0到2 π間隔0.1 數值的sin 圖形 plot(x,sin(x),’.’,x,cos(x),’o’)
MATLAB 程式編寫 • MATLAB的腳本(script) 腳本檔案只是一份執行指令的清單,為了執行方便將其存檔,命名為script.m,置於路徑上,然後再指令視窗打入script,則會執行該檔案所有的指令。 • MATLAB的函數(function) MATLAB函數取得輸入(一個或數個變數) ,然後傳回一個或數個數值。例如: sum(a) % 會產生矩陣行的總和 sum(a>0) % 會產生矩陣大於0行的總和 sum(a(:) > 0) %會產生矩陣大於0的元素個數
MATLAB 程式編寫 • 函數語法---函數檔案會以 function開頭 第一行定義函數名稱(lookfor),接下來幾行是說明檔(help),最後是指令碼。如下所示: function num=countpos(a) % countpos finds the number of positive % elementsin a matrix. % usage: % n=countpos(a) num=sum(a(: )>0);
参考網站 http://libai.math.ncu.edu.tw/bcc16/B/matlab/index.shtml