Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 9

03 Jul '14, 11:38

AlexG's gravatar image

AlexG
63615

Für PSTricks gibt es das Paket `pst-ode`. Es integriert Anfangswertaufgaben mit den Runge-Kutta-Fehlberg-Verfahren mit automatischer Schrittweiten-Anpassung. In der Doku ist sogar ein Lorenz-Attraktor-Beispiel. Hier ein Attraktor als Anaglyph-3D erzeugt mit `pst-ode` und dem Befehl `\listplotThreeD` aus dem Paket `pst-3dplot`. Man braucht eine Rot-Cyan-Brille [Rot-Cyan-Brille](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Anaglyph_glasses.png/220px-Anaglyph_glasses.png) zum Betrachten und muss etwas schielen, um die Bilder zur Deckung zu bringen. Bei einsetzenden Kopfschmerzen bitte sofort aufhören! Betrachten. ![alt text][1] Das Code-Beispiel Der LaTeX-Quelltext wird mit `latex`, `dvips` und `ps2pdf` übersetzt. Anschließend wird das animierte Gif mit Hilfe der Kommandos `convert` und `composite` (http://imagemagick.org) erzeugt die Animation als PDF. Am besten funktioniert sie, wenn man (`<mydoc>` ist durch den Reader auf Bildschirmgröße aufzieht und die Ansicht über das Zoomfeld auf 50 % verkleinert. Dann mit R-C-Brille aus 40 cm fixieren und dabei schielen. Zum Ändern der Ansicht am Mausrad drehen. Dateinamen zu ersetzen): convert -density 100 alpha off <mydoc>.pdf <mydoc>.gif composite -stereo +0 <mydoc>.gif[0] <mydoc>.gif[36] Stereo.gif i=1 while [ $i -lt 36 ] do composite -stereo +0 <mydoc>.gif[$i] <mydoc>.gif[$((i+36))] tmp.gif convert -loop 0 Stereo.gif tmp.gif Stereo.gif ((i++)) done Quelltext: \documentclass{article} \usepackage[tightpage,active]{preview} \usepackage{pst-ode,pst-3dplot,multido} \newcommand\lorenzattraktor[2]{% #1: Farbe, #2: Winkel \ifdefined\lorenz\else% \pstVerb{% /alpha 10 def /beta 28 def /gamma 8 3 div def }% \pstODEsolve[algebraic]{lorenzXYZ}{0 1 2}{0}{25}{2501}{10 10 30}{ alpha*(x[1]-x[0]) | x[0]*(beta-x[2]) - x[1] | x[0]*x[1] - gamma*x[2] }% \gdef\lorenz{}% \fi% \begin{pspicture}(-6.05,-2)(6.05,10) \psset{unit=0.17cm,linecolor=#1,Alpha=#2,Beta=15} \listplotThreeD{lorenzXYZ} \psset{unit=0.425cm} \pstThreeDNode(0,0,0){O} \pstThreeDNode(0,0,5){Z} \pstThreeDNode(5,0,0){X} \pstThreeDNode(0,5,0){Y} \pstThreeDNode(-10,-10,0){A} \pstThreeDNode(-10,-10,20){B} \pstThreeDNode(-10,10,20){C} \pstThreeDNode(-10,10,0){D} \pstThreeDNode(10,-10,0){E} \pstThreeDNode(10,-10,20){F} \pstThreeDNode(10,10,20){G} \pstThreeDNode(10,10,0){H} \pspolygon(A)(B)(C)(D) \pspolygon(E)(F)(G)(H) \psline(A)(E) \psline(B)(F) \psline(D)(H) \psline(C)(G) \end{pspicture}% } \begin{document}% \multido{\iRed=43+10,\iCyan=47+10}{36}{% \multido{\iRed=43+10}{36}{% \begin{preview}% \definecolor{orng}{rgb}{1,0.33,0}% \lorenzattraktor{orng}{\iRed}% \end{preview}% }% \multido{\iCyan=47+10}{36}{% \begin{preview}% \definecolor{cyn}{rgb}{0,1,1}% \lorenzattraktor{orng}{\iRed}\lorenzattraktor{cyn}{\iCyan}% \lorenzattraktor{cyn}{\iCyan}% \end{preview}% }% \end{document} `pst-ode` ist auch unter PDFLaTeX verwendbar, da es die Ergebnisliste in eine Datei schreiben kann. Diese kann dann in einem zweiten Durchlauf mit einem beliebigen Plot-Paket, z. B. `pgfplots`, in eine gedruckte Kurve verwandelt werden. Hier ein Beispiel, das `pgfplots` verwendet. Zu kompilieren (wegen der Menge an Punkten) mit `lualatex --shell-escape` \documentclass[border=10pt]{standalone} \usepackage{filecontents} \usepackage{pgfplots} \pgfplotsset{compat=1.8} \begin{filecontents}{xyz.tex} \input pst-ode \pstVerb{ /alpha 10 def /beta 28 def /gamma 8 3 div def }% \pstODEsolve[ algebraic, saveData % schreibt Ergebnis in lorenzXYZ.data % erfordert ps2pdf -dNOSAFER ]{lorenzXYZ}{0 1 2}{0}{100}{10001}{0 1 1.05}{ alpha*(x[1]-x[0]) | x[0]*(beta-x[2]) - x[1] | x[0]*x[1] - gamma*x[2] } \bye \end{filecontents} \immediate\write18{tex xyz} \immediate\write18{dvips xyz} \immediate\write18{ps2pdf -dNOSAFER xyz.ps} \begin{document} \begin{tikzpicture} \begin{axis}[ xmin = -25, xmax = 25, ymin = -25, ymax = 25, zmin = 0, zmax = 50, hide axis, ] \addplot3[mark=none, mesh, shader=interp, color=black, opacity=0.2] file {lorenzXYZ.dat}; \end{axis} \end{tikzpicture} \end{document} ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/3DanimLorenzOpt.gif http://texwelt.de/wissen/upfiles/3DanimLorenzStereo.gif [2]: http://texwelt.de/wissen/upfiles/lorenzPGFplots_2.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 8

01 Jul '14, 12:37

AlexG's gravatar image

AlexG
63615

Für PSTricks gibt es das Paket `pst-ode`. Es integriert Anfangswertaufgaben mit den Runge-Kutta-Fehlberg-Verfahren mit automatischer Schrittweiten-Anpassung. In der Doku ist sogar ein Lorenz-Attraktor-Beispiel. Hier ein Attraktor als Anaglyph-3D erzeugt mit `pst-ode` und dem Befehl `\listplotThreeD` aus dem Paket `pst-3dplot`. Man braucht eine Rot-Cyan-Brille zum Betrachten und muss etwas schielen, um die Bilder zur Deckung zu bringen. Bei einsetzenden Kopfschmerzen bitte sofort aufhören! ![alt text][1] Das Code-Beispiel erzeugt eine die Animation als PDF. Am besten funktioniert es, sie, wenn man den Reader auf Bildschirmgröße aufzieht und die Ansicht über das Zoomfeld auf 50 % verkleinert. Dann mit R-C-Brille aus 40 cm fixieren und dabei schielen. Zum Ändern der Ansicht am Mausrad drehen. \documentclass{article} \usepackage[tightpage,active]{preview} \usepackage{pst-ode,pst-3dplot,multido} \newcommand\lorenzattraktor[2]{% #1: Farbe, #2: Winkel \ifdefined\lorenz\else% \pstVerb{% /alpha 10 def /beta 28 def /gamma 8 3 div def }% \pstODEsolve[algebraic]{lorenzXYZ}{0 1 2}{0}{25}{2501}{10 10 30}{ alpha*(x[1]-x[0]) | x[0]*(beta-x[2]) - x[1] | x[0]*x[1] - gamma*x[2] }% \gdef\lorenz{}% \fi% \begin{pspicture}(-6.05,-2)(6.05,10) \psset{unit=0.17cm,linecolor=#1,Alpha=#2,Beta=15} \listplotThreeD{lorenzXYZ} \psset{unit=0.425cm} \pstThreeDNode(0,0,0){O} \pstThreeDNode(0,0,5){Z} \pstThreeDNode(5,0,0){X} \pstThreeDNode(0,5,0){Y} \pstThreeDNode(-10,-10,0){A} \pstThreeDNode(-10,-10,20){B} \pstThreeDNode(-10,10,20){C} \pstThreeDNode(-10,10,0){D} \pstThreeDNode(10,-10,0){E} \pstThreeDNode(10,-10,20){F} \pstThreeDNode(10,10,20){G} \pstThreeDNode(10,10,0){H} \pspolygon(A)(B)(C)(D) \pspolygon(E)(F)(G)(H) \psline(A)(E) \psline(B)(F) \psline(D)(H) \psline(C)(G) \end{pspicture}% } \begin{document}% \multido{\iRed=43+10,\iCyan=47+10}{36}{% \begin{preview}% \definecolor{orng}{rgb}{1,0.33,0}% \definecolor{cyn}{rgb}{0,1,1}% \lorenzattraktor{orng}{\iRed}\lorenzattraktor{cyn}{\iCyan}% \end{preview}% }% \end{document} `pst-ode` ist auch unter PDFLaTeX verwendbar, da es die Ergebnisliste in eine Datei schreiben kann. Diese kann dann in einem zweiten Durchlauf mit einem beliebigen Plot-Paket, z. B. `pgfplots`, in eine gedruckte Kurve verwandelt werden. Hier ein Beispiel, das `pgfplots` verwendet. Zu kompilieren (wegen der Menge an Punkten) mit `lualatex --shell-escape` \documentclass[border=10pt]{standalone} \usepackage{filecontents} \usepackage{pgfplots} \pgfplotsset{compat=1.8} \begin{filecontents}{xyz.tex} \input pst-ode \pstVerb{ /alpha 10 def /beta 28 def /gamma 8 3 div def }% \pstODEsolve[ algebraic, saveData % schreibt Ergebnis in lorenzXYZ.data % erfordert ps2pdf -dNOSAFER ]{lorenzXYZ}{0 1 2}{0}{100}{10001}{0 1 1.05}{ alpha*(x[1]-x[0]) | x[0]*(beta-x[2]) - x[1] | x[0]*x[1] - gamma*x[2] } \bye \end{filecontents} \immediate\write18{tex xyz} \immediate\write18{dvips xyz} \immediate\write18{ps2pdf -dNOSAFER xyz.ps} \begin{document} \begin{tikzpicture} \begin{axis}[ xmin = -25, xmax = 25, ymin = -25, ymax = 25, zmin = 0, zmax = 50, hide axis, ] \addplot3[mark=none, mesh, shader=interp, color=black, opacity=0.2] file {lorenzXYZ.dat}; \end{axis} \end{tikzpicture} \end{document} ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/3DanimLorenz-31.gif http://texwelt.de/wissen/upfiles/3DanimLorenzOpt.gif [2]: http://texwelt.de/wissen/upfiles/lorenzPGFplots_2.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 7

30 Jun '14, 15:59

AlexG's gravatar image

AlexG
63615

Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

30 Jun '14, 15:17

AlexG's gravatar image

AlexG
63615

Klicke auf Einblenden/Ausblenden von Überarbeitungen 5
pdflatex durch lualatex ersetzt wegen der großen Datenmenge

27 Jun '14, 17:38

AlexG's gravatar image

AlexG
63615

Klicke auf Einblenden/Ausblenden von Überarbeitungen 4
Attraktor neu berechnet mit demselben Integrationsintervall t=[0,100] und derselben Ausgabeschrittweite dt=0.01 wie in Stefans Beispiel

27 Jun '14, 17:35

AlexG's gravatar image

AlexG
63615

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3
Bild verkleinert

27 Jun '14, 17:24

esdd's gravatar image

esdd
17.8k304257

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

27 Jun '14, 17:14

AlexG's gravatar image

AlexG
63615

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

27 Jun '14, 16:41

AlexG's gravatar image

AlexG
63615