Je recherche des algorithmes pour dessiner des graphiques 2D standard pour des fonctions qui peuvent ou non avoir des singularités. Le but est d'écrire un "Mini-CAS", donc je n'ai pas de connaissance a priori sur les types de fonctions, les utilisateurs veulent faire un graphique.
Ce problème est très ancien, donc j'imagine qu'il doit y avoir des algorithmes standard dans la littérature. Pour une fois je n'ai pas eu beaucoup de succès à trouver des références via Google.
J'ai trouvé un algorithme intéressant, à savoir celui de "YACAS - Livre d'algorithmes" nommé "Tracé de fonction adaptative".
Bref:
- Existe-t-il des algorithmes standard?
- Existe-t-il une suite de tests pour les fonctions connues difficiles à tracer?
- Quels sont les articles intéressants à lire?
algorithms
visualization
soegaard
la source
la source
Réponses:
J'ai implémenté la routine d'échantillonnage adaptatif de Mathematica ici sur GitHub (c'est un seul fichier C, remontez à l'arborescence source pour le fichier d'en-tête). J'ai trouvé une description de la routine dans un grand livre sur Mathematica il y a longtemps, et j'utilise des variations sur cette implémentation depuis un certain temps maintenant. Il fait essentiellement un échantillon linéaire approximatif sur le domaine d'intérêt, puis revient pour affiner les régions de haute courbure. Il est possible que certaines fonctionnalités très nettes soient manquées, mais en pratique, je trouve cela extrêmement rare. Ce fichier contient également la version parallèle.
la source
Exclusions -> None
masquant la structure de votre fonctionPlot
en la définissant commef[x_?NumericQ] := ...
. Ce n'est pas ce à quoi je faisais référence lorsque j'ai posé des questions sur les changements. Je crois qu'il y a eu quelques changements à l'algorithme, comme v5 et v6 échantillonnés à différents points. Pour le moment, je ne peux pas tester la v5 pour comparer à nouveau.Savoir comment les autres SAE font cela pourrait vous aider.
Commencez avec une grille de points régulièrement espacée sur le domaine de traçage. (Dans Mathematica, il y a un paramètre pour contrôler le nombre à prendre, appelé
PlotPoints
.)Si nous n'avons pas encore atteint la limite d'itération (définie par
MaxRecursion
dans Mathematica), répétez à partir de l'étape 2.Une partie de cela est discutée dans le livre Mathematica in Action de Stan Wagon, que vous pouvez voir ici sur Google Books .
J'ai implémenté cet algorithme avant d'avoir un meilleur contrôle sur le nombre de fois où ma fonction coûteuse à calculer a été évaluée. Voici le code Mathematica pour l'étape 2:
la source
La page Web de MathWorld sur les graphiques de fonctions contient des références à plusieurs articles qui semblent être pertinents sur le traçage de fonctions adaptatives. Citant la page:
D'un autre côté, sur Google, je suis tombé sur un papier
www.cs.uic.edu/~wilkinson/Publications/plotfunc.pdf
qui explique comment bien choisir le domaine et d'autres choses. J'espère qu'ils vous sont utiles.
la source
J'ai trouvé ce sujet et j'ai pensé que je devrais partager la page de problème du développeur pour l'ajouter à la bibliothèque Julia Plots.jl. Nous avons essayé un tas de techniques pour voir ce qui donnerait de bons résultats, à partir des notes sur l'implémentation de Mathematica. En ajoutant de l'élagage, une petite perturbation pour ne pas démarrer exactement aux points finaux de l'intervalle, une limite de récursivité et un estimateur d'erreur à double maille étaient tous nécessaires pour "obtenir le bon résultat". Le fil vous pointe également vers le code open source pour l'implémentation. Il a donc fallu un peu de peaufinage, mais l'ajout de ces fonctionnalités l'a rendu assez robuste (selon les tests, comme indiqué dans le fil).
la source