MATLAB个人使用笔记

MATLAB 个人笔记

MATLAB 版本 R2024b,该文不定时更新

变量

MATLAB中的基本变量单位是矩阵;

声明符号表达式

1
2
3
syms a;
% 现在 a 是一个符号,由 a 组成的表达式也是符号表达式
% 符号表达式被广泛运用于方法调用

程式结构

选择

1
2
3
4
if state
elseif
else
end

for循环

1
2
3
for i = val
end
% val 是一个矩阵,i 将会遍历其中的元素

while循环

1
2
while state
end

函数

显式声明函数

1
2
3
4
5
function result = testfunc(inputMatrix)
product = det(inputMatrix);
inputMatrix = inputMatrix .* product;
result = inputMatrix;
end

隐式声明函数

1
matrixLength = @(A) sqrt(sum(A.^2));

矩阵

创建特殊矩阵

1
2
3
z = zeros(3, 5);
z = ones(3);
z = eye(3); % 单位矩阵

转置

1
a = a';

矩阵求值

1
val = det(a);

数值运算与矩阵运算

1
2
c = a * b; % 矩阵相乘算法
c = a .* b; % 矩阵的每个对应元素相乘,数值乘法

代数操作

解方程

1
2
3
s = solve(eqn, x);
% eqn 为方程表达式,x 为需要求解的参量
% s 为解集,周期函数无穷个解时只返回每个特征下的一个解

计算代数式

1
2
3
y = 2 * x ^ 3 + 3 * x ^ 2 - 12 * x + 17;
val = double(subs(y, a));
% 将符号变量 a 代入多项式求值

计算矩阵表示的多项式

1
2
3
4
5
6
7
8
9
10
11
p = [4, 3, 2, 1];
% 相当于 4x^3 + 3x^2 + 2x + 1
val = polyval(p, 2);
m = polyvalm(p, m);
% 将值代入多项式求值 / 对矩阵m每个元素进行多项式运算
sol = roots(p);
% 求所有使得多项式为0的解
pol = poly(sol);
% 通过解反之确定多项式(不唯一,但解集内每组解互为倍数关系)
fit = polyfit(x, y, 5);
% 针对指定的点集 x 与 y,进行多项式拟合(插值法)

随机数

1
2
3
4
y = randi([1, 20], 1, 6);
% 生成随机数作为y值([1, 20]指明范围,1行6列)
x = randperm(20, 5);
% 生成随机数作为x值([1, 20]指明范围,5行1列,同时不重复)

几何绘图

点阵绘图

1
2
3
4
x = -2 * pi: 0.01: 2 * pi;
y = sin(x);
plot(x, y, 'r');
% 对 x 与 y 的所有一一对应组合代表的点绘图

指定多图

1
subplot(row, col, target);

多函数绘制到同一图

1
hold on;

关系式绘图

1
2
3
fplot(@(x) sin(x) + cos(x), [-2 * pi, 2 * pi], 'r');
% 等价于eqn = sin(x) + cos(x);
% fplot(eqn, [-2 * pi, 2 * pi], 'r');

指定绘图区标签特性

1
2
3
4
xlabel('x');
ylabel('sin(x) & cos(x)');
title('sin(x) & cos(x)');
grid on, axis equal;

条形统计图

1
2
bar(x, y);
% x 与 y 是两个矩阵,一一对应

网格矩阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[x, y] = meshgrid(-3: 1: 3, -2: 1: 2);
% x 与 y 的所有对应组代表的点构成一个网格
% x =
% -3 -2 -1 0 1 2 3
% -3 -2 -1 0 1 2 3
% -3 -2 -1 0 1 2 3
% -3 -2 -1 0 1 2 3
% -3 -2 -1 0 1 2 3
% y =
% -2 -2 -2 -2 -2 -2 -2
% -1 -1 -1 -1 -1 -1 -1
% 0 0 0 0 0 0 0
% 1 1 1 1 1 1 1
% 2 2 2 2 2 2 2

3D点阵绘图

1
2
3
4
5
[x, y] = meshgrid(-5: 0.1: 5, -5: 0.1: 5);
z = sqrt(25 - x.^2 + y.^2);
% plot3 / mesh / surfc / surfl都可以起到相似的效果,样式不同
% 在Figure界面中可以更改颜色样式
surf(x, y, z);

微积分学

求极限

1
2
result = limit(eqn, x, a, 'left | right');
% eqn 为符号表达式,x 为趋近的对象,a 为趋近的值,最后一个可选参数指代左右极限

求导数

1
2
eqn_diff = diff(eqn, a);
% eqn 为符号表达式,eqn_diff储存求导结果,a指代求几阶导

求不定积分

1
int_eqn = int(eqn);

求定积分

1
2
3
4
5
6
7
8
val = int(eqn, a, b);
% 对 eqn 在 [a, b] 上求解定积分,
% 当存在解析解(由初等函数组成的表达式),则返回数值;否则返回含有特殊函数的表达式
% 要求解广义积分,用-inf或inf代替对应参数
val = integral(eqn, a, b);
% 该函数对于无法求解析解的目标返回近似数值解
val = integral2(eqn, a, b);
% 该函数同理,返回二重积分

对timeseries类取积分

分析Simulink中打表数据并积分

1
2
3
4
5
6
timeseriesData = get(data);
x = timeseriesData.Time;
y = timeseriesData.Data;
integral = cumtrapz(x, y);
% cumtrapz(x, y)是梯形积分函数,根据采样点对每个微元积分;
% integral是一个大小与x相同的矩阵,在对应位置上记录原数据在[0, x]上的积分值。

文件

基本读取

1
2
filename = "soldiers.txt";
datas = importdata(filename, ",");

建议disp(datas)查看具体读取内容,datas为结构体,包含读取的数据。

此外fscanf等方法允许对文件做到字符级别的读取。