Presentation is loading. Please wait.

Presentation is loading. Please wait.

MATLAB 程式設計簡介 修改自張智星教授講義

Similar presentations


Presentation on theme: "MATLAB 程式設計簡介 修改自張智星教授講義"— Presentation transcript:

1 MATLAB 程式設計簡介 修改自張智星教授講義 jang@cs.nthu.edu.tw
清大資工系 多媒體資訊檢索實驗室

2 關於張智星教授 張智星 Roger Jang Ph.D. UC BerkeleyEECS (1992)
The Math Works – Matlab (1993~1995) 清大資工教授(~2012/07)、台大資工教授

3 Matlab的基本運算 一般常數運算 若不想讓 MATLAB 每次都顯示運算結果,只需在運算式最後加上分號(;)即可,例如:
在MATLAB 命令視窗(Command Window)內的提示符號( >>)之後輸入運算式,並按 Enter 鍵。例如: >> ans = 81 若不想讓 MATLAB 每次都顯示運算結果,只需在運算式最後加上分號(;)即可,例如: 6/2*(1+2); 算完的答案會儲存在「ans」變數

4 變數 變數名稱 範例: a = 1 %(←這是註解) 此時a為1 b = a+2 % 此時b值為3 可使用英文、數字、底線
第一個字母必需是英文字母 大小寫視為不同 最多只能有 63個字母  範例: a = 1 %(←這是註解) 此時a為1 b = a+2 % 此時b值為3

5 簡易工程計算 MATLAB 是一個科學計算軟體,因此可以支援很多常用到的數學函數
y = abs(x) % 取 x 的絕對值 y = sqrt(x) % 取 x 的開平方根 y = x^(1/2)也有同樣的效果 y = sin(x) % 取 x 的正弦值 y = exp(x) % 自然指數 exp(x) y = log(x) % 自然對數 ln(x) 以2或10為底的log有內建函數,其餘可用換底公式 MATLAB 也支援複數運算,通常以 i 或 j 代表單位虛數 輸入sqrt(-3)將得到: i 尤拉公式:exp(i*pi)

6 線上支援 help:用來查詢已知指令的用法。 lookfor:用來尋找未知的指令。找到所需的指令後,即可用 help 進一步找出其用法。
doc:特定函數的線上支援。 ......Google!!

7 向量的建立-手動輸入 row vector column vector a = [1 4 2 6 7 9]

8 向量的建立-自動建立 如果要建立一個很大的向量怎麼辦? a=1:10; a=1:0.1:10 ; linspace(1, 10, 50)
自動建立一個[1, 2, 3, …, 10]的向量 預設的遞增是1 a=1:0.1:10 ; 自動建立一個[1, 1.1, 1.2 … 9.8, 9.9, 10]的向量 遞增為0.1(在1到10之間,每隔0.1建立一個點) linspace(1, 10, 50) 在1到10之間,建立50個點

9 向量的存取 取出向量元素,範例:t = [4 6 2 7 9] 修改向量元素,範例:t=[4 2 5 3 7]
輸入t(k)會存取向量t的第k個元素 輸入t(4)會存取向量t的第4個元素:7 輸入t(5)或t(end) 會存取向量t的最後一個元素:9 Question:輸入t(6)會? 修改向量元素,範例:t=[ ] t(3) = 2 %將向量t的第三個元素更改為 2 t(6) = 1 %在向量t加入第六個元素,其值為1 t(3) = [] %將向量 t 的第三個元素刪除,[]代表空集合 Question:如何一次刪除多個元素? Question:輸入t(50)=50時,結果會如何?

10 向量的運算 若s=[3 4 2 6 1], t=[4 2 5 3 7] s + 5:將s的每個元素+5 t * 6:將t的每個元素*6
sqrt(s) :將s的每個元素開根號 s + t:兩個向量相加,長度相同時方可使用 s .* t:兩個向量,元素對元素相乘 s':轉置(transpose) Question:內積?

