【问题标题】:Strange Sin[x] graph in MathematicaMathematica 中奇怪的 Sin[x] 图
【发布时间】:2011-06-02 02:42:21
【问题描述】:

我在 Mathematica 7 中随机绘制了一个 Sin[x] 函数,结果如下:

注意大约x = -100 处的可见缺陷。

这是缺陷部分的放大图,清楚地表明 Mathematica 出于某种原因使用的点之间的分辨率要低得多:

有人知道为什么会发生这种情况,为什么只在x = -100 知道吗?

注意:顺便说一下,Wolfram Alpha 也会发生同样的情况。

【问题讨论】:

  • 对我来说这看起来像是简单的别名。你真的相信 Mathematica 会在这个基本的东西上存在错误吗?
  • 不,这就是我如此惊讶的原因。如果它是混叠的,那么如果间隔变大,它是否会出现更多的趋势?例如,如果我将 xmin、xmax 更改为 -60 Pi / 60 Pi,它就会消失。
  • @houbysoft 我没有 Mathematica,实际上对此一无所知,但我建议您尝试改变 PlotPoints 选项的值
  • @David Heffernan :该缺陷仅出现在 PlotPoints -> 50。奇怪的是,它对 PlotPoints -> 49 和 PlotPoints -> 51 都有效。
  • @houbysoft & @David Heffernan。它也发生在大约 x = -25 时,{x, -42 \[Pi], 41 \[Pi]},但是(正如 David Heffernan 所建议的那样),如果我包含大于 50 的 PlotPoints,问题就会消失(在这两个案例;Mathematica 7)。绘图[Sin[x], {x, -42 \[Pi], 41 \[Pi]}, PlotPoints -> 51]

标签: wolfram-mathematica


【解决方案1】:

简答:该功能的默认绘图精度不够,因此按如下方式增加它

Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100]

长答案:Plot 通过在有限的点集上评估函数并通过直线连接这些点来工作。可以使用以下命令查看Plot使用的点

Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, PlotStyle -> None, 
 MeshStyle -> Black]

您可以看到,对于您的函数,评估函数的点“错过了峰值”并引入了很大的近似误差。用于选择点位置的算法非常简单,当两个峰的间距比 PlotRange/PlotPoints 更接近时,可能会发生这种情况。

Plot 以 50 个等距点开始,然后在最多 MaxRecursion 阶段中​​插入额外的点。如果您为MaxRecursion 的各种设置绘制区域,您可以看到这个“洞”是如何出现的。

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
   PlotStyle -> LightGray];
Table[plot2 = 
   Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> k]; 
  Show[plot1, plot2, PlotRange -> {{-110, -90}, {-1, 1}}, 
   PlotLabel -> ("MaxRecursion " <> ToString[k])], {k, 0, 
   5}] // GraphicsColumn

根据 Stan Wagon 的 Mathematica 书,Plot 决定如果两条新线段之间的角度超过 5 度,是否在两个连续点之间的中间添加一个额外点。在这种情况下,绘图在初始点定位时不走运,并且细分不符合该标准。您可以看到,在孔的中心插入一个评估点将产生几乎相同的绘图。

使用Refinement选项增加用于决定何时细分的角度的方法(我从书中得到,但产品中似乎没有记录)

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
   PlotStyle -> LightGray];
Show[plot1, 
 Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
  PlotStyle -> Red, MaxRecursion -> 3, 
   Method -> {Refinement -> {ControlValue -> 4 \[Degree]}}], 
 PlotRange -> {{-110, -90}, {-1, 1}}]

在这里你可以看到从默认的 5 增加 1 度修复了这个洞。

【讨论】:

  • 啊,你答案的更新部分正是我一直在寻找的(我知道其余的,我自己实现了一个图形计算器,但我没有包含类似的机制到 MaxRecursion,它解释了不精确性)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多