试着回答一个最近的问题,我遇到了一个奇怪的行为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)时候绘制真实部分.或者我们应该得出结论它是一个错误?
据我所知,这是部分正确的行为。当您输入虚数时,实部和虚部被视为 x 和 y 值对(即在xychk.m、x = real(y); y = imag(y);中)。这解释了为什么虚部位于 y 轴上。
但是,当您使用第二个参数输入 x 轴值时,它会从第一个输入参数获取 x 轴值,并将 的实部视为yy 轴数据。具体来说,当stem(1:length(x),x)被调用时,stem.m创建一个specgraph.stemseries具有为 提供的复数值YData。然而,似乎YData无法容纳复杂的数据,而真实部分被保留。plot这感觉像是一个错误,但如果文档适用于,这似乎是设计使然stem.
正如MathWorks关于该命令所述plot(显然适用于stem):
\n\n当plot 的参数为复数(即虚部非零)时,所有MATLAB\xc2\xae 图形函数都会忽略虚部,除非为plot 提供单个复数数据参数。对于这种特殊情况,该命令会生成实部与虚部的关系图。所以,
\n\n
plot(Z)其中 Z 是复向量或矩阵,相当于
\n\n
plot(real(Z),imag(Z))
David 和 Daniel R.确实指出了一个错误stem,即stairs没有XData使用第一个(单参数)语法设置正确的错误。错误的来源stem.m似乎在这里:
if hasXData\n xdata = {\'XData\', datachk(x(:,k))};\nend\nRun Code Online (Sandbox Code Playgroud)\n问题是hasXData上面设置的hasXData = nargs ~= 1;。我认为这也许应该是这样的:
hasXData = nargs ~= 1 || ~isreal(args{1});\nRun Code Online (Sandbox Code Playgroud)\n