11 矩陣的建立 在每個row結尾加上分號(;),例如: 建立特殊矩陣 A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
A = zeros(2,3); %2-by-3矩陣,元素皆為0 A = ones(2,3); %2-by-3矩陣,元素皆為1 A = eye(4) % 建立4-by-4的單位矩陣 A = magic(5) % 建立5-by-5的魔方陣 A = rand(5) % 建立5-by-5的矩陣,每個元素都是(0, 1)之間的亂數

12 矩陣的存取 A(i, j)會存取矩陣A 的第i個row,第j個column的元素
一次取出/改變/刪除一整個行或列 B = A(1,:) A(2,:) = [ ] A(:,3) = [5; 9; 13]

13 矩陣的存取 矩陣合併之一 矩陣合併之二 A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A = [A [2; 4; 6]] % 新增一個column A = [A; [ ]] % 再新增一個row 矩陣合併之二 B = [1 2; 3 4; 5 6] C = [A B] % 分隔線 B = [ ; ] C = [A; B]

14 向量與矩陣的運算 有一些函數是特別針對向量及矩陣而設計 針對矩陣的運算效果,可參考「help」的說明
y = min(x) % 向量 x 的極小值 y = max(x) % 向量 x 的極大值 y = mean(x) % 向量 x 的平均值 y = sum(x) % 向量 x 的總和 y = sort(x) % 向量 x 的排序 針對矩陣的運算效果,可參考「help」的說明

15 向量與矩陣的運算 若想知道y值是在向量中的哪個位置 若想知道向量或矩陣的大小 x = [4 2 6 1 10]
[y, idx] = min(x) % y為1,idx為4 若想知道向量或矩陣的大小 a = 1:5, B = [1:5; 6:10] length(a) % 回傳向量a的長度 [m n] = size(B) %回傳矩陣B的row和column的數目 m = size(B,1) %回傳矩陣B的row的數目 n = size(B,2) %回傳矩陣B的column的數目

16 向量與矩陣的運算 find指令對矩陣的作用 find指令:尋找元素出現的位置 a = [3 1 4 6 5 7 9 7 8 0]

17 向量與矩陣的運算 依條件修改向量之元素 依條件修改矩陣之元素 a = [3 2 4 5 7 9 1 8 6 0]
a(a<=4) = 7 % 把小於等於4的元素都修改成7 a(a<=4) = [ ] % 如果知道有幾個元素,也可以用向量個別指派 依條件修改矩陣之元素 A = [ ; ] A(A<=5) = 123

18 矩陣的運算 A = round(rand(5,5)*10) % 產生5-by-5矩陣,元素值在0~10之間
det(A) % 行列式值(determinant) inv(A) % A的反矩陣 A^-1 A\eye(5) 關於使用何者較好,可參照「help inv」之內容 x = A\b 解線性系統 Ax=b

19 繪圖指令-plot(x,y) plot : 最基本的繪圖指令 若plot有輸入x向量和y向量 對 x 及相對應的 y 進行作圖
x = linspace(0, 2*pi); y = sin(x); plot(x, y);

20 繪圖指令-plot(x1,y1,x2,y2,…) 一次畫出多條曲線 會自動換顏色 x = linspace(0, 2*pi);
plot(x, sin(x), x, cos(x), x, sin(x)+cos(x)); grid on; % 畫出格網

21 繪圖指令-plot(x1,y1,x2,y2,…) 幫圖形加入說明文字/軸標籤/標題 x = linspace(0, 2*pi);
plot(x, sin(x), x, cos(x), x, sin(x)+cos(x)); grid on; legend('sin', 'cos', 'sin+cos'); xlabel('x'); ylabel('f(x)'); title('加入說明文字的範例');

22 plot指令-加上線標 以不同的線標(marker)作圖 查閱help的內容,可以獲得更多說明 x = linspace(0, 2*pi);
plot(x, sin(x), 'o-', ... x, cos(x), '+', ... x, sin(x)+cos(x), 'x'); grid on; legend('sin', 'cos', 'sin+cos'); xlabel('x');ylabel('f(x)'); title('加入說明文字的範例'); 查閱help的內容,可以獲得更多說明

