You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中空矩阵的输出差异及维度表示疑问

MATLAB中空矩阵的输出差异及维度表示疑问

嗨,我来帮你拆解这两个MATLAB里的空矩阵相关疑惑~

问题1:为什么z1和z2的输出形式不一样?

这完全是因为zpkdata和pzmap这两个函数的返回值设计逻辑不同:

  • zpkdata函数是为了兼容多输入多输出(MIMO)系统设计的,它返回的零点、极点都是cell数组——每个cell对应系统中一组输入输出通道的零点/极点。你的系统是单输入单输出(SISO),所以得到的z1是1x1的cell,里面装的就是当前通道的零点集合:一个0x1的空矩阵(因为你的系统没有零点)。
  • 而pzmap函数更偏向可视化辅助,它直接返回当前系统的极点和零点数值数组。因为你的系统没有零点,所以直接返回一个0x1的空矩阵,不需要用cell包装。

你可以用这两行代码验证一下:

class(z1)       % 输出 'cell'
class(z2)       % 输出 'double'
size(z1{1})     % 输出 [0 1],和size(z2)结果一致

问题2:为什么MATLAB显示“0行1列”,但看不到任何行列?

这里要理解MATLAB里空矩阵的本质:空矩阵不是没有维度,而是有确定的维度但元素数量为0。
0-by-1的维度标注,是MATLAB为了保持输出格式的一致性:当你的系统有零点时,z2会是一个Nx1的列向量(N是零点个数),所以即使没有零点,MATLAB也会维持这个“列向量形状”的维度。这样做的好处是,你后续写代码处理零点时,不用特意判断“有没有零点”的情况——比如遍历零点的循环,在空矩阵下也能正常执行(只是循环体不会运行)。

你看不到实际的行列,是因为确实没有元素存在,但维度信息是MATLAB用来记录数组“形状”的元数据,确保它在参与运算时能符合维度匹配规则(比如和其他列向量进行拼接、运算等)。

附你的测试代码:

clc;clear;close all
C=0.1e-6
R=47e3
num=1
den=[-R*C 0]
sys=tf(num,den)
[z1,p1,k]=zpkdata(sys)
[p2,z2]=pzmap(sys)

备注:内容来源于stack exchange,提问作者DSP_CS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:23:13