Mathematica中的奇怪Sin [x]图

hou*_*oft 36 wolfram-mathematica

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

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

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

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

啮合

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

注意:顺便说一下,Wolfram Alpha也是如此.

Yar*_*tov 62

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

Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100]
Run Code Online (Sandbox Code Playgroud)

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

Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, PlotStyle -> None, 
 MeshStyle -> Black]
Run Code Online (Sandbox Code Playgroud)

情节

您可以看到,对于您的函数,评估函数的点"错过了峰值"并引入了大的近似误差.用于选择点位置的算法非常简单,当两个峰比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
Run Code Online (Sandbox Code Playgroud)

情节

根据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}}]
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到,从默认值5增加1度可以修复漏洞.

情节