23 極座標繪圖–polar(theta,r) 極座標畫圓 theta = linspace (0, 2*pi);
r= ones(1,length(theta)); polar(theta , r); theta=linspace (0, 2*pi,1000); r= cos(4*theta); polar(theta,r); hold on r= sin(4*theta);

24 極座標繪圖–polar(theta,r) 極座標畫玫瑰線 theta = linspace (0, 2*pi);
r= cos(4*theta); polar(theta , r); theta=linspace (0, 2*pi,1000); r= cos(4*theta); polar(theta,r); hold on r= sin(4*theta);

25 極座標繪圖–polar(theta,r) 極座標畫心臟線 theta = linspace (0, 2*pi);
r= 1-sin(theta); polar(theta , r); theta=linspace (0, 2*pi,1000); r= cos(4*theta); polar(theta,r); hold on r= sin(4*theta);

26 更多的繪圖指令 ezplot: 用簡單的方式畫出函數圖型 bar:長條圖 pie:扇形圖 hist: 直方圖(Histogram)
stem:針頭圖 stairs: 階梯圖

27 ezplot 範例: h = ezplot('x^2+y^2=1'); set(h, 'color', 'black', 'linestyle', '-'); hold on; % 讓之後繪製的曲線附加上去,而非清除舊的曲線 h = ezplot('sin(x)'); set(h, 'color', 'red', 'linestyle', '--'); title(''); legend('circle', 'sin');

28 ezplot 執行結果:

29 ezplot-使用參數式 範例: h = ezplot('2*cos(t)+3','4*sin(t)+5');
hold on; % 讓之後繪製的曲線附加上去,而非清除舊的曲線 h = ezplot('6*cos(t)+7','8*sin(t)+9', [-0.7*pi 0.7*pi]); title('');

30 ezplot-畫Doraemon 成品:

31 長條圖 - bar 範例:大學部男生宿舍床位數 資料來源:學務處住宿組 data = [774 357 300 285];
xlabel('齋舍別'); ylabel('人數'); set(gca, 'xticklabel',{'新','實','仁','義'});

32 長條圖 - bar 範例:數據量測呈現 資料來源:普物實驗萬年報告 同一個row的資料會聚集在一起
data = [ ; ]; bar(data); ylabel('長度'); set(gca, 'xticklabel',{'內徑','外徑'}); legend('第一次','第二次','第三次'); 同一個row的資料會聚集在一起

33 扇形圖 - pie 範例:100上學士班院系人數統計 資料來源:教務處註冊組 data=[761 869 1138 1508 940];
label={'人社','科管','電資','工院','理院'}; pie(data, label);

34 直方圖 - hist 範例:數據量測呈現 資料來源:普物實驗萬年報告
data = [ ]; figure; subplot(2,2,1); hist(data); title('預設10個bin'); subplot(2,2,2); hist(data,5); title('指定bin的個數'); subplot(2,2,3); hist(data,65:10:95); title('指定bin的中心值'); subplot(2,2,4); bar(60:10:100,histc(data,60:10:100),'histc'); title('指定bin的範圍');

35 直方圖 - hist 執行結果

36 如何另存/複製圖片 儲存圖片檔 複製圖片 File→Save As 圖片類型可選png或eps Edit→Copy Figure
可利用Edit→Copy Options設定細節

37 關於向量與矩陣的其他函式 a = [1 2 3]; b = [6 2 7]; A = [1 2 3; 5 10 8; 11 -3 66];
x = roots(a); % 方程式求根 M = cov(a, b); % 共變異矩陣 A = [1 2 3; ; ]; [L U P] = lu(A); % LU分解 [Q R] = qr(A); % QR分解 [U S V] = svd(A); % 奇異值(singular value)分解 [V D] = eig(A); % 特徵分解


Download ppt "MATLAB 程式設計簡介 修改自張智星教授講義"

Similar presentations


Ads by Google