MATLAB10000问:矩阵进阶、可视化、数值计算与信号处理

本篇迁移 MATLAB/Simulink 10000 问第二批 12 道题,覆盖矩阵变形、逻辑索引、绘图布局、数值求解、约束优化、大文件读取、FFT、时频分析和滤波器设计。

13. subplot(2,2,3) 中的 2、2、3 分别表示什么?

答案: subplot(m,n,p) 把当前 Figure 划分为 m 行、n 列的网格,并激活第 p 个位置,按行优先从左到右、从上到下编号。因此 subplot(2,2,3) 选中左下角的子图。复杂布局可用 tiledlayout/nexttile,更灵活地控制间距和跨行跨列。

14. reshape、repmat、permute、squeeze 分别做什么?

答案:

  • reshape:在元素总数不变的前提下改变数组维度。
  • repmat:按指定次数复制数组块。
  • permute:按给定维度顺序重排维度。
  • squeeze:移除长度为 1 的维度。

permute 不等同于转置:转置通常交换二维矩阵的行列;permute 可对 N 维数组任意重排维度。使用前应确认数据维度含义,尤其是图像、时序和多通道传感器数据。

15. A(A>5) 逻辑索引返回什么?

答案: A>5 产生与 A 尺寸兼容的逻辑数组,A(A>5) 返回满足条件的元素,按 MATLAB 的线性索引顺序排列成列向量。逻辑索引也可用于赋值,例如 A(A<0)=0。若需要保留原矩阵形状,应使用逻辑掩码与 reshape 或按维度操作。

16. fzero、fsolve 和 ode45 分别解决什么数值问题?

答案:

  • fzero:求单变量函数 f(x)=0 的根,通常需要根附近的区间或初值。
  • fsolve:求非线性方程组 F(x)=0。
  • ode45:数值求解常微分方程初值问题,采用显式 Runge-Kutta 方法,适合非刚性问题。

它们的数学问题类型不同,不能互相替代。刚性 ODE 可能更适合 ode15s 等求解器;数值求解结果还要检查容差、初值、收敛和模型适用性。

17. fmincon 收敛了,如何判断是不是全局最优?

答案: fmincon 是局部约束优化求解器,返回收敛不等于证明全局最优。可采取:

  • 多初值运行,观察不同起点是否收敛到同一解。
  • 检查约束可行性、梯度、KKT 条件和退出标志。
  • 对非凸问题考虑全局优化工具、随机搜索或问题结构分析。
  • 用独立仿真和工程约束验证候选解。

全局最优性证明通常需要额外数学条件或全局算法,不能仅凭一次运行的 exitflag 判断。

18. load、readtable、readmatrix 和 importdata 如何选择?

答案:

  • load:适合 .mat 文件,也支持部分纯数值文本格式。
  • readtable:适合含表头、混合类型和变量名的数据。
  • readmatrix:适合规则的数值矩阵。
  • importdata:较通用的导入接口,适合一些混合格式,但复杂数据建议明确指定导入选项。

csvread 属于较旧接口,现代代码通常优先用 readmatrix/readtable。选择时先确认列类型、缺失值、日期格式、分隔符和编码。

19. 1GB CSV 文件不能一次读入内存,怎样分块处理?

答案: 可使用 datastore/tabularTextDatastore,或按固定行数分块读取,逐块处理并把中间结果写出。不要一次性将全文件转换成大型 table。对列类型和导入选项应提前指定,避免每个块重复推断类型。

ds = tabularTextDatastore("large.csv");
while hasdata(ds)
    T = read(ds);
    % 对当前块进行处理
end

若数据适合列式或分区存储,可考虑 Parquet、MAT 文件分块或数据库;具体方案要按数据量、内存和访问模式选择。

20. 对 N 点采样数据做 FFT,频率轴怎样计算?

答案: 采样频率 fs、采样点数 N 对应频率分辨率 Δf=fs/N。未移位 FFT 的频点可按 k·fs/N 构造,k=0,…,N−1;实信号常只展示单边谱 0 到 Nyquist 频率 fs/2,并按幅值归一化。

N = length(x);
X = fft(x);
f = (0:N-1) * fs / N;

实际绘图需考虑窗函数、幅值标定、直流分量、单边谱倍增和频谱泄漏。若使用 fftshift,频率轴也要同步移位。

21. spectrogram 为什么要加窗?Hann、Hamming、Blackman 怎么选?

答案: 短时傅里叶变换把信号分成重叠时间片,每片乘窗后再做 FFT。窗函数减小截断造成的频谱泄漏,但会改变主瓣宽度和旁瓣高度。

  • Hann:常用通用选择,旁瓣衰减较好。
  • Hamming:第一旁瓣较低,适合许多一般频谱分析。
  • Blackman:旁瓣抑制更强,但主瓣更宽,频率分辨能力可能下降。

选择要权衡相邻频率分辨率、弱信号旁瓣遮蔽和时间分辨率,不能只说某一种永远最好。

22. 低通滤波器阶数越高越好吗?

答案: 阶数越高通常滚降越陡,但也可能带来更大的相位延迟、过冲/振铃、数值敏感性和计算量。实时嵌入式滤波还要考虑定点量化、状态变量精度和执行周期。应根据通带/阻带指标、相位要求和 MCU 资源选择阶数,并做时域、频域和定点验证。

23. syms、diff、dsolve 是否保证得到“永远精确”的数学结果?

答案: Symbolic Math Toolbox 用符号表达式进行代数变换、微分和求解,能避免某些浮点近似误差,但并不意味着所有问题都能得到闭式解,也不意味着符号表达式一定符合物理模型。符号化简可能需要假设条件;数值计算仍需考虑舍入和病态问题。

24. dsolve 和 ode45 的区别是什么?工程上为何常用数值解?

答案: dsolve 尝试求微分方程的符号/解析解;ode45 通过数值积分生成近似解。实际工程模型常包含非线性、分段逻辑、复杂边界和输入信号,解析解可能不存在或难以表达,因此数值解更常用。数值解必须设置合理容差、步长和事件处理,并验证数值稳定性。

Flomo 原始来源