Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Richtungsfeld plotten

271 views
Skip to first unread message

Hans Crauel

unread,
Jun 23, 2004, 8:29:00 AM6/23/04
to
Passt inhaltlich nicht ganz hier her:

Kann man mit octave (bzw. gnuplot) oder mit maxima
(bzw. macsyma) ein Vektorfeld als `Phasenportrait'
bzw. `Richtungsfeld' darstellen?
Also: man hat f : R^2 \to R^2 und will ein Bild, in
welchem an [einigen geeigneten] Punkten (x,y) der Ebene
kleine Pfeile in Richtung f(x,y) der Länge |f(x,y)|
geplottet sind.
Ich habe die entsprechenden Manuale daraufhin angesehen,
bin aber nicht fündig geworden.

Oder gibt es andere open source Werkzeuge dazu?

Hans Crauel

Andreas Hildebrandt

unread,
Jun 23, 2004, 4:59:15 PM6/23/04
to
Hans Crauel wrote:
> Passt inhaltlich nicht ganz hier her:
>
> Kann man mit octave (bzw. gnuplot) oder mit maxima
> (bzw. macsyma) ein Vektorfeld als `Phasenportrait'
> bzw. `Richtungsfeld' darstellen?
> Also: man hat f : R^2 \to R^2 und will ein Bild, in
> welchem an [einigen geeigneten] Punkten (x,y) der Ebene
> kleine Pfeile in Richtung f(x,y) der Länge |f(x,y)|
> geplottet sind.
> Ich habe die entsprechenden Manuale daraufhin angesehen,
> bin aber nicht fündig geworden.

Das sollte eigentlich mit gnuplot ab Version 3.6 machbar sein,
auch wenn die Qualität der Plots manchmal ein wenig zu wünschen
übrig lässt. Schau Dir z.B. mal

http://gnuplot.sourceforge.net/demo/vector.html

an, da findest Du ein Beispiel dafür.

SciGraphica ( http://scigraphica.sourceforge.net/ ) müsste das
eigentlich auch können, und mit OpenDX ( http://www.opendx.org/ )
gehts ganz sicher irgendwie.

Andreas

Christian Gollwitzer

unread,
Jun 23, 2004, 5:57:24 PM6/23/04
to
Hans Crauel wrote:
> Passt inhaltlich nicht ganz hier her:
>
> Kann man mit octave (bzw. gnuplot) oder mit maxima
> (bzw. macsyma) ein Vektorfeld als `Phasenportrait'
> bzw. `Richtungsfeld' darstellen?
> Also: man hat f : R^2 \to R^2 und will ein Bild, in
> welchem an [einigen geeigneten] Punkten (x,y) der Ebene
> kleine Pfeile in Richtung f(x,y) der Länge |f(x,y)|
> geplottet sind.

Es geht mit einer Kombination aus gnuplot und awk ganz gut, dazu habe
ich folgendes Skript gebastelt:

#!/usr/bin/gawk -f
BEGIN { if (!mag) mag=0.05; l=1 }
(NF>0) && !(/^#/) {
uind=$1 " " $2
nr=++ind[uind]
dat[uind, nr]=($4=="i")?$3:0
if ($4!="i") undef[uind]=1
}

END {
for (i in ind) {
if (undef[i]) continue
printf("%s ", i)
if ((ind[i]==2) && (!withlength)) {
l=sqrt(dat[i,1]^2+dat[i,2]^2)
if (l==0) continue
}
for (k=1; k<=ind[i]; k++) printf("%g ", dat[i,k]/l*mag)
printf("\n")
}
}


Gnuplot hat den Stil "vectors", um die kleinen Pfeilchen zu zeichnen.
Nur leider kann man splot nicht dazu überreden, seine Daten im richtigen
Format auszuspucken, daher das Skript. Beispiel:

set isosamples 30
set samples 30
set term table
set out "sinus.fd"
splot sin(x)*cos(y), sin(y)*cos(x)
set out

set term X
plot "<LANG=C vecfield.awk -v mag=1 -v withlength=1 sinus.fd " with vec

Man muss dabei mit den Isosamples und mit mag spielen, um ein wirklich
schönes Bild zu bekommen. Lässt man "-v withlength=1" weg, dann werden
die Vektoren alle auf Länge "mag" normiert, das ist praktisch für
Richtungsfelder (also Plot ohne Länge/Länge egal). Das Skript ist nicht
so wahnsinning kompliziert, deshalb gebe ich es als PD frei, i.e. mach
damit was Du willst.

Christian

P.S.: "LANG=C" Arghh, schönen Gruß an Suse, mein awk druckt Zahlen mit ,
als Dezimaltrenner aus, was Gnuplot nicht frisst. Bei Bedarf im
awk-Skript verankern oder ganz weglassen.


0 new messages