MATLAB - Note

MATLAB - Note

LAVI

Basic operations

可以將運算結果送到另一個變數
註解使用 % 表示

1
2
3
4
x = (5*2 +3.5) / 5 

% x =
% 2.7000

若不想 MATLAB 每次都顯示運算結果,只需在運算是最後加上分號即可

1
y = (5*2 +3.5) / 5 

Args

第一個字元必須是英文,後面可以接數字或底線
最多只能有 31 個字母
不需經過變數宣告,所有數值預設以 double 資料型態儲存

MATLAB 運算符和特殊字符

圖片來源

1
2
% @(x, c) 是匿名函數,min(x ./ c) 代表取所有 x 除以 c 的商中的最小值,./ 是依序除
objective_max = @(x, c) min(x ./ c);

向量與矩陣

矩陣運算

1
2
3
4
5
s = [1 3 5 2]; % 中間以空白隔開
t = 2 * s + 1

% t =
% 3 7 11 5

可取出向量中的一個元素做運算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
s = [1 3 5 2]; % 中間以空白隔開
t = 2 * s + 1

t(3) = 2 % 將向量 t 的第三個元素改成 2

% t =
% 3 7 2 5

t(6) = 10 % 在向量 t 加入第六個元素 10

% t =
% 3 7 2 5 0 10

t(4) = [] % 將向量 t 的第四個元素刪除,[] 代表空集合

% t =
% 3 7 2 0 10

二維矩陣

建立大小為 m x n 的矩陣
橫列 = row, 直行 = column
建立矩陣可以在每一橫列結尾加上分號 ;

1
2
3
4
5
6
A = [1 2 3 4; 5 6 7 8; 9 7 6 4]

% A =
% 1 2 3 4
% 5 6 7 8
% 9 7 6 4

m x n 矩陣的各種處理

1
2
3
4
5
6
A(2, 3) = 5 	% 將矩陣第二 row 第三 column 的值改成 5

% A =
% 1 2 3 4
% 5 6 5 8
% 9 7 6 4
1
2
3
4
B = A(2, 1:3) 	% 取出 A 第二 row,第一到第三 column 的值,並儲存成 B

% B =
% 5 6 5
1
2
3
4
5
6
A = [A B'] 		% 將 B 矩陣轉置後,再以行向量併入 A

% A =
% 1 2 3 4 5
% 5 6 5 8 6
% 9 10 11 12 5
1
2
3
4
5
6
A(:, 2) = [] 	% 刪除矩陣 A 的所有第二 column,: 表示所有,[] 表示空集合

% A =
% 1 3 4 5
% 5 5 8 6
% 9 11 12 5
1
2
3
4
5
6
7
A = [A; 4 3 2 1] 	% 在原矩陣 A 中加入第四 row

% A =
% 1 3 4 5
% 5 5 8 6
% 9 11 12 5
% 4 3 2 1
1
2
3
4
5
A([1 4], :) = [] 	% 刪除第一、第四 row,: 表示所有,[] 表示空集合

% A =
% 5 5 8 6
% 9 11 12 5
1
2
3
4
5
B = A(:, [4 2 3]) 	% 從矩陣 A 抽出第四、二、三行

% B =
% 6 5 8
% 5 11 12

Functions

randi

取得指定範圍內的隨機整數,可設定求多少個數

1
c = randi([10 50],1,100) % 隨機取 1 x 100 個 10 ~ 50 內的數

convertCharsToStrings

把字元轉換成字串

1
str = convertCharsToStrings(chr)

fminunc 求無約束多變量函數的最小值

圖片來源

1
2
x0 = [1,1];
[x,fval] = fminunc(fun,x0)

OS

getenv

獲得環境變數

1
getenv("envName")

Draw

plot

plot 指令的顏色縮寫 顏色
b Blue
c Cyan
g Green
k Black
m Magenta
r Red
w White
y Yellow
plot 指令的曲線樣式 樣式
- 實線(預設)
虛線
: 點線
-. 點虛線
plot 指令的線標樣式 線標樣式
o 圓形
+ 加號
x 叉叉
* 星星
. 點點
^ 朝上三角形
v 朝下三角形
square 方形
diamond 菱形

二維繪圖

1
2
3
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)


圖片來源

用黑色菱形畫圖

1
2
3
4
x = 0:0.5:4 * pi;
y = sin(x);

plot(x, y, 'k:diamond')

同時畫四張圖於一個視窗中

1
2
3
4
5
6
x = 0:0.1:4*pi;

subplot(2, 2, 1); plot(x, sin(x)); % 左上角
subplot(2, 2, 2); plot(x, cos(x)); % 右上角
subplot(2, 2, 3); plot(x, sin(x).*exp(-x/5)); % 左下角
subplot(2, 2, 4); plot(x, x.^2); % 右下角

scatter

二維繪圖 - 點陣圖

1
2
3
x = rand(50,5);
y = randn(50,5) + (5:5:25);
scatter(x,y,"filled")


圖片來源

Application

發送電子郵件

1
2
3
4
5
6
7
8
9
10
11
% 使用 SMTP 協定寄信
setpref('Internet', 'E_mail', mail);
setpref('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref('Internet', 'SMTP_Username', username);
setpref('Internet', 'SMTP_Password', password);

% port 號用 465
myprops = java.lang.System.getProperties;
myprops.setProperty('mail.smtp.auth', 'true');
myprops.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl.SSLSocketFactory');
myprops.setProperty('mail.smtp.socketFactory.port', '465');

Reference