我看到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布局,而且由于在这种情况下如何显示轴,我更喜欢标准图。
答案 0 :(得分:2)
In[96]:= Quiet[AbsoluteOptions[p, AxesOrigin]]
Out[96]= {AxesOrigin -> {-2.80388, -7.23456}}
但严重的是,我认为您应该向support@wolfram.com提交错误报告