2010-12-31 18 views
33

I rasgele Mathematica'da 7'de bir Sin [x] işlevi çizilen ve bu göstermesidir:Garip Sin [x] grafiktir Mathematica'da

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

Not yaklaşık x = -100 görünür kusur. Sadece x = -100 de bunun neden böyle

mesh

bilen var ve neden: Burada

açıkça nedense Mathematica çok daha düşük orada noktaları arasındaki çözünürlük kullanan gösteren kusur kısmının yakınlaştırma nedir?

Not: Bu arada, Wolfram Alpha'da da aynı şey gerçekleşir.

+0

Bana basit aliasing gibi görünüyor. Mathematica'nın bu konuda temel bir şeyde bir hataya sahip olduğuna gerçekten inanıyor musunuz? –

+0

Hayır, bu yüzden çok şaşırdım. Eğer takma isabetli olsaydı, aralığın daha büyük olması halinde daha fazla görünme eğiliminde olmaz mıydı? Eğer xmin'i değiştirirseniz, xmax -60 Pi/60 Pi olur, örneğin, gider. – houbysoft

+1

@houbysoft Mathematica yok, aslında bu konuda hiçbir şey bilmiyorsunuz, ama PlotPoints seçeneği –

cevap

60

Kısa cevap: doğruluğunu komplo bu işleve için yeterli olmayan varsayılan, bu yüzden şu şekilde arttırmak

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

Uzun cevap: tarafından bu noktaları noktaları sonlu kümesi de işlevini değerlendirmek ve bağlayarak Plot eserleri düz çizgiler. Aşağıdaki komutu

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

plot kullanılarak Plot tarafından kullanılan noktalarını görebilirsiniz

Sen fonksiyon için, fonksiyon değerlendirildi noktaları "zirve cevapsız" ve tanıtılan görebiliriz büyük bir tahmin hatası. Noktaların yerlerini seçmek için kullanılan algoritma çok basittir ve bu durum iki pikin PlotRange/PlotPoints öğesinden daha fazla birbirine yakın olması durumunda ortaya çıkabilir.

Plot 50 eşit aralıklı nokta ile başlar ve daha sonra MaxRecursion aşamalarına kadar fazladan nokta ekler. Bölgeyi MaxRecursion çeşitli ayarları için çizerseniz bu "deliğin" nasıl göründüğünü görebilirsiniz. Stan Wagon Mathematica kitabına göre

plot

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 iki yeni hat kesimleri arasındaki açı 5 dereceden fazla olurdu iki ardışık noktaları arasında fazladan nokta yarım eklemek için karar verir . Bu durumda, arsa ilk nokta konumlandırma ile şanssız hale geldi ve alt bölüm bu kriteri karşılamıyor. Deliğin ortasında tek bir değerlendirme noktasının yerleştirilmesinin hemen hemen aynı görünüşte arsa üreteceğini görebilirsiniz.

Refinement seçeneğini kullanarak bölmek için zaman karar vermek için kullanılan açısını artırmak için bir yol Burada

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

yapabilirsiniz (ben kitaptan aldım ama görünmüyor üründe belgelenmiş edilecek) varsayılandan 1 derece arttırmanın 5 numaralı deliği düzeltdiğini görüyoruz.

plot

+0

Ah, cevabınızın Güncelleme kısmı tam olarak aradığım şeydi (gerisini biliyordum, bunu kendim yapan bir grafik hesap makinesi uygulamıştım, ama MaxRecursion'a benzer bir mekanizma dahil etmedim. tutarsızlık). – houbysoft