第一章 MATLAB基础操作回顾:工作区与路径管理、常用数据类型与矩阵操作、脚本与函数编写、调试工具的使用
各位工程师朋友,大家好。我是老张,在运动控制这个行当摸爬滚打了十几年。今天咱们开始聊MATLAB,别急着划走——我知道很多人觉得MATLAB就是个“高级计算器”,但说实话,真正用好它的人,效率能甩开别人几条街。
这一章,我带你快速过一遍MATLAB最核心的基础操作。嗯,都是干货,没有废话。
1.1 工作区与路径管理——别让文件“跑丢了”
我刚入行那会儿,最头疼的就是文件管理。写了一大堆脚本,结果第二天打开MATLAB,找不到昨天保存的变量了。你想想看,多耽误事。
工作区(Workspace) 就是你当前MATLAB环境里所有变量的“大本营”。你算出来的数据、加载的模型,全在这儿。我建议你养成一个好习惯:每次开始新项目,先执行 clear all 清空工作区,避免旧数据干扰新计算。
save('workspace.mat') 保存整个工作区,下次用 load('workspace.mat') 一键恢复。我在调试运动控制算法时,经常把中间结果存下来,方便对比不同参数的效果。
路径管理 就更关键了。MATLAB默认只搜索当前文件夹和已添加的路径。如果你写了一个函数,放在别的文件夹里,MATLAB找不到就会报错。
我曾经犯过一个低级错误:把自定义函数放在桌面,结果换了台电脑,所有脚本都跑不起来了。后来我学乖了,用 addpath 和 rmpath 管理路径。更规范的做法是:把所有项目文件放在同一个根目录下,用 cd 切换到该目录。
% 添加路径示例
addpath('C:\MyProject\Functions'); % 添加自定义函数文件夹
savepath; % 保存路径设置,下次启动自动加载
1.2 常用数据类型与矩阵操作——MATLAB的“灵魂”
MATLAB里什么最重要?矩阵。说白了,MATLAB就是为矩阵运算而生的。你想想看,运动控制里的坐标变换、PID参数整定,哪个离得开矩阵?
基本数据类型:
- 数值型:double(默认)、single、int8/16/32/64。我一般用double,精度够用,计算也快。
- 字符型:char 和 string。注意,MATLAB里单引号是char,双引号是string,别搞混了。
- 逻辑型:true/false,常用于条件判断和矩阵索引。
- 结构体:struct,适合打包管理多个相关变量。比如电机参数:
motor.Kt = 0.5; motor.J = 0.01; - 元胞数组:cell,可以装不同类型的数据。我在做多轴同步控制时,常用cell存储各轴的参数。
矩阵操作——这是重头戏:
创建矩阵很简单:
A = [1 2 3; 4 5 6; 7 8 9]; % 3x3矩阵
B = zeros(3,4); % 全零矩阵
C = eye(4); % 单位矩阵
D = rand(3,3); % 随机矩阵
索引和切片是高频操作。我习惯用 end 关键字,省事:
A(2,3) % 第2行第3列
A(:,2) % 所有行的第2列
A(1:2,:) % 前两行所有列
A(end,:) % 最后一行
A*B 是矩阵乘法,A.*B 是对应元素相乘。差一个点,结果天差地别。
矩阵运算常用函数:
| 函数 | 说明 | 示例 |
|---|---|---|
size() |
获取矩阵维度 | [m,n] = size(A) |
reshape() |
改变矩阵形状 | B = reshape(A, 9, 1) |
repmat() |
复制矩阵 | C = repmat(A, 2, 3) |
inv() |
求逆矩阵 | inv(A) |
det() |
求行列式 | det(A) |
1.3 脚本与函数编写——从“一次性”到“可复用”
脚本和函数,是MATLAB编程的两大基本形式。我刚开始写代码时,全是脚本,一个文件几百行,改起来想哭。后来我学会了函数,效率翻倍。
脚本(Script):就是按顺序执行的命令集合。适合做一次性计算或快速验证。比如:
% 计算电机转速
V = 24; % 电压
R = 0.5; % 电阻
Kt = 0.1; % 转矩常数
omega = V / (R * Kt);
disp(['转速:', num2str(omega), ' rad/s']);
函数(Function):有输入输出,可重复调用。我建议你把核心算法写成函数,这样调试和维护都方便。
function [omega] = calcMotorSpeed(V, R, Kt)
% 计算直流电机空载转速
% 输入:V-电压,R-电枢电阻,Kt-转矩常数
% 输出:omega-转速(rad/s)
omega = V / (R * Kt);
end
函数与脚本的区别:
- 函数有自己的工作区,变量不会污染全局环境。脚本共享工作区。
- 函数可以递归调用,脚本不行。
- 函数执行效率更高,因为MATLAB会预编译。
1.4 调试工具的使用——别怕Bug,怕的是不会找Bug
写代码不出Bug?那是不可能的。我写了十几年代码,照样天天跟Bug打交道。关键是,你得会用工具快速定位问题。
MATLAB调试三板斧:
- 断点(Breakpoints):在行号旁边点一下,出现红点。运行到这一行会暂停。我一般先在可疑的变量赋值处设断点。
- 步进(Step):F10单步执行,F11进入函数内部。配合工作区查看变量值变化。
- 条件断点:右键断点,设置触发条件。比如
i == 100,只在循环到第100次时暂停。这个在调试运动控制迭代算法时特别有用。
常用调试命令:
dbstop if error % 遇到错误自动进入调试模式
dbcont % 继续执行
dbquit % 退出调试模式
keyboard % 在代码中插入调试点,手动输入命令查看变量
我记得有一次调试一个轨迹规划算法,结果一直不对。我用了 keyboard 在循环里暂停,手动打印每一步的中间变量,才发现是角度单位搞错了——用了度,但函数要求弧度。嗯,这种低级错误,谁没犯过呢?
知识体系总览
下面这张图,是我自己总结的本章知识结构。你看一眼,心里就有数了。
好了,这一章的内容就这些。别看都是基础,但基础不牢,地动山摇。我见过太多工程师,算法写得漂亮,结果卡在矩阵索引这种小问题上。嗯,你先把这些练熟,后面咱们再上硬菜。
公众号:蓝海资料掘金营,微信deep3321