function stats = summarizeSignal(x, opts)
arguments
x (:,1) double {mustBeFinite}
opts.RemoveMissing (1,1) logical = true
end
if opts.RemoveMissing
x = rmmissing(x);
end
stats = table(mean(x), std(x), min(x), max(x), ...
'VariableNames', ["Mean","Std","Min","Max"]);
end
三条回忆锚点
脚本共享基础工作区;函数拥有独立工作区。
先用 size/class 检查输入,再怀疑算法。
可复用代码优先写成带 arguments 块的函数。
ML-02 · Matrices & Linear Algebra
矩阵、索引与线性代数
MATLAB 的第一语言是数组;维度、隐式扩展和矩阵/逐元素运算符必须明确。
A \ b求解线性方程,通常不要显式计算 inv(A)
.* ./ .^逐元素乘、除、幂;与 * / ^ 区分
eig / svd / qr特征分解、奇异值分解与 QR 分解
sparse / nnz构造稀疏矩阵并检查非零元素数
RUNNABLE PATTERN
A = [4 -1 0; -1 4 -1; 0 -1 3];
b = [15; 10; 10];
x = A \ b; % 稳定求解 Ax = b
relativeResidual = norm(A*x-b) / norm(b);
[U,S,V] = svd(A, "econ"); % 检查秩与条件性
numericalRank = rank(A);
三条回忆锚点
A(i,j) 是位置索引,A(mask) 是逻辑筛选。
转置向量用 .' 避免复数共轭;共轭转置才用单引号。
方程求解优先反斜杠,病态问题同时检查 cond 或 rcond。
ML-03 · Plotting & Visualization
绘图与数据可视化
从 tiledlayout 建立可复用图版,用句柄控制坐标轴、图例、色彩与导出质量。
tiledlayout / nexttile用稳定布局替代 subplot 拼接
plot / scatter / surf绘制曲线、散点和三维曲面
xline / yline / annotation标注阈值、事件与解释信息
exportgraphics按目标分辨率导出论文级图片
RUNNABLE PATTERN
t = linspace(0, 4*pi, 800);
y = exp(-0.12*t).*sin(2*t);
tl = tiledlayout(2,1, "TileSpacing","compact");
nexttile; plot(t,y, "LineWidth",1.6); yline(0); grid on
title("Damped response"); ylabel("Amplitude")
nexttile; semilogy(t, abs(y)+eps); grid on
xlabel("Time / s"); ylabel("|y|")
exportgraphics(tl, "response.png", "Resolution",300);
三条回忆锚点
先画数据,再设置轴、单位、图例,最后统一导出。
保留图形/坐标轴句柄,避免依赖当前对象 gcf/gca。
颜色之外还要用线型和标记编码,保证可访问性。
ML-04 · Symbolic Math
符号计算与公式验证
用符号工具推导、化简和验证边界,再把结果转换成可执行的数值函数。
syms / assume声明符号变量和物理取值条件
diff / int / limit求导、积分与极限
solve / vpasolve精确求解或指定初值数值求根
matlabFunction把符号表达式编译成数值函数句柄
REQUIRES · SYMBOLIC MATH TOOLBOX
syms x
syms a positive
f = exp(-a*x^2);
area = int(f, x, -inf, inf);
check = simplify(area - sqrt(sym(pi)/a));
df = diff(f, x);
fNumeric = matlabFunction(f, "Vars", {x,a});
y = fNumeric(linspace(-2,2,101), 1.5);
三条回忆锚点
符号结果依赖假设;用 assume 明确正数、实数等条件。
solve 给解析解,vpasolve 给指定区间或初值附近的数值解。
进入循环或大数据前,先用 matlabFunction 转成数值函数。
ML-05 · Numerical Methods
数值方法与优化
把误差、容差、初值和收敛状态一起保存;数值答案必须能够解释精度来源。
fzero / roots求非线性函数零点或多项式根
integral / trapz函数自适应积分或采样数据积分
interp1 / griddedInterpolant一维插值与可复用网格插值器
fminsearch / fmincon无约束或带约束目标优化
RUNNABLE PATTERN
t = linspace(0,10,60)';
y = 2.4*exp(-0.35*t) + 0.03*sin(4*t); % 示例观测
model = @(p,x) p(1)*exp(-p(2)*x);
loss = @(p) sum((model(p,t)-y).^2);
p0 = [max(y), 0.1];
options = optimset("Display","off", "TolX",1e-9);
[pBest, sse, exitflag, output] = fminsearch(loss,p0,options);
assert(exitflag > 0, "优化未正常收敛");
model = "motor_control";
load_system(model);
in = Simulink.SimulationInput(model);
in = in.setVariable("Kp", 1.8);
in = in.setVariable("Ki", 0.35);
in = in.setModelParameter("StopTime", "8");
out = sim(in);
signal = out.logsout.get("speed").Values;
assert(max(abs(signal.Data)) < 500, "转速越界");
三条回忆锚点
不要把关键参数散落在 Base Workspace;优先数据字典或 SimulationInput。