Transcript Matlab 簡介
MATLAB 程式設計入門篇 變數、向量、矩陣 修改自張智星教授講義 [email protected] http://www.cs.nthu.edu.tw/~jang 清大資工系 多媒體資訊檢索實驗室 MATLAB 程式設計入門篇:初探MATLAB 開啟/關閉 MATLAB 開啟 滑鼠點兩下圖示就好,或者 開始→所有程式→MATLAB 關閉 在命令視窗內,鍵入 exit 指令。 在命令視窗內,鍵入 quit 指令。 直接關閉 MATLAB 的命令視窗。 MATLAB 程式設計入門篇:初探MATLAB Matlab的基本運算 一般常數運算 在MATLAB 命令視窗(Command Window)內的 提示符號( >>)之後輸入運算式,並按 Enter 鍵。例如: >> 36 + 45 ans = 81 若不想讓 MATLAB 每次都顯示運算結果,只 需在運算式最後加上分號(;)即可,例如: 6/2*(1+2); 算完的答案存在哪裡? MATLAB 程式設計入門篇:初探MATLAB 什麼是變數(variable)? 暫時存放資料 變數就像是個箱子,裡面可以放你想要放的資料 變數也需要取名字(變數名稱) 可使用英文、數字、底線 第一個字母必需是英文字母 大小寫視為不同 最多只能有 63個字母 MATLAB 程式設計入門篇:初探MATLAB 如何將資料指定給變數? 例 在matlab輸入 a = 1 變數名稱 指派 「=」不是等於,而是「指派」 資料 右邊的資料會傳給 左邊的變數 範例: a = 1 %(←這是註解) 此時a為1 b = a+2 % 此時b值為3 MATLAB 程式設計入門篇:初探MATLAB 如何將資料指定給變數? Question 若輸入 a=1 b=a b的值是? a=3 a的值是? b的值是? Question 第一行 a=1 第二行 a=a+1 a的值是? 第三行 b=a+1 a的值是? b的值是? MATLAB 程式設計入門篇:初探MATLAB 簡易工程計算 MATLAB 是一個科學計算軟體,因此可以支援很多常 用到的數學函數 y = abs(x) % 取 x 的絕對值 y = sqrt(x) % 取 x 的開平方根 y = sin(x) % 取 x 的正弦值 y = exp(x) % 自然指數 exp(x) y = log(x) % 自然對數 ln(x) y = x^(1/2)也有同樣的效果 以2或10為底的log有內建函數,其餘可用換底公式 MATLAB 也支援複數運算,通常以 i 或 j 代表單位虛數 輸入sqrt(-3)將得到: 0 + 1.7321i 尤拉公式:exp(i*pi) MATLAB 程式設計入門篇:初探MATLAB 線上支援 help:用來查詢已知指令的用法。 lookfor:用來尋找未知的指令。找到所需的 指令後,即可用 help 進一步找出其用法。 doc:產生特定函數的線上支援。 ......Google!! MATLAB 程式設計入門篇:初探MATLAB 向量的建立-手動輸入 row vector a = [1 4 2 6 7 9] a = [1, 4, 2, 6, 7, 9] %逗點可加可不加 column vector a = [1; 4; 2; 6; 7; 9] MATLAB 程式設計入門篇:初探MATLAB 向量的建立-自動建立 如果要建立一個很大的向量怎麼辦? a=1:10; a=1:0.1:10 ; 自動建立一個[1,2 ,3 …,10]的向量 預設的遞增是1 自動建立一個[1, 1.1, 1.2 … 9.8,9.9,10]的向量 遞增為0.1(在1到10之間,每隔0.1建立一個點) linspace(1,10,50) 在1到10之間,建立50個點 MATLAB 程式設計入門篇:初探MATLAB 向量的存取 取出向量元素,範例:t = [ 4 6 2 7 9] 輸入t(k)會存取向量t的第k個元素 輸入t(4)會存取向量t的第4個元素:7 輸入t(5)或t(end) 會存取向量t的最後一個元素:9 Question:輸入t(6)會? 修改向量元素,範例:t=[4 2 5 3 7] t(3) = 2 %將向量t的第三個元素更改為 2 t(6) = 1 %在向量t加入第六個元素,其值為1 t(3) = [] %將向量 t 的第三個元素刪除,[]代表空集合 Question:如何一次刪除多個元素? Question:輸入t(50)=50時,結果會如何? MATLAB 程式設計入門篇:初探MATLAB 向量的運算 若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:內積? MATLAB 程式設計入門篇:初探MATLAB 矩陣的建立 在每個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)之間的亂數 MATLAB 程式設計入門篇:初探MATLAB 矩陣的存取 A(i,j)會存取矩陣A 的第i個row,第j個column的元素 A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; A(2,3) = 5 % 將第二列、第三行的元素值,改變為 5 A= 1 5 9 2 6 10 3 5 11 4 8 12 一次取出/改變/刪除一整個行或列 B = A(1,:) A(2,:) = [9 8 7 6] A(:,3) = [5; 9; 13] MATLAB 程式設計入門篇:初探MATLAB 矩陣的存取 取出/改變/刪除特定行列 A = eye(5) A= 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 A([2 4 5],[1 4]) = [1 2;3 4; 5 6] A= 1 1 0 3 5 0 1 0 0 0 0 0 1 0 0 0 2 0 4 6 0 0 0 0 1 MATLAB 程式設計入門篇:初探MATLAB 矩陣的存取 Question: 如何改變任意處元素? A = [1 2 3 4;5 6 7 8;9 10 11 12];時, A(1) = ? A(2) = ? A(5) = ? Question: 如何改變方陣對角線? Question: 如何交換兩個 rows/columns? MATLAB 程式設計入門篇:初探MATLAB 矩陣的存取 矩陣合併之一 A = [1 2 3 4; 5 6 7 8; 9 10 11 12] A = [A [2; 4; 6]] % 新增一個column A = [A; [3 4 5 6 7]] % 再新增一個row 矩陣合併之二 A = [1 2 3 4; 5 6 7 8; 9 10 11 12] B = [1 2; 3 4; 5 6] C = [A B] % ---------分隔線----------A = [1 2 3 4; 5 6 7 8; 9 10 11 12] B = [13 14 15 16; 17 18 19 20] C = [A; B] MATLAB 程式設計入門篇:初探MATLAB 向量與矩陣的運算 有一些函數是特別針對向量及矩陣而設計 y y y y y = = = = = min(x) max(x) mean(x) sum(x) sort(x) % % % % % 向量 向量 向量 向量 向量 x x x x x 的極小值 的極大值 的平均值 的總和 的排序 針對矩陣的運算效果,可參考「help」的說明 MATLAB 程式設計入門篇:初探MATLAB 向量與矩陣的運算 若想知道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的數目 MATLAB 程式設計入門篇:初探MATLAB 向量與矩陣的運算 find指令:尋找元素出現的位置 a = [3 1 4 6 5 7 9 7 8 0] find(a==4)會回傳3 find(a==7)會回傳[6, 8] find(a<=5)會回傳[1, 2, 3, 5, 10] find指令對矩陣的作用 A = [3 4 5 6; 7 8 9 0] find(A<=5)會回傳[1; 3; 5; 8] MATLAB 程式設計入門篇:初探MATLAB 矩陣的運算 A = round(rand(5,5)*10) % 產生5-by-5矩陣,元素 值在0~10之間 det(A) % 行列式值(determinant) inv(A) % A的反矩陣 A^-1 A\eye(5) 關於使用何者較好,可參照「help inv」之內容 解線性系統Ax=b x = A\b MATLAB 程式設計入門篇:初探MATLAB 刪除與儲存變數 用於刪除的指令:clear clear: 刪除所有變數 clear a b c: 刪除a, b, c這三個變數 用於儲存的指令:save save filename: 將所有變數存入filename.mat檔案 save filename a b: 將a, b這兩個變數存入filename.mat 上述兩個方法,適用於檔案名稱固定的情況 save(filename,'a','b'): 同上,但檔名在filename變數內 檔案可以儲存在目前目錄或指定目錄底下 Question: 如何載入儲存之變數?