2

我看到 BodePlot 的另一个问题(V 8.0 中的新功能)。我想我在这里问是否有人能看到我没有看到的东西。

我知道从诸如绘图之类的对象中提取选项的正常方法是使用AbsoluteOptions,如下所示:

p=Plot[Sin[x],{x,0,2Pi}];
AbsoluteOptions[p,AxesOrigin]

哪个返回

{AxesOrigin -> {0., 0.}}

尝试对 BodePlot 做同样的事情,唯一的技巧是 BodePlot 默认是返回 Grid,所以必须告诉它返回绘图图像,而不是使用一个名为 的新选项PlotLayout -> "List",它将在一个列表中返回 2 个绘图(幅度和相位)。然后可以AbsoluteOptions在两个图中的任何一个上使用,就像上面的例子一样。

在此示例中,我选择了两者中的第一个图,即幅度,仅用于测试,如果使用第二个图(相位),则会出现相同的错误:

Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List"][[1]]

到目前为止,一切都运行良好。情节很好。

现在问题来了,我想找到一个选项的值,就像我在顶部的 Plot 示例中所做的那样,所以我输入了

AbsoluteOptions[p,AxesOrigin]

即使返回了正确的答案

{AxesOrigin -> {-2.803880122969847, -7.234556720270532}}

问题是控制台上同时打印了许多内核错误:

Ticks::ticks: {At Line = 77, the input was:,AbsoluteOptions[p,AxesOrigin],
{{{-5.,-5.,{0.0125,0.},{GrayLevel[0.],AbsoluteThickness[0.25]}},<<33>>,{<<1>>}},
{<<1>>}}} is not a valid tick specification. >>

我尝试了上面最小的示例,因此,我不知道为什么会出现上述错误。我尝试了许多其他事情,例如告诉它使用 Automatic FrameTicks

Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List",FrameTicks->Automatic][[2]]
AbsoluteOptions[p,AxesOrigin]

但我无法摆脱这些错误。我感觉 BodePlot 在某个地方有问题,但不确定,因为我自己可能做错了什么。

任何人都知道如何在 BodePlot 上使用 AbsoluteOptions 而不会出现这些错误?

谢谢

更新:

我刚刚发现了解决此问题的方法。尝试不同的东西,我发现可以使用 BodePlot 的非框架布局。默认值为 Frame->True。但是当我尝试 Frame->False 时,问题就消失了:

Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List",Frame->False][[1]]
AbsoluteOptions[p,Ticks]

没有错误,现在返回实际的刻度。因此,如果有人想使用 BodePlot,可能使用 Frame->False 是一种选择。无论如何,我实际上并不喜欢原始的框架布局,并且由于在这种情况下轴的显示方式,我更喜欢标准绘图。

4

1 回答 1

2
In[96]:= Quiet[AbsoluteOptions[p, AxesOrigin]]

Out[96]= {AxesOrigin -> {-2.80388, -7.23456}}

但说真的,我认为您应该向 support@wolfram.com 提交错误报告

于 2011-07-27T20:44:21.560 回答