我在Mathematica 7中随机绘制了Sin [x]函数,这就是它所显示的:
请注意大约x = -100
处的可见缺陷。
这是缺陷部分的缩放,清楚地表明Mathematica由于某些原因在这些点之间使用了更低的分辨率:
任何人都知道为什么会这样,为什么只有x = -100
?
注意:顺便说一下,Wolfram Alpha也会发生同样的情况。
答案 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]
您可以看到,对于您的函数,评估函数的点“错过了峰值”并引入了大的近似误差。用于选择点位置的算法非常简单,当两个峰的间距比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一书,如果两个新线段之间的角度大于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度可以修复漏洞。