茎(x)与复合x的行为

Lui*_*ndo 5 matlab plot

试着回答一个最近的问题,我遇到了一个奇怪的行为stem.试试这个:

x = [1+j 2-j 3+j 4-j];
stem(x)
Run Code Online (Sandbox Code Playgroud)

在我的Matlab版本(2010b)中,这绘制了虚构的部分x,而不是我预期的真实部分.反之,

stem(1:length(x),x)
Run Code Online (Sandbox Code Playgroud)

绘制真实的部分x,这与行为一致plot(1:length(x),x).

你能想到为什么要stem(x)绘制想象部分x而不是真实部分的任何理由吗?特别是什么stem(1:length(x),x)时候绘制真实部分.或者我们应该得出结论它是一个错误?

cha*_*pjc 3

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

\n

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

\n

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

\n
\n

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

\n

plot(Z)

\n

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

\n

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

\n
\n

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

\n
if hasXData\n    xdata = {\'XData\', datachk(x(:,k))};\nend\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
hasXData = nargs ~= 1 || ~isreal(args{1});\n
Run Code Online (Sandbox Code Playgroud)\n