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
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
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.