3

我似乎无法在 Mathematica 8 中更改 BodePlot 上的刻度。

Clear[z]
hz = z/(z - 0.4) (*make up some transfer function *)
ts = 1;
tf = TransferFunctionModel[hz, z, SamplingPeriod -> ts];
scale = {{"Linear", "dB"}, Automatic};

BodePlot[tf,
 PlotRange -> Automatic,
 ImageSize -> 300,
 ScalingFunctions -> scale,
 Ticks -> {{{0, Pi/4, Pi/2, 3/4 Pi, Pi}, Automatic}, Automatic}
 ]

根据文档,所有 Plot 选项都可用于 BodePlot。

请注意,BodePlot 的刻度的格式提供为 2 个列表,而不是一个作为正常图的列表,因为生成了 2 个图。在上面,我试图更改第一个图(幅度图)的 x 轴刻度。

问题是:如何更改 BodePlot 上的刻度?我在上面的调用中犯了错误吗?

谢谢

编辑 1

现在使用 FrameTicks,我发现了一个非常奇怪的行为。如果我对框架右侧或顶部的任何刻度使用自动,我会在控制台中收到内核错误。这是一个例子

Clear[z]
hz = z/(z - 0.4)
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];

BodePlot[tf,
 FrameTicks -> 
     {
     {{Automatic, Automatic}, {Automatic, None}}, 
     {{Automatic, None}, {Automatic, None}}
     }
 ]

以上给出了控制台上的内核错误消息。奇怪的是,如果我再次运行相同的命令,我不会在控制台上再次看到错误。

将上面的内容更改为以下内容,错误就会消失:

Clear[z]
hz = z/(z - 0.4)
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];

BodePlot[tf,
 FrameTicks -> 
    {
     {{Automatic, None}, {Automatic, None}}, 
     {{Automatic, None}, {Automatic, None}}
    }
 ]

当我使用它时,我没有收到错误:

Clear[z]
hz = z/(z - 0.4)
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];

BodePlot[tf,
 FrameTicks -> {{Automatic, Automatic}, {Automatic, Automatic}}
 ]

因此,似乎在 FrameTicks 的右侧和顶部使用 Automatic 而不是 None 会导致 BodePlot 出现问题。我认为自动是在有疑问时使用的安全值,但在这种情况下不是。

4

1 回答 1

4

BodePlot返回带有Frames, 而不是的图片Axes,所以使用FrameTicks而不是Ticks.

于 2011-07-22T20:21:22.567 回答