尝试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)绘制实部时。还是我们应该得出结论,这是一个错误?

最佳答案

据我所知,这是部分正确的行为。输入虚数时,实数和虚数分量均被视为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,则似乎是设计使然。
关于plot命令的stated by MathWorks(显然适用于stem):

David和Daniel R.指出的stemstairs中确实存在一个错误,其中没有使用第一种(单参数)语法设置正确的XDatastem.m中的错误的来源似乎在这里:

if hasXData
    xdata = {'XData', datachk(x(:,k))};
end
问题是hasXData在上面由hasXData = nargs ~= 1;设置。我认为这可能应该是这样的:
hasXData = nargs ~= 1 || ~isreal(args{1});

关于matlab - 具有复数x的stem(x)的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19943231/

10-09 14:01