加载中...
MATLAB快速参考
发表于:2022-09-06 | 分类: code
字数统计: 3.8k | 阅读时长: 16分钟 |

原文GitHub - MATLAB-cheat-sheet,本文做了翻译和删改

MATLAB 即 Mat LABoratory(一做坐一天坐垫实验室)MATrix LABoratory(矩阵实验室)。是一种常用于工程和数学的强大语言。

注意:

  • MATLAB中的函数基本有多种不同参数的重载,本手册只写其中比较常用的方法,实际使用时可以善用help和doc来查询更多用法。
  • 参考中可能会有“向量“、”矩阵”、“数组”交替出现。矩阵属于向量,数组即一维矩阵。

1. 基础

注释和代码块

%% 代码块由两个百分号开始,作为块标题
% 注释由一个百分号标记
% Ctrl + R 注释选定的代码
% Ctrl + T 取消注释选定的代码

%{
像这样
注释
多行文字
%}

% 两个百分号指示新代码块开始
% 每个代码块可以移动光标来指定,并通过点击“运行节”或
% 使用 Ctrl+Shift+Enter 快捷键来执行。macOS使用 Cmd+Shift+Return。

%% 这里开始新的代码块
%  代码块的用途之一是把耗时长计算量大但很少更改的初始化代码独立开来,如加载数据
load myFile.mat y

%% 这是另一个代码块
%  这个代码块可以单独编辑和运行,适合用于试验代码和演示
A = A * 2;
plot(A);

% 过长的代码可以使用'...'来转到下一行继续:
 a = 1 + 2 + ...
 + 4

辅助命令

help [command]    % 在命令行显示命令帮助
doc [command]     % 打开帮助窗口显示命令的帮助
lookfor [command]       % 搜索命令,将在所有MATLAB文件中搜索命令相关的第一行注释
lookfor [command] -all  % 搜索命令,将在所有MATLAB文件中搜索每一行相关的

who   % 列出工作区中的变量
whos  % 列出工作区中的变量及大小和类型
clear       % 从工作区中删除所有项目、释放系统内存
clear('A')  % 从工作区中删除指定的变量
openvar('A')  % 在变量编辑器或其他图形编辑工具中打开工作区变量

% 变量可以保存到.mat文件
save('myFileName.mat') % 保存工作区变量到文件
load('myFileName.mat') % 从文件加载变量
% 从文件加载指定的变量y
load('myFile.mat', 'y')  % 标准函数语法
load myFile.mat y        % 命令行语法,无括号,用空格代替逗号

clc        % 清空命令行窗口
diary      % 将命令行窗口文本保存到文件中
close      % 关闭当前图窗
close all  % 关闭所有图窗
Ctrl + C     % 终止当前的计算% 使用方向键⬆查看历史命令

% 设置输出小数位数,除bank外整数一般不显示小数
format short    % 4位(默认)
format long     % 15位
format bank     % 固定输出2位小数,用于财务计算

edit('myfunction.m') % 在编辑器中打开文件
type('myfunction.m') % 在命令行窗口显示文件内容

% 代码性能优化
profile on      % 启动函数性能探查器
profile off     % 关闭函数性能的探查器
profile viewer  % 打开性能探查器

% 使用操作系统的命令
!ping baidu.com

变量和表达式

% 变量
myVariable = 4  % 工作区会显示新创建的变量
myVariable = 4; % 分号阻止结果输出到命令行窗口

% 算术计算
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]) % ==仅能对比标量,此函数可对比向量(矩阵)

% 字符串
a = 'MyString'
length(a)  % ans = 8
a(2)       % ans = y
[a,a]      % ans = MyStringMyString


% 元胞数组(Cells)
a = {'one', 'two', 'three'}
a(1)        % ans = 'one' - 返回元胞(cell)
char(a(1))  % ans = one - 返回字符串

% 结构体
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)       % 以二进制读取数据

% 输出
disp(a);                   % 打印变量a
disp('Hello World');       % 打印一个字符串
fprintf('a = %.2f\n', a);  % 用类似C语言的方式格式化输出

% 选择结构
if (a > 15)
    disp('Greater than 15')
elseif (a == 23)
    disp('a is 23')
else
    disp('neither condition met')
end

% for循环
for k = 1:5
    disp(k)
end

% while循环
k = 0;
while (k < 5)
    k = k + 1;
end

% 代码执行计时: 'toc' 打印从 'tic' 开始中间经过的时间
tic
A = rand(1000);
A*A*A*A*A*A*A;
toc

