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