尝试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)
绘制真实部分时。或者我们应该认定它是一个错误?
答案 0 :(得分:3)
据我所知,这是部分正确的行为。当您输入虚数时,实部和虚部被视为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
无法保存复杂数据,而且保留了实际部分。这感觉就像一个错误,但如果plot
文档适用于stem
,它似乎是设计的。
stated by MathWorks关于plot
命令(显然适用于stem
):
当绘图的参数很复杂时(即虚部非零),所有MATLAB®图形函数都会忽略虚部,除非给出一个复数数据参数。对于这种特殊情况,该命令生成实部与虚部的图。因此,
plot(Z)
其中Z是复矢量或矩阵,相当于
plot(real(Z),imag(Z))
大卫和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});
。我认为这应该是这样的:
{{1}}