Ich habe mich gefragt, wie Programme wie Mathematica und Mathlab usw. Graphen von Funktionen so anmutig und schnell darstellen. Kann mir jemand erklären, wie sie das machen und darüber hinaus, wie ich das machen kann? Bezieht es sich auf einen Aspekt oder einen Kurs in Computerprogrammierung oder Mathematik? Was dann?
Nun, mit etwas Ermutigung von belisarius, hier ist mein Kommentar als Antwort: versuchen Sie matplotlib . Von der Startseite:
matplotlib ist eine Python-2D-Plotting-Bibliothek, die Zahlen in Publikationsqualität in einer Vielzahl von Hardcopy-Formaten und interaktiven Umgebungen plattformübergreifend erstellt. Matplotlib kann in Python-Skripten, der Python- und Ipython-Shell (wie MATLAB® * oder Mathematica® †), Webanwendungsservern und sechs grafischen Benutzeroberflächen-Toolkits verwendet werden.
Es wurde ursprünglich von den Plotting-Fähigkeiten von MATLAB inspiriert, obwohl es seither sehr gewachsen ist. Es ist solide Software - und es ist Open Source, unter einer BSD-Lizenz, so können Sie nicht nur die Quelle lesen, Sie können es hacken und verwenden, wie Sie wollen.
Ein anderer Ort, an dem Sie suchen können, ist gnuplot . Es ist keine der üblichen Open-Source-Lizenzen, aber es ist sicherlich Open Source, mit einigen Berechtigungen zu modifizieren und so weiter.
Gnuplot ist ein tragbares Kommandozeilen-Dienstprogramm für Linux, OS / 2, MS Windows, OSX, VMS und viele andere Plattformen. Der Quellcode ist urheberrechtlich geschützt, aber frei verteilt (d. H. Sie müssen nicht dafür bezahlen). Es wurde ursprünglich erstellt, um Wissenschaftlern und Studenten zu ermöglichen, mathematische Funktionen und Daten interaktiv zu visualisieren, ist aber inzwischen für viele nicht interaktive Anwendungen wie Web-Scripting geeignet. Es wird auch von externen Anwendungen wie Octave als Plotting-Engine verwendet. Gnuplot wird seit 1986 unterstützt und entwickelt.
Es tut auch 3D-Plotten, was Matplotlib nicht tut, und es ist schon viel länger. Der Grund, warum ich zuerst an Matplotlib gedacht habe, ist, dass es als Bibliothek für eine höhere Sprache gedacht ist, nicht für eine eigenständige Anwendung, also denke ich, es könnte etwas leichter für Sie sein zu lesen.
Ein anderer Vorschlag, um sich ein Bild von den Dingen zu machen, die Mathematica unter der Haube macht, ist die Dokumentation für Plot . Insbesondere wenn Sie sich die verfügbaren Optionen ansehen, können Sie etwas ableiten.
MaxRecursion
Automatic
die maximale Anzahl der erlaubten rekursiven UnterteilungenMethod
Automatic
Die Methode, die zum Verfeinern von Kurven verwendet wirdPerformanceGoal
$PerformanceGoal
Aspekte der Leistung zu versuchen, zu optimierenPlotPoints
Automatic
anfängliche Anzahl von Beispielpunkten
Von MaxRecursion
und PlotPoints
können Sie sehen, dass es eine Erstbemusterung durchführt und dann irgendwie entscheidet, welche Regionen unterteilt (resampled) werden müssen, um eine genaue Ansicht der Darstellung zu erhalten. Und von da an ist es Magie: Es gibt ein paar Method
dafür und ein PerformanceGoal
, um es zu leiten ...
Für MATLAB gibt es aufgrund seiner plattformübergreifenden Anforderung keine Alternativen wie die Verwendung von OpenGL . Die MATLAB-Laufzeit wird in C ++ geschrieben und die nicht-Achsen-GUI verwendet Java Swing. Daher ist MATLAB Plot wahrscheinlich eine C ++ / OpenGL / Swing-Mischung.
In Wirklichkeit ist MATLAB-Grafik viel weniger komplex als eine Videospielgrafik. Ich denke, es ist einfacher, Tutorials zu Videospiel-Grafiken zu finden und sie dann auf die MATLAB-Funktionalität "zu verkleinern", wie das Zeichnen einer einzelnen Zeile mit der gleichen Farbe.
Das wichtigste Konzept ist wahrscheinlich Transformationsmatrix .
Im Grunde werden die meisten Programme, die einen beliebigen Graphen grafisch darstellen (insbesondere Graphen mit angemessener Komplexität), einige Arten von Bibliotheken von Drittanbietern verwenden.
Die verwendete spezifische Bibliothek hängt von der verwendeten Programmiersprache ab. Zum Beispiel:
Für eine .Net-Anwendung können Sie Crystal Reports verwenden. Ссылка
Für Java können Sie JFreeChart verwenden. Ссылка Und so weiter ...
Sie werden wahrscheinlich zahlreiche Bibliotheken für die Sprache finden, für die Sie sich entscheiden.
Wenn Sie diese Funktionalität in Ihrem spezifischen Projekt erreichen möchten, schlage ich vor, eine Bibliothek zu verwenden, besonders wenn Sie ein Anfänger sind. Die internen Komplexitäten der Implementierung dieser Graphenbibliotheken wären aufgrund vieler Probleme wie z. B. plattformübergreifender Kompatibilität, Optimierung des Grafik-Renderings (dh: Sicherstellung, dass die Grafiken schnell und "hübsch" rendern), der mit der Positionierung von Elementen verbundenen Mathematik, von Bedeutung die Grafik und so weiter.
Zu guter Letzt bezweifle ich, dass Sie in diesem Thema bestimmte Kurse finden (oder sie benötigen), da auch in diesem Fall sehr spezielle Fälle ausgeschlossen sind. Programmierer werden immer Bibliotheken verwenden, die bereits existieren.
Warum es selbst programmieren, wenn jemand hat hat schon das Problem für dich gelöst?
Ein guter Ausgangspunkt ist es zu verstehen, dass es eine Grammatik für Grafiken gibt und was Sie konstruieren möchten, wenn Sie einen Plot-Befehl erhalten, ist eine symbolische Darstellung des Graphen. Für Mathematica können Sie etwas wie
tun %Vor%, um die interne Darstellung zu sehen, die Mathematica verwendet. Grundsätzlich müssen Sie die Liniensegmente (2D) oder Netze (3D) beschreiben, die Sie in Farbe und Koordinaten zeichnen möchten. Außerdem müssen Informationen über die Skalierung des Diagramms und das Zeichnen von Teilstrichen, Beschriftungsachsen usw. vorhanden sein.
Dies führt uns zum Kern der Frage: Wie bestimmen Sie das Liniensegment, das Sie aus einer Funktion und einem Bereich zeichnen möchten? Wenn Sie in der Hilfedatei nach Plot suchen, sehen Sie ein paar Dinge. Zuerst gibt es eine Plot-Point-Option und eine MaxRecursion-Option. Dies führt mich zu der Annahme, dass Mathematica die anfängliche Anzahl von Punkten in einem geraden Intervall über den Bereich abbildet, um einen Startwert zu erhalten (und dies ist nur eine fundierte Vermutung, aber so würde ich es tun). Der nächste Teil besteht darin, Regionen zu identifizieren, in denen die Änderung einen bestimmten Schwellenwert überschreitet, und dann weitere Punkte abzutasten, bis die "Änderung" zwischen zwei beliebigen Punkten in Ihrem Liniensegment unter einem Schwellenwert liegt. Mathematica macht das rekursiv, daher die Option MaxRecursion.
Bisher war ich ziemlich vage bei der Definition der Änderungsrate. Eine nützlichere Methode, um Änderungen zu beschreiben, besteht darin, 3 Punkte in Ihrem Liniensegment zu übernehmen. Nehme eine lineare Beziehung zwischen dem ersten und dritten Punkt an und mache unter der Annahme dieser linearen Beziehung eine Vorhersage darüber, was der zweite Punkt wäre. Wenn der Fehler dieser Vorhersage ausreichend niedrig ist, dann betrachte die nächste Gruppe von drei Punkten. Wenn der Fehler über einem Schwellenwert liegt, sollten Sie in diesem Bereich weitere Punkte abfragen, bis der Schwellenwert erreicht ist. Auf diese Weise benötigen Sie relativ wenige Punkte, an denen die Kurve relativ gerade ist und mehr an den "interessanten" Stellen, an denen sie sich in neue Richtungen biegt. Die Glätte der Kurve, die Sie zeichnen, ist proportional zu dem Fehler, den Sie bei der linearen Vorhersage von Punkten tolerieren wollen.
Tags und Links math wolfram-mathematica matlab graphics discrete-mathematics