如何在BodePlot上使用AbsoluteOptions?

时间:2011-07-27 20:34:42

标签: wolfram-mathematica mathematica-8

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

我知道从一个对象(例如绘图)中提取选项的正常方法是使用AbsoluteOptions,如下所示:

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

返回

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

尝试对BodePlot做同样的事情,唯一的技巧是BodePlot默认是返回Grid,所以必须通过使用名为PlotLayout -> "List"的新选项告诉它返回绘图图像,这将返回一个列表中的2个图(幅度和相位)。然后,可以在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. >>

我尝试了上面最简单的例子,因此,我不知道为什么会出现上述错误。我尝试了很多其他的东西,例如告诉它使用自动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布局。默认值为Frame-&gt; True。但当我尝试Frame-&gt; 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-&gt; False是一种选择。实际上我还是不喜欢原始的Frame布局,而且由于在这种情况下如何显示轴,我更喜欢标准图。

1 个答案:

答案 0 :(得分:2)

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

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

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