第2章:MATLAB基础速通

说实话,很多新手学MATLAB,上来就啃语法书,结果三天就放弃了。我当年也是这样。后来我发现,学MATLAB最好的方式就是——打开软件,边用边学。这一章,我就带你快速过一遍最常用的基础操作。别怕,都是干货。

本章核心:掌握MATLAB的工作界面、变量操作、矩阵运算、脚本编写和绘图命令。学完这一章,你就能独立完成一个简单的运动控制仿真了。

2.1 工作界面介绍

打开MATLAB,你会看到几个主要区域。我个人习惯把界面调成「经典布局」,这样用起来更顺手。

  • 命令窗口(Command Window):这就是你的主战场。输入命令,按回车,立刻出结果。我调试代码时,经常在这里敲几行试试效果。
  • 工作区(Workspace):显示当前所有变量。双击变量可以直接查看和编辑数据。有一次我仿真结果不对,就是在这里发现一个变量名打错了。
  • 当前文件夹(Current Folder):显示你当前的工作目录。建议把每个项目的文件都放在单独的文件夹里,不然找起来很痛苦。
  • 路径设置(Set Path):告诉MATLAB去哪里找你的函数和脚本。我一般把常用工具函数放在一个固定文件夹,然后添加到路径里。

小技巧:在命令窗口输入 clc 可以清屏,输入 clear 可以清空工作区变量。这两个命令我每天要用几十次。

2.2 变量与数据类型

MATLAB的变量不需要提前声明类型。你直接赋值就行,它自己会判断。比如:

a = 10;          % 数值
b = 'hello';     % 字符串
c = [1 2 3];     % 行向量
d = [1; 2; 3];   % 列向量
e = [1 2; 3 4];  % 矩阵

嗯,这里要注意一点:MATLAB默认所有数值都是双精度浮点数。你写 x = 5,它其实是 5.0。如果你需要整数类型,得用 int32(5) 这样转换。

我在做电机控制仿真时,经常遇到数据类型不匹配的问题。比如PID控制器输出是double,但给到PWM模块需要整数。这时候就要用 int16()uint16() 做转换。

避坑指南:我曾经在仿真里定义了一个很大的数组,结果MATLAB直接卡死了。后来才发现,我忘了在语句末尾加分号 ;。不加分号,MATLAB会把结果打印到命令窗口,数据量一大就崩溃。记住:每行代码末尾加分号,除非你想看输出。

2.3 矩阵操作基础

矩阵是MATLAB的灵魂。说白了,MATLAB这个名字就是从「Matrix Laboratory」来的。你想想看,运动控制里的状态空间方程、坐标变换、PID参数整定,哪个离得开矩阵?

常用的矩阵操作:

% 创建矩阵
A = [1 2 3; 4 5 6; 7 8 9];

% 索引(从1开始,不是0)
A(2,3)    % 第2行第3列,结果是6

% 切片
A(1:2, :)  % 取前两行所有列

% 转置
A'

% 矩阵乘法
B = [1; 0; -1];
C = A * B

% 点乘(对应元素相乘)
D = A .* A

为什么索引从1开始?很多从Python转过来的朋友都不习惯。其实MATLAB的设计哲学就是「贴近数学」,而数学里矩阵索引就是从1开始的。我个人觉得用久了反而更自然。

我在做机器人运动学仿真时,经常用矩阵来存储关节角度和末端位姿。比如一个6轴机器人,每个时刻的关节角度就是一个6×1的向量,而末端位姿就是一个4×4的齐次变换矩阵。

操作 语法 说明
创建全零矩阵 zeros(3,4) 3行4列,所有元素为0
创建全1矩阵 ones(2,5) 2行5列,所有元素为1
创建单位矩阵 eye(4) 4×4单位矩阵
创建随机矩阵 rand(3,3) 3×3,元素在0~1之间均匀分布
矩阵拼接 [A B][A; B] 水平或垂直拼接

2.4 脚本与函数编写

脚本和函数是MATLAB编程的两种基本形式。我刚开始学的时候,所有代码都写在脚本里,后来项目越来越大,才发现函数才是王道。

脚本(Script):就是一个.m文件,里面放一堆命令。运行脚本相当于在命令窗口逐行输入这些命令。适合做一次性计算或测试。

% 文件名:my_script.m
% 一个简单的脚本示例
t = 0:0.01:10;
y = sin(t);
plot(t, y);
title('正弦波');

函数(Function):有输入输出参数,有自己的工作空间。函数内部的变量不会污染全局工作区。这是我最推荐的方式。

% 文件名:my_func.m
function y = my_func(x)
    % 计算输入x的平方
    y = x^2;
end

小技巧:函数名要和文件名保持一致。比如函数叫 my_func,文件就要叫 my_func.m。不然MATLAB会找不到。我曾经因为这个bug查了半小时...

写函数时,我习惯在开头加一段注释,说明函数的功能、输入输出参数。这样过几个月再看,还能想起来当初写的是什么。

2.5 常用绘图命令

做运动控制仿真,绘图是必不可少的。你看曲线走势、看响应速度、看稳态误差,都得靠图。MATLAB的绘图功能非常强大,我们先用最基础的几个。

% 二维曲线
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);

figure;  % 创建新图形窗口
plot(x, y1, 'r-', 'LineWidth', 2);  % 红色实线
hold on;  % 保持当前图形
plot(x, y2, 'b--', 'LineWidth', 2); % 蓝色虚线
hold off;

xlabel('时间 (s)');
ylabel('幅值');
title('正弦与余弦曲线');
legend('sin(x)', 'cos(x)');
grid on;  % 显示网格

为什么用 hold on?因为MATLAB默认每次 plot 都会覆盖之前的图形。加上 hold on 才能在同一张图上画多条曲线。我刚开始做PID调参时,经常把不同Kp值的响应曲线画在一起对比,一眼就能看出哪个参数更好。

其他常用绘图命令:

  • subplot(m,n,p):把图形窗口分成m行n列,在第p个子图里绘图。适合多图对比。
  • semilogx / semilogy / loglog:对数坐标绘图。分析频域响应时特别有用。
  • bar:柱状图。展示离散数据。
  • histogram:直方图。看数据分布。

避坑指南:我曾经在仿真循环里直接调用 plot,结果每迭代一次就弹出一个新窗口,电脑直接卡死。正确的做法是:在循环外用 figure 创建窗口,循环内用 set 命令更新图形数据。或者用 animatedline 做动态绘图。

本章小结

这一章我们快速过了一遍MATLAB的基础操作。说实话,这些内容看起来简单,但都是后面做运动控制仿真的基石。你想想看,从建立电机模型到设计控制器,再到分析仿真结果,每一步都离不开这些基础操作。

我个人建议:看完这一章后,打开MATLAB,把每个示例代码都敲一遍。别复制粘贴,亲手敲。只有亲手敲过,你才会记住那些细节——比如分号、括号、逗号的位置。我当年就是这么过来的。

MATLAB基础速通知识体系 MATLAB基础 工作界面介绍 命令窗口 / 工作区 当前文件夹 / 路径设置 变量与数据类型 数值 / 字符串 / 向量 矩阵 / 数据类型转换 矩阵操作基础 创建 / 索引 / 切片 转置 / 乘法 / 点乘 脚本与函数编写 脚本 / 函数 / 工作空间 常用绘图命令 plot / subplot / hold on

这张图把本章的知识体系串起来了。你可以看到,五个分支之间其实是有联系的——比如矩阵操作是绘图的基础,脚本和函数又依赖于变量操作。学的时候别把它们割裂开,要融会贯通。

专注资料整理