PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Richtungsfeld



Dorle
29-11-2013, 21:27
Ich habe aus den Vorlagen
das schöne Programm (leicht abgeändert) entnommen:

\documentclass[11pt,a4paper]{article}
\usepackage{pstricks, pst-plot}

\begin{document}

\def\drawseg#1#2{%
\pscustom{%
\translate(#1,#2)
\rotate{(1, #1)} % Vector in direction of field at x=#1,y=#2
\psline(-0.5,0)(0.5,0)}}


\begin{pspicture}(-6,-6)(6,6)
\psaxes{->}(0,0)(-6,-6)(6,6)
\psset{arrows=->}
\multido{\n=-5+1}{12}{%
\multido{\N=-5+1}{11}{%
\ifnum\N=0
\ifnum\n=0
\else
\drawseg{\n}{\N}
\fi
\else
\drawseg{\n}{\N}
\fi}}
\end{pspicture}

\end{document}

Damit nun beliebige Richtungsfelder, z.B. y'=y*(4-y), erstellt werden können,
müsste man in \rotate{(1, #1)} beliebige Terme mit x (#1)
und y (#2) übergeben können, bzw. man müsste vorher mit x und y
rechnen können.
Wie wäre das Programm hierfür zu ergänzen? Und bei der Gelegenheit:
Wo finde ich eine Dokumentation, wie mit Variablen
in diesem Zusammenhang gearbeitet wird?
Vielen Dank schonmal



Inzwischen ist mir eine Möglichkeit eingefallen, um beliebige
Richtungsfelder zu erstellen:

\documentclass[11pt,a4paper]{article}
\usepackage{pstricks, pst-plot}

\begin{document}
\def\pshlabel#1{\footnotesize #1} % Schriftgröße
\def\psvlabel#1{\footnotesize #1}
\psset{xunit=1,yunit=1,linewidth=0.35pt, arrowscale=2.}
\def\drawseg#1#2{%
\pscustom{%
\translate(#1,#2)
\def\x{#1}
\def\y{#2}
\def\m{1}

\pstFPsub\m{10}{\y} % y'=0.08*y*(10-y)
\pstFPmul\y{\m}{\y}
\pstFPmul\y{0.08}{\y}

\rotate{(1, \y)}
\psline(-0.5,0)(0.5,0)}
}


\begin{pspicture}(-6,0)(6,12)
\psaxes[Dx=1,Dy=1,ticksize=-3pt,labelsep=2.5pt, arrowscale=2.3, plotstyle=curve,
showorigin=false,comma,linecolor=black]{->}(0,0)(-6,-0.1)(7,10) % Achse

\psset{arrows=->}
\multido{\n=-5+1}{12}{%
\multido{\N=1+1}{9}{%
\ifnum\N=0
\ifnum\n=0
\else
\drawseg{\n}{\N}
\fi
\else
\drawseg{\n}{\N}
\fi}}
\end{pspicture}

\end{document}

Aber es geht sicherlich auch eleganter mit Variablen und dem Stack, nur wie?

esdd
30-11-2013, 16:44
Du könntest auch das Paket fp laden und dann \FPeval nutzen:


\documentclass[11pt,a4paper]{article}
\usepackage{pstricks, pst-plot}
\usepackage{fp}

\renewcommand\pshlabel[1]{\footnotesize #1} % Schriftgröße
\renewcommand\psvlabel[1]{\footnotesize #1}
\psset{xunit=1,yunit=1,linewidth=0.35pt, arrowscale=2}
\newcommand\drawseg[2]{%
\pscustom{%
\translate(#1,#2)
\FPeval\y{0.08 * #2 * (10 - #2)}
\rotate{(1, \y)}
\psline(-0.5,0)(0.5,0)%
}%
}

\begin{document}
\begin{pspicture}(-6,0)(6,12)
\psaxes[Dx=1,Dy=1,ticksize=-3pt,labelsep=2.5pt, arrowscale=2.3, plotstyle=curve,
showorigin=false,comma,linecolor=black]{->}(0,0)(-6,-0.1)(7,10) % Achse

\psset{arrows=->}
\multido{\n=-5+1}{12}{%
\multido{\N=1+1}{9}{%
\ifnum\N=0
\ifnum\n=0
\else
\drawseg{\n}{\N}
\fi
\else
\drawseg{\n}{\N}
\fi%
}%
}
\end{pspicture}

\end{document}

Dorle
30-11-2013, 18:26
Vielen Dank für den Tipp.
So gefällt mir die Berechnung.