Strange Sin [x] graphe dans Mathematica

j'ai tracé au hasard une fonction Sin[x] dans Mathematica 7 Et voici ce qu'elle montre:

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

noter le défaut visible à environ x = -100.

<!-Voici un zoom de la partie défectueuse, montrant clairement que Mathematica utilise pour une raison quelconque une résolution beaucoup plus basse entre les points:

mesh

N'importe qui sait pourquoi cela arrive et pourquoi seulement à x = -100?

Note: la même chose se produit dans Wolfram Alpha, soit dit en passant.

34
demandé sur houbysoft 2010-12-31 23:29:54

1 réponses

réponse courte: la précision de pointage par défaut n'est pas suffisante pour cette fonction, donc augmentez-la comme suit

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

réponse: Plot fonctionne en évaluant la fonction à un ensemble fini de points, et la connexion de ces points par des lignes droites. Vous pouvez voir les points utilisés par Plot en utilisant la commande suivante

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

plot

Vous pouvez voir que pour votre fonction, les points où la fonction a été évaluée comme ayant "manqué le pic" et a introduit une erreur d'approximation importante. L'algorithme utilisé pour choisir l'emplacement des points est très simple et cette situation peut se produire lorsque deux pics sont espacés plus étroitement que PlotRange/PlotPoints.

Plot commence avec 50 points également espacés, puis y insère des points supplémentaires jusqu'à MaxRecursion étapes. Vous pouvez voir comment ce" trou " apparaît si vous tracez la région pour différents paramètres de 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

selon le Livre de Mathematica de Stan Wagon,Plot décide d'ajouter ou non un point supplémentaire à mi-chemin entre deux points consécutifs si l'angle entre deux nouveaux segments de ligne est supérieur à 5 degrés. Dans le cas présent, plot n'a pas eu de chance avec la position initiale du point et la subdivision ne répond pas à ce critère. Vous pouvez voir que l'insertion d'une évaluation unique point dans le centre du trou va produire une parcelle de terrain à l'apparence presque identique.

la façon d'augmenter l'angle utilisé pour décider quand subdiviser en utilisant Refinement option (je l'ai eu à partir du livre, mais il ne semble pas être documentée dans le produit)

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

ici vous pouvez voir que l'augmenter de 1 degré à partir de la valeur par défaut 5 corrige le trou.

plot

61
répondu Yaroslav Bulatov 2017-08-31 07:36:04