Matlab 簡介

Download Report

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: 如何載入儲存之變數?