5

试图回答最近的一个问题,我遇到了一个奇怪的行为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)绘制真实部分。或者我们应该断定这是一个错误?

4

1 回答 1

3

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

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

正如MathWorks关于plot命令所述(显然适用于stem):

当 plot 的参数是复数时(即虚部不为零),所有 MATLAB® 图形函数都会忽略虚部,除非 plot 被赋予单个复数数据参数。对于这种特殊情况,该命令会生成实部与虚部的关系图。所以,

plot(Z)

其中 Z 是复数向量或矩阵,等价于

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

David 和 Daniel R.似乎确实存在并指出了一个错误stem其中stairs正确XData的不是使用第一个(单参数)语法设置的。错误的来源stem.m似乎在这里:

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

问题是hasXData上面设置的hasXData = nargs ~= 1;。我认为这应该是这样的:

hasXData = nargs ~= 1 || ~isreal(args{1});
于 2013-11-13T01:22:20.373 回答