hou*_*oft 36 wolfram-mathematica
我在Mathematica 7中随机绘制了Sin [x]函数,这就是它所显示的:

注意大约可见的缺陷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度可以修复漏洞.
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |