37 votes

Graphique Sin étrange [x] dans Mathematica

Je tracées au hasard un Péché[x] fonction dans Mathematica 7 et c'est ce qu'il indique:

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

Remarque le défaut apparent d'environ x = -100.

Voici un zoom de la partie défectueuse, montrant clairement que Mathematica pour une raison quelconque utilise beaucoup moins de résolution entre les points là:

mesh

Quelqu'un sait pourquoi cela se produit et pourquoi seulement à l' x = -100?

Remarque: la même chose arrive dans les Wolfram Alpha, par la manière.

62voto

Yaroslav Bulatov Points 7316

Réponse courte: par défaut traçage de précision n'est pas suffisante pour que la fonction, afin de l'augmenter comme suit

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

Réponse longue: Plot des œuvres de l'évaluation de la fonction en un ensemble fini de points, et en reliant ces points par des segments de droite. Vous pouvez voir les points utilisés par Plot à l'aide de la commande suivante

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

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

Plot commence avec 50 points également espacés, puis y insère des points supplémentaires en MaxRecursion étapes. Vous pouvez voir comment ce "trou" s'affiche si vous intrigue de la région pour les divers paramètres de l' 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

Selon Stan Wagon Mathematica livre, Plot décide d'ajouter un point supplémentaire à mi-chemin entre deux points consécutifs si l'angle entre les deux nouveaux segments de ligne serait de plus de 5 degrés. Dans ce cas, la parcelle ai pas de chance avec les point initial de positionnement et de subdivision ne satisfont pas à ce critère. Vous pouvez voir que l'insertion d'une évaluation unique point dans le centre du trou de produire presque identique à la recherche de la parcelle.

La façon d'augmenter l'angle utilisé pour décider du moment de la 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 de l'augmenter de 1 degré de défaut 5 fixe le trou.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X