% 暂停执行正在运行的程序,并允许通过键盘进行控制。此时进入调试模式,可以手动更改变量。
% 此时可以在命令行窗口输入“dbcont”来继续,或输入“dbquit”来直接终止并退出
keyboard

3. 函数和脚本

% 从脚本调用函数
% [输出参数] = 函数名(输入参数)
[V,D] = eig(A);  % 特征值和特征向量
[~,D] = eig(A);  % 如果你只想获取对角矩阵 D,需使用 ~ 占位

% 函数或脚本必须位于MATLAB的“path”中或当前工作文件夹,才能使用
path % 显示当前“path”包含的路径
addpath /path/to/dir   % 添加路径到“path”
rmpath /path/to/dir    % 从“path”移除路径
cd /path/to/move/into  % 改变工作文件夹

% 脚本文件
% 脚本文件可以记录需要依次运行的命令
% 可以避免每次执行都在命令窗口重复输入
% 使用 .m 后缀

% 函数文件
% 同脚本文件使用 .m 后缀
% 但是可以允许输入和返回参数
% 函数文件有其自己的工作区。(如不同的变量空间)
% 函数名需与文件名相同(如以下示例需保存为 double_input.m)
% 'help double_input.m' 返回函数声明下的第一行注释
function output = double_input(x)
    %double_input(x) 返回 x 的 2 倍
    output = 2*x;
end
double_input(6) % ans = 12

% 匿名函数
% 创建一个函数且不需新建文件
% 以下示例定义一个函数返回输入值的平方,并将其(句柄)绑定到“sqr”
sqr = @(x) x.^2;
sqr(10) % ans = 100

% 查找更多函数有关文档
doc function_handle

4. 绘图

% 绘图
x = 0:.10:2*pi; % 创建一个向量从 1 开始到 2*pi 结束,间距递增
y = sin(x);
plot(x,y)
xlabel('x 轴')
ylabel('y 轴')
title('y = sin(x) 的函数图像')
axis([0 2*pi -1 1]) % x范围从 0 到 2*pi,y 范围从 -1 到 1
plot(x,y1,'-',x,y2,'--',x,y3,':') % 在一张图上绘制多个函数
legend('线 1 标签', '线 2 标签') % 在右上角添加不同函数线条的图例

% 另一种在同一张图上绘制多个函数的方式
% “hold on”时继续 plot 将在同一张图上绘制
plot(x, y)
hold on
plot(x, z)
hold off

grid on      % 显示网格。使用 grid off 关闭网格
axis square  % 使用相同长度的坐标轴线
axis equal   % 沿每个坐标轴使用相同的数据单位长度

% 使用 subplot 创建多个图窗
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)    % 以对数为 xy 轴坐标单位绘图
semilogx(x, y)  % 以对数为 x 轴坐标单位绘图
semilogy(x, y)  % 以对数为 y 轴坐标单位绘图

% 绘制表达式或函数
fplot(@(x) x^2, [2,5]) % 在 x=2 到 x=5 的区间上绘制 x^2

f = figure  % 创建Figure对象,绑定在句柄 f
figure(f)   % 将 f 指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面
close(f)    % 关闭 f 指定的图窗
close all  % 关闭所有图窗
close      % 关闭当前图窗

shg % 把图窗窗口调到屏幕前
clf clear % 清楚当前图窗,并重置大部分图窗的绘制参数

% 绘制参数可以通过图窗句柄修改
% 如下函数将返回当前图窗的句柄并绑定在 h
h = plot(x, y); % 你可以在创建图窗时保存句柄
set(h, 'Color', 'r')  % 设置颜色
% 也可直接修改对象 h,效果同上
h.Color = 'r';
% 'r' 红(red), 'y' 黄(yellow), 'g' 绿(green), 'c' 青(cyan)
% 'b' 蓝(blue), 'm' 洋红(magenta), 'k' 黑(black), 'w' 白(white)
set(h, 'LineStyle', '--')  % 设置线条
% '--' 实线, '---' 虚线, ':' 点点点, '-.' 点线, 'none' 没有线
get(h, 'LineStyle')

% 返回当前图窗中的当前坐标区句柄
set(gca, 'XDir', 'reverse'); % 翻转x轴方向

% 基于向量 x 和 y 中包含的坐标返回二维网格坐标
[X, Y] = meshgrid(x_min:step:x_max, y_min:step:y_max)

scatter(x, y);  % 散点图
hist(x);        % 直方图
bar(x);         % 条形图
stem(x);        % 绘制离散序列数据

