原文GitHub - MATLAB-cheat-sheet,本文做了翻譯和刪改
MATLAB 即 Mat LABoratory(一做坐一天坐墊實驗室)MATrix LABoratory(矩陣實驗室)。是一種常用于工程和數(shù)學(xué)的強(qiáng)大語言。

主題圖
注意:
- MATLAB中的函數(shù)基本有多種不同參數(shù)的重載,本手冊只寫其中比較常用的方法,實際使用時可以善用help和doc來查詢更多用法。
- 參考中可能會有“向量“、”矩陣”、“數(shù)組”交替出現(xiàn)。矩陣屬于向量,數(shù)組即一維矩陣。
1. 基礎(chǔ)
注釋和代碼塊
%% 代碼塊由兩個百分號開始,作為塊標(biāo)題
% 注釋由一個百分號標(biāo)記
% Ctrl + R 注釋選定的代碼
% Ctrl + T 取消注釋選定的代碼
%{
像這樣
注釋
多行文字
%}
% 兩個百分號指示新代碼塊開始
% 每個代碼塊可以移動光標(biāo)來指定,并通過點擊“運行節(jié)”或
% 使用 Ctrl+Shift+Enter 快捷鍵來執(zhí)行。macOS使用 Cmd+Shift+Return。
%% 這里開始新的代碼塊
% 代碼塊的用途之一是把耗時長計算量大但很少更改的初始化代碼獨立開來,如加載數(shù)據(jù)
load myFile.mat y
%% 這是另一個代碼塊
% 這個代碼塊可以單獨編輯和運行,適合用于試驗代碼和演示
A = A * 2;
plot(A);
% 過長的代碼可以使用'...'來轉(zhuǎn)到下一行繼續(xù):
a = 1 + 2 + ...
+ 4
輔助命令
help [command] % 在命令行顯示命令幫助
doc [command] % 打開幫助窗口顯示命令的幫助
lookfor [command] % 搜索命令,將在所有MATLAB文件中搜索命令相關(guān)的第一行注釋
lookfor [command] -all % 搜索命令,將在所有MATLAB文件中搜索每一行相關(guān)的
who % 列出工作區(qū)中的變量
whos % 列出工作區(qū)中的變量及大小和類型
clear % 從工作區(qū)中刪除所有項目、釋放系統(tǒng)內(nèi)存
clear('A') % 從工作區(qū)中刪除指定的變量
openvar('A') % 在變量編輯器或其他圖形編輯工具中打開工作區(qū)變量
% 變量可以保存到.mat文件
save('myFileName.mat') % 保存工作區(qū)變量到文件
load('myFileName.mat') % 從文件加載變量
% 從文件加載指定的變量y
load('myFile.mat', 'y') % 標(biāo)準(zhǔn)函數(shù)語法
load myFile.mat y % 命令行語法,無括號,用空格代替逗號
clc % 清空命令行窗口
diary % 將命令行窗口文本保存到文件中
close % 關(guān)閉當(dāng)前圖窗
close all % 關(guān)閉所有圖窗
Ctrl + C % 終止當(dāng)前的計算
% 使用方向鍵查看歷史命令
% 設(shè)置輸出小數(shù)位數(shù),除bank外整數(shù)一般不顯示小數(shù)
format short % 4位(默認(rèn))
format long % 15位
format bank % 固定輸出2位小數(shù),用于財務(wù)計算
edit('myfunction.m') % 在編輯器中打開文件
type('myfunction.m') % 在命令行窗口顯示文件內(nèi)容
% 代碼性能優(yōu)化
profile on % 啟動函數(shù)性能探查器
profile off % 關(guān)閉函數(shù)性能的探查器
profile viewer % 打開性能探查器
% 使用操作系統(tǒng)的命令
!ping baidu.com
變量和表達(dá)式
% 變量
myVariable = 4 % 工作區(qū)會顯示新創(chuàng)建的變量
myVariable = 4; % 分號阻止結(jié)果輸出到命令行窗口
% 算術(shù)計算
4 + 6 % ans = 10
8 * myVariable % ans = 32
2 ^ 3 % ans = 8
a = 2; b = 3;
c = exp(a)*sin(pi/2) % c = 7.3891
% 邏輯
1 > 5 % ans = 0
10 >= 10 % ans = 1
3 ~= 4 % 非等于 -> ans = 1
3 == 3 % 等于 -> ans = 1
3 > 1 && 4 > 1 % 與 -> ans = 1
3 > 1 || 4 > 1 % 或 -> ans = 1
~1 % 非 -> ans = 0
isequal([2 2], [2 2]) % ==僅能對比標(biāo)量,此函數(shù)可對比向量(矩陣)
% 字符串
a = 'MyString'
length(a) % ans = 8
a(2) % ans = y
[a,a] % ans = MyStringMyString
% 元胞數(shù)組(Cells)
a = {'one', 'two', 'three'}
a(1) % ans = 'one' - 返回元胞(cell)
char(a(1)) % ans = one - 返回字符串
% 結(jié)構(gòu)體
A.b = {'one','two'};
A.c = [1 2];
A.d.e = false;
2. 編程和流程控制
% 用戶輸入
a = input('Enter the value: ')
xlsread(filename) % 讀excel
importdata(filename) % 讀CSV
imread(filename) % 讀圖片
fopen(filename) % 以二進(jìn)制讀取數(shù)據(jù)
% 輸出
disp(a); % 打印變量a
disp('Hello World'); % 打印一個字符串
fprintf('a = %.2f\n', a); % 用類似C語言的方式格式化輸出
% 選擇結(jié)構(gòu)
if (a > 15)
disp('Greater than 15')
elseif (a == 23)
disp('a is 23')
else
disp('neither condition met')
end
% for循環(huán)
for k = 1:5
disp(k)
end
% while循環(huán)
k = 0;
while (k < 5)
k = k + 1;
end
% 代碼執(zhí)行計時: 'toc' 打印從 'tic' 開始中間經(jīng)過的時間
tic
A = rand(1000);
A*A*A*A*A*A*A;
toc
% 暫停執(zhí)行正在運行的程序,并允許通過鍵盤進(jìn)行控制。此時進(jìn)入調(diào)試模式,可以手動更改變量。
% 此時可以在命令行窗口輸入“dbcont”來繼續(xù),或輸入“dbquit”來直接終止并退出
keyboard
3. 函數(shù)和腳本
% 從腳本調(diào)用函數(shù)
% [輸出參數(shù)] = 函數(shù)名(輸入?yún)?shù))
[V,D] = eig(A); % 特征值和特征向量
[~,D] = eig(A); % 如果你只想獲取對角矩陣 D,需使用 ~ 占位
% 函數(shù)或腳本必須位于MATLAB的“path”中或當(dāng)前工作文件夾,才能使用
path % 顯示當(dāng)前“path”包含的路徑
addpath /path/to/dir % 添加路徑到“path”
rmpath /path/to/dir % 從“path”移除路徑
cd /path/to/move/into % 改變工作文件夾
% 腳本文件
% 腳本文件可以記錄需要依次運行的命令
% 可以避免每次執(zhí)行都在命令窗口重復(fù)輸入
% 使用 .m 后綴
% 函數(shù)文件
% 同腳本文件使用 .m 后綴
% 但是可以允許輸入和返回參數(shù)
% 函數(shù)文件有其自己的工作區(qū)。(如不同的變量空間)
% 函數(shù)名需與文件名相同(如以下示例需保存為 double_input.m)
% 'help double_input.m' 返回函數(shù)聲明下的第一行注釋
function output = double_input(x)
%double_input(x) 返回 x 的 2 倍
output = 2*x;
end
double_input(6) % ans = 12
% 匿名函數(shù)
% 創(chuàng)建一個函數(shù)且不需新建文件
% 以下示例定義一個函數(shù)返回輸入值的平方,并將其(句柄)綁定到“sqr”
sqr = @(x) x.^2;
sqr(10) % ans = 100
% 查找更多函數(shù)有關(guān)文檔
doc function_handle
4. 繪圖
% 繪圖
x = 0:.10:2*pi; % 創(chuàng)建一個向量從 1 開始到 2*pi 結(jié)束,間距遞增
y = sin(x);
plot(x,y)
xlabel('x 軸')
ylabel('y 軸')
title('y = sin(x) 的函數(shù)圖像')
axis([0 2*pi -1 1]) % x范圍從 0 到 2*pi,y 范圍從 -1 到 1
plot(x,y1,'-',x,y2,'--',x,y3,':') % 在一張圖上繪制多個函數(shù)
legend('線 1 標(biāo)簽', '線 2 標(biāo)簽') % 在右上角添加不同函數(shù)線條的圖例
% 另一種在同一張圖上繪制多個函數(shù)的方式
% “hold on”時繼續(xù) plot 將在同一張圖上繪制
plot(x, y)
hold on
plot(x, z)
hold off
grid on % 顯示網(wǎng)格。使用 grid off 關(guān)閉網(wǎng)格
axis square % 使用相同長度的坐標(biāo)軸線
axis equal % 沿每個坐標(biāo)軸使用相同的數(shù)據(jù)單位長度
% 使用 subplot 創(chuàng)建多個圖窗
subplot(2,3,1); % 指定 2x3 個圖表中的第 1 個
plot(x1); title('First Plot') % 在這個位置繪制
subplot(2,3,2); % 指定第 2 個
plot(x2); title('Second Plot') % 在第 2 的位置繪制
loglog(x, y) % 以對數(shù)為 xy 軸坐標(biāo)單位繪圖
semilogx(x, y) % 以對數(shù)為 x 軸坐標(biāo)單位繪圖
semilogy(x, y) % 以對數(shù)為 y 軸坐標(biāo)單位繪圖
% 繪制表達(dá)式或函數(shù)
fplot(@(x) x^2, [2,5]) % 在 x=2 到 x=5 的區(qū)間上繪制 x^2
f = figure % 創(chuàng)建Figure對象,綁定在句柄 f
figure(f) % 將 f 指定的圖窗作為當(dāng)前圖窗,并將其顯示在其他所有圖窗的上面
close(f) % 關(guān)閉 f 指定的圖窗
close all % 關(guān)閉所有圖窗
close % 關(guān)閉當(dāng)前圖窗
shg % 把圖窗窗口調(diào)到屏幕前
clf clear % 清楚當(dāng)前圖窗,并重置大部分圖窗的繪制參數(shù)
% 繪制參數(shù)可以通過圖窗句柄修改
% 如下函數(shù)將返回當(dāng)前圖窗的句柄并綁定在 h
h = plot(x, y); % 你可以在創(chuàng)建圖窗時保存句柄
set(h, 'Color', 'r') % 設(shè)置顏色
% 也可直接修改對象 h,效果同上
h.Color = 'r';
% 'r' 紅(red), 'y' 黃(yellow), 'g' 綠(green), 'c' 青(cyan)
% 'b' 藍(lán)(blue), 'm' 洋紅(magenta), 'k' 黑(black), 'w' 白(white)
set(h, 'LineStyle', '--') % 設(shè)置線條
% '--' 實線, '---' 虛線, ':' 點點點, '-.' 點線, 'none' 沒有線
get(h, 'LineStyle')
% 返回當(dāng)前圖窗中的當(dāng)前坐標(biāo)區(qū)句柄
set(gca, 'XDir', 'reverse'); % 翻轉(zhuǎn)x軸方向
% 基于向量 x 和 y 中包含的坐標(biāo)返回二維網(wǎng)格坐標(biāo)
[X, Y] = meshgrid(x_min:step:x_max, y_min:step:y_max)
scatter(x, y); % 散點圖
hist(x); % 直方圖
bar(x); % 條形圖
stem(x); % 繪制離散序列數(shù)據(jù)
z = sin(x);
plot3(x,y,z); % 三維線圖
pcolor(A) % 矩陣偽彩(棋盤)圖: 在網(wǎng)格上繪制矩形,顏色由值決定
contour(A) % 矩陣的等高線圖
contourf(A) % 填充的二維等高線圖
mesh(A) % 網(wǎng)格圖
x1 = [-3:0.5:3];
x2 = x1;
y = randi(500, length(x1), length(x1));
% 顯示三維圖
figure
subplot(2,1,1);
surf(x1,x2,y);
xlabel(’x_1’);
ylabel(’x_2’);
% 顯示等高線圖
subplot(2,1,2);
contour(x1,x2,y);
xlabel(’x_{1}’);
ylabel(’x_{2}’);
axis equal
% 使用縮放顏色顯示圖像
figure
imagesc(x1,x2,y)
xlabel(’x_{1}’);
ylabel(’x_{2}’);
5. 矩陣和向量
重要:MATLAB索引從1開始而不是0
聲明
x = [4 32 53 7 1]; % 向量(vector)
% x =
% 4.00 32.00 53.00 7.00 1.00
% 向量切片
x(2); % ans = 32
x(2:3); % ans = 32 53
x(2:end); % ans = 32 53 7 1
x = [4; 32; 53; 7; 1]; % 豎列向量
% x =
% 4.00
% 32.00
% 53.00
% 7.00
% 1.00
% 用范圍初始化向量
x = [1:10]; % x = 1 2 3 4 5 6 7 8 9 10
x = [1:2:10]; % 數(shù)值遞增2,x = 1 3 5 7 9
% 矩陣
A = [1 2 3; 4 5 6; 7 8 9];
% 行用分號分隔,列用空格或逗號分隔
% A =
% 1 2 3
% 4 5 6
% 7 8 9
A(1,3) = 3; % A(行, 列)
A(6); % ans = 8,按列轉(zhuǎn)為向量再索引
A(2,3) = 42 % 把第2行第3列改為42
% A =
% 1 2 3
% 4 5 42
% 7 8 9
分塊矩陣
A = [
1 2 3;
4 5 6;
7 8 9];
% A(1到:2行,2到:3列)
A(1:2,2:3)
% ans =
% 2 3
% 5 6
% 所有第一列
A(:,1)
% ans =
% 1
% 4
% 7
% 所有第一行
A(1,:)
% ans =
% 1 2 3
% 連接矩陣(垂直),與vertcat(A,A)作用相同
[A ; A]
% ans =
% 1 2 3
% 4 5 6
% 7 8 9
% 1 2 3
% 4 5 6
% 7 8 9
% 連接矩陣(平行),與horzcat(A,A)作用相同
[A , A]
% ans =
% 1 2 3 1 2 3
% 4 5 6 4 5 6
% 7 8 9 7 8 9
% 矩陣列重排
A(:, [3 1 2])
%ans =
% 3 1 2
% 6 4 5
% 9 7 8
A(1, :) =[] % 刪除第一行
A(:, 1) =[] % 刪除第一列
squeeze(A); % 刪除只有一行或一列的維度 ie. 2x1x3 -> 2x3
算術(shù)操作
| 符號 | 運算 | 函數(shù) |
|---|---|---|
| + | 加法 | plus |
| + | 一元加法 | uplus |
| - | 減法 | minus |
| - | 一元減法 | uminus |
| .* | 按元素乘法 | times |
| * | 矩陣乘法 | mtimes |
| ./ | 按元素右除 | rdivide |
| / | 矩陣右除 | mrdivide |
| .\ | 按元素左除 | ldivide |
| \ | 矩陣左除(也稱為反斜杠) | mldivide |
| .^ | 按元素求冪 | power |
| ^ | 矩陣冪 | mpower |
| .’ | 轉(zhuǎn)置 | transpose |
| ’ | 復(fù)共軛轉(zhuǎn)置 | ctranspose |
常用矩陣函數(shù)
| 函數(shù) | 作用 |
|---|---|
| zeros(m,n) | 創(chuàng)建 m * n 全零矩陣 |
| ones(m,n) | 創(chuàng)建 m * n 全一矩陣 |
| diag(A) | 獲取矩陣 A 的對角元素 |
| diag(x) | 以向量 x 創(chuàng)建對角矩陣 |
| eye(m,n) | 創(chuàng)建 m * n 單位矩陣 |
| linspace(x1, x2, n) | 返回包含 x1 和 x2 之間的 n 個等間距點的行向量 |
| inv(A) | A 的逆矩陣 |
| det(A) | A 的行列式 |
| eig(A) | A 的特征值和特征向量 |
| trace(A) | 對角線元素之和,相當(dāng)于 sum(diag(A)) |
| isempty(A) | 確定矩陣是否為空 |
| all(A) | 確定所有的矩陣元素全非零 |
| any(A) | 確定矩陣元素中至少有一個非零 |
| isequal(A, B) | 確定兩矩陣是否相等 |
| numel(A) | 返回數(shù)組 A 中的元素數(shù)目,等同于 prod(size(A)) |
| triu(x) | 返回 X 的上三角形部分 |
| tril(x) | 返回 X 的下三角形部分 |
| cross(A,B) | 返回 A 和 B 的叉積 |
| dot(A,B) | 返回 A 和 B 的標(biāo)量點積 |
| transpose(A) | 返回 A 的轉(zhuǎn)置矩陣 |
| fliplr(A) | 返回 A 圍繞垂直軸左右翻轉(zhuǎn)其各列所得矩陣 |
| flipud(A) | 返回 A 圍繞水平軸上下翻轉(zhuǎn)其各行所得矩陣 |
% 矩陣大小
size(A) % ans = 3 3
size(A, 1) % ans = 3,1為一維,即行數(shù)
% 以下為成對的函數(shù),分別為處理整個矩陣和處理矩陣每個元素
exp(A) % 返回向量中的每個元素的指數(shù)e^x
expm(A) % 計算矩陣指數(shù)
sqrt(A) % 返回矩陣 A 的每個元素的平方根
sqrtm(A) % 返回矩陣 A 的主要平方根(即 X*X = A)
% 解矩陣方程(如無解則返回最小二乘解)
x=A\b % 解 Ax=b 比 inv(A)*b 更快更精確
x=b/A % 解 xA=b
inv(A) % 計算逆矩陣
pinv(A) % 返回矩陣A的Moore-Penrose偽逆
% 矩陣因式分解
[L, U, P] = lu(A) % LU 矩陣分解:返回 U 中的上三角矩陣、具有單位對角線的下三角矩陣 L 和置換矩陣 P,使得 L*U = P*A
[V, D] = eig(A) % 特征值和特征向量:返回特征值的對角矩陣 D 和矩陣 V,其列是對應(yīng)的右特征向量,使得 A*V = V*D
[U,S,V] = svd(X) % 奇異值分解:執(zhí)行矩陣 A 的奇異值分解,因此 A = U*S*V'
[Q, R] = qr(A) % 正交三角分解:生成 m×n 上三角形矩陣 R 和 m×m 酉矩陣 Q,這樣 A = Q*R
perms(x) % 返回的矩陣包含了向量 v 中元素按字典順序反序的所有排列
find(x) % 查找非零元素,以一列向量返回其索引。還可使用關(guān)系運算如 find( x == 3 ) 來查找相符元素
矩陣關(guān)系運算
| 符號 | 運算 | 函數(shù) |
|---|---|---|
| == | 等于 | eq |
| ~= | 不等于 | ne |
| > | 大于 | gt |
| >= | 大于或等于 | ge |
| < | 小于 | lt |
| <= | 小于或等于 | le |
A = [
1 2 3;
4 5 6;
7 8 9];
% 返回一個矩陣,其中對原矩陣每個元素分別計算,結(jié)果真則為1
A > 5
% ans =
% 0 0 0
% 0 0 1
% 1 1 1
% 返回一個向量,包含計算結(jié)果為真的元素
A( A > 5 )
% ans =
% 7
% 8
% 6
% 9
常用向量函數(shù)
| 函數(shù) | 作用 |
|---|---|
| max | 查找數(shù)組的最大元素 |
| min | 查找數(shù)組的最小元素 |
| length | 返回數(shù)組長度 |
| sort | 升序排序 |
| sum | 所有元素求和 |
| prod | 所有元素乘積 |
| mode | 出現(xiàn)次數(shù)最多的值 |
| median | 中位數(shù)值 |
| mean | 均值 |
| std | 標(biāo)準(zhǔn)差 |
6. 數(shù)學(xué)
常用數(shù)學(xué)函數(shù)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
exp(x)
sqrt(x)
log(x)
log10(x)
abs(x)
min(x)
max(x)
ceil(x)
floor(x)
round(x)
rem(x)
rand() % (0,1) 內(nèi)均勻分布的隨機(jī)數(shù)
randi(imax) % 返回一個介于 1 和 imax 之間的偽隨機(jī)整數(shù)標(biāo)量
randn() % 返回一個從標(biāo)準(zhǔn)正態(tài)分布中得到的隨機(jī)標(biāo)量。
% 復(fù)數(shù)計算
abs(x) % 計算模
phase(x) % 計算輻角
real(x) % 返回實部 (x = a+jb,返回a)
imag(x) % 返回虛部 (x = a+jb,返回b)
conj(x) % 返回共軛復(fù)數(shù)
% 常用常數(shù)
pi
NaN
inf