茎(x)与复合x的行为

时间:2013-11-13 00:58:36

标签: matlab plot

尝试answer最近的一个问题,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的虚部而不是真实部分的原因?特别是当stem(1:length(x),x)绘制真实部分时。或者我们应该认定它是一个错误?

1 个答案:

答案 0 :(得分:3)

据我所知,这是部分正确的行为。当您输入虚数时,实部和虚部被视为x和y值对(即xychk.mx = real(y); y = imag(y);)。这就解释了为什么虚部在y轴上。

但是,当您使用第二个参数输入x轴值时,它会从第一个输入参数获取x轴值,并将y的实部视为y轴数据。具体来说,当调用stem(1:length(x),x)时,stem.m会为specgraph.stemseries创建一个复杂值YData。但是,似乎YData无法保存复杂数据,而且保留了实际部分。这感觉就像一个错误,但如果plot文档适用于stem,它似乎是设计的。

stated by MathWorks关于plot命令(显然适用于stem):

  

当绘图的参数很复杂时(即虚部非零),所有MATLAB®图形函数都会忽略虚部,除非给出一个复数数据参数。对于这种特殊情况,该命令生成实部与虚部的图。因此,

     

plot(Z)

     

其中Z是复矢量或矩阵,相当于

     

plot(real(Z),imag(Z))

大卫和Daniel R.指出的stemstairs中似乎存在错误,其中未设置正确的XData第一个(单参数)语法。 stem.m中的错误来源似乎在这里:

if hasXData
    xdata = {'XData', datachk(x(:,k))};
end

问题在于hasXData上方hasXData = nargs ~= 1;设置了hasXData = nargs ~= 1 || ~isreal(args{1}); 。我认为这应该是这样的:

{{1}}