Matlab 茎(x)与复合物x的行为
在回答最近的一个问题时,我遇到了一个与Matlab 茎(x)与复合物x的行为,matlab,plot,Matlab,Plot,在回答最近的一个问题时,我遇到了一个与stem有关的奇怪行为。试试这个: x = [1+j 2-j 3+j 4-j]; stem(x) 在我的Matlab版本(2010b)中,这绘制了x的虚部,而不是我预期的实部。相反, stem(1:length(x),x) 绘制x的真实部分,这与plot(1:length(x),x)的行为一致 你能想出为什么stem(x)绘制x的虚部而不是实部的原因吗?特别是当杆(1:长度(x),x)绘制真实零件时。还是我们应该断定这是一个bug?据我所知,这是部分正确
stem
有关的奇怪行为。试试这个:
x = [1+j 2-j 3+j 4-j];
stem(x)
在我的Matlab版本(2010b)中,这绘制了x
的虚部,而不是我预期的实部。相反,
stem(1:length(x),x)
绘制x
的真实部分,这与plot(1:length(x),x)
的行为一致
你能想出为什么
stem(x)
绘制x
的虚部而不是实部的原因吗?特别是当杆(1:长度(x),x)
绘制真实零件时。还是我们应该断定这是一个bug?据我所知,这是部分正确的行为。输入虚部时,实部和虚部被视为x和y值对(即在xychk.m
中,x=real(y);y=imag(y);
)。这就解释了为什么虚部在y轴上
但是,当您使用第二个参数输入x轴值时,它会从第一个输入参数获取x轴值,并将y
的实部视为y轴数据。具体地说,当调用stem(1:length(x),x)
时,stem.m
创建一个specgraph.stemseries
,并为YData
提供复数值。然而,YData
似乎无法保存复杂的数据,而实际的部分被保留了下来。这感觉像是一个bug,但如果绘图
文档应用于stem
,这似乎是出于设计
关于plot
命令(显然适用于stem
):
当绘图参数为复数(即虚部为非零)时,所有MATLAB®图形函数均忽略虚部,除非绘图参数为单个复数数据参数。对于这种特殊情况,该命令生成实部与虚部的对比图。所以,
绘图(Z)
其中Z是复数向量或矩阵,相当于
plot(实(Z)、imag(Z))
在David和Daniel R指出的stem
和stairs
中确实存在一个bug,其中正确的XData
没有设置第一个(单参数)语法。stem.m
中的错误源似乎在这里:
if hasXData
xdata = {'XData', datachk(x(:,k))};
end
问题是上面的hasXData=nargs~=1设置了hasXData
代码>。我认为这应该是这样的:
hasXData = nargs ~= 1 || ~isreal(args{1});
仅提及楼梯
与杆
具有相同的行为。但是如果你这样做x=[1+j2-j3+j10-j]
然后x轴点是1、2、3和4,而不是1、2、3和10,stem(x)
生成一个不同于stem(实(x)、imag(x))
的图形。对于stem([1+i,3,5-i])
(1,1)(2,0)(3,-1)
@David(和Daniel R.)有趣观察结果的图。我同意这是一个bug,我在stem.m
中猜测了它的来源。不过,在单输入语法中,为什么假想的组件最终会出现在y轴上似乎很清楚。@chappjc当然!我怎么没想到呢<代码>绘图(x)
带有x
复合体也绘制图像与真实图像。经验教训:不要选择太简单的事情,比如1:4作为例子