z = sin(x);
plot3(x,y,z); % 三维线图

pcolor(A)   % 矩阵伪彩(棋盘)图: 在网格上绘制矩形,颜色由值决定
contour(A)  % 矩阵的等高线图
contourf(A) % 填充的二维等高线图
mesh(A)     % 网格图


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];  % 数值递增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,按列转为向量再索引
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

算术操作

符号 运算 函数
+ 加法 plus
+ 一元加法 uplus
- 减法 minus
- 一元减法 uminus
.* 按元素乘法 times
* 矩阵乘法 mtimes
./ 按元素右除 rdivide
/ 矩阵右除 mrdivide
.\ 按元素左除 ldivide
\ 矩阵左除(也称为反斜杠) mldivide
.^ 按元素求幂 power
^ 矩阵幂 mpower
.’ 转置 transpose
复共轭转置 ctranspose

常用矩阵函数

函数 作用
zeros(m,n) 创建 m * n 全零矩阵
ones(m,n) 创建 m * n 全一矩阵
diag(A) 获取矩阵 A 的对角元素
diag(x) 以向量 x 创建对角矩阵
eye(m,n) 创建 m * n 单位矩阵
linspace(x1, x2, n) 返回包含 x1 和 x2 之间的 n 个等间距点的行向量
inv(A) A 的逆矩阵
det(A) A 的行列式
eig(A) A 的特征值和特征向量
trace(A) 对角线元素之和,相当于 sum(diag(A))
isempty(A) 确定矩阵是否为空
all(A) 确定所有的矩阵元素全非零
any(A) 确定矩阵元素中至少有一个非零
isequal(A, B) 确定两矩阵是否相等
numel(A) 返回数组 A 中的元素数目,等同于 prod(size(A))
triu(x) 返回 X 的上三角形部分
tril(x) 返回 X 的下三角形部分
cross(A,B) 返回 A 和 B 的叉积
dot(A,B) 返回 A 和 B 的标量点积
transpose(A) 返回 A 的转置矩阵
fliplr(A) 返回 A 围绕垂直轴左右翻转其各列所得矩阵
flipud(A) 返回 A 围绕水平轴上下翻转其各行所得矩阵
% 矩阵大小
size(A)     % ans = 3 3
size(A, 1)  % ans = 3,1为一维,即行数 

% 以下为成对的函数,分别为处理整个矩阵和处理矩阵每个元素
exp(A)    % 返回向量中的每个元素的指数e^x
expm(A)   % 计算矩阵指数
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,其列是对应的右特征向量,使得 A*V = V*D
[U,S,V] = svd(X) % 奇异值分解:执行矩阵 A 的奇异值分解,因此 A = U*S*V'
[Q, R] = qr(A) % 正交三角分解:生成 m×n 上三角形矩阵 R 和 m×m 酉矩阵 Q,这样 A = Q*R


perms(x)  % 返回的矩阵包含了向量 v 中元素按字典顺序反序的所有排列
find(x)   % 查找非零元素,以一列向量返回其索引。还可使用关系运算如 find( x == 3 ) 来查找相符元素

矩阵关系运算

符号 运算 函数
== 等于 eq
~= 不等于 ne
> 大于 gt
>= 大于或等于 ge
< 小于 lt
<= 小于或等于 le
A = [
    1 2 3;
    4 5 6;
    7 8 9];

% 返回一个矩阵,其中对原矩阵每个元素分别计算,结果真则为1
A > 5
% ans =
%    0   0   0
%    0   0   1
%    1   1   1

% 返回一个向量,包含计算结果为真的元素
A( A > 5 )
% ans =
%      7
%      8
%      6
%      9

常用向量函数

函数 作用
max 查找数组的最大元素
min 查找数组的最小元素
length 返回数组长度
sort 升序排序
sum 所有元素求和
prod 所有元素乘积
mode 出现次数最多的值
median 中位数值
mean 均值
std 标准差

6. 数学

常用数学函数

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) 内均匀分布的随机数
randi(imax)  % 返回一个介于 1 和 imax 之间的伪随机整数标量
randn()      % 返回一个从标准正态分布中得到的随机标量。

% 复数计算
abs(x)   % 计算模
phase(x) % 计算辐角
real(x)  % 返回实部 (x = a+jb,返回a)
imag(x)  % 返回虚部 (x = a+jb,返回b)
conj(x)  % 返回共轭复数

% 常用常数
pi
NaN
inf
上一篇:
医学影像设备学与物理学临门一脚
下一篇:
Python基础
本文目录
本文目录