Mathematica中的奇怪Sin [x]图

时间:2010-12-31 20:29:55

标签: wolfram-mathematica

我在Mathematica 7中随机绘制了Sin [x]函数,这就是它所显示的:

http://i.stack.imgur.com/hizGw.png

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

这是缺陷部分的缩放,清楚地表明Mathematica由于某些原因在这些点之间使用了更低的分辨率:

mesh

任何人都知道为什么会这样,为什么只有x = -100

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

1 个答案:

答案 0 :(得分:62)

简短回答:默认绘图精度不足以满足该功能,因此按如下方式增加

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]
  

plot

您可以看到,对于您的函数,评估函数的点“错过了峰值”并引入了大的近似误差。用于选择点位置的算法非常简单,当两个峰的间距比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
  

plot

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

通过使用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度可以修复漏洞。

plot