2010-12-31 14 views
33

のグラフは、IがランダムにMathematica 7に罪[X]関数をプロットし、これは、それが示すものである:奇妙シン[X]はMathematica

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

は約x = -100可視欠陥に注意。これが起こると理由だけx = -100でなぜ

mesh

誰もが知っている:ここでは

は明らかにMathematicaが何らかの理由でそこの点の間の非常に低い解像度を使用していることを示す、欠陥部分のズームのですか?

注:ちなみにWolfram Alphaでも同じことが起こります。

+0

これは単純なエイリアシングのようです。 Mathematicaがこれに基本的なものとして何かにバグを持っていると本当に信じていますか? –

+0

いいえ、私はとても驚きました。エイリアシングがあった場合、インターバルが大きくなると表示される傾向はありませんか?たとえば、xmin、xmaxを-60 Pi/60 Piに変更すると、それはなくなります。 – houbysoft

+1

@houbysoft私はMathematicaを持っていませんが、実際には何も知られていませんが、PlotPointsオプションの値を変えてみることをお勧めします。 –

答えて

60

短い答え:ポイントの有限集合で関数を評価し、によってそれらの点を結ぶことにより、Plot作品:精度をプロットすると、その機能のために十分ではないので、

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

長い答えを次のようにそれを増やすデフォルト直線。次のコマンドを

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

plot

を使用してPlotで使用されるポイントは、あなたがあなたの関数のために、関数が評価されたポイントは「ピークを逃した」と紹介していることがわかります見ることができます大きな近似誤差。ポイントの位置を選択するアルゴリズムは非常に簡単で、この状況は、2つのピークがPlotRange/PlotPointよりも密接に間隔を置いている場合に発生する可能性があります。

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

スタンワゴンのMathematicaの本によると、Plotは、2つの新しい線セグメント間の角度が5度を超えるだろう場合は二つの連続点間の余分の中間点を追加するかどうかを決定します。この場合、プロットは最初の点の位置付けで不運になり、細分はその基準を満たしません。 1つの評価点を穴の中央に挿入すると、ほぼ同じように見えるプロットが生成されます。

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}}] 

ここでは、することができますそれがデフォルトから1度だけ増加するのを見てください。5穴を固定します。

plot

+0

ああ、あなたの答えの更新部分はまさに私が探していたものです(私はこれを自分自身で行ったグラフ電卓を実装して残りを知っていましたが、MaxRecursionに似たメカニズムは含まれていません。不正確さ)。 – houbysoft