Poolraum und Computerpraktika der Fakultät für Physik

Kurven mit Gnuplot abschnittsweise plotten

In manchen Fällen kann es vorkommen, dass man Funktionen nur in bestimmten Bereichen Plotten möchte. So wie z.B. in folgender Abbildung dargestellt: Plot

Dies mit GNUplot zu erreichen ist nicht trivial:

Schlüssel zur Lösung des Problems sind Conditionals, in GNUplot gibt es folgenden Ausdruck:
( CONDITION ? f(x) : g(x) )
Wer C oder C++ programmiert wird sicher gleich erkennen worum es sich hier handelt. CONDITION sind Bedingungen der Art x<1 und der Ausdruck sagt nun: Ist die Bedingung erfuellt so gilt f(x) wenn nicht g(x). Weiter können Bedingungen verknüpft werden x > 0.5 & x < 1 bedeutet, daß x zwischen 0.5 und 1 liegen muss.

Leider ist dies erst die halbe Miete, man will ja in manchen Gebieten nichts plotten und nicht eine andere Funktion. Hier kann man sich zunutze machen, das GNUplot Funktionen nur in dem Bereich zeichnet, in dem sie auch definiert sind (und eine reele Zahl ergeben). Die Funktion f(x)=1/0 ist nirgends definiert, also eine Lösung des Problems. Am Ende sieht der Code mit dem der Plot oben erzeugt wurde wie folgt aus:


 f(x)=( x>0.5 & x<1.5 ? sin(x) : 1/0 ) 
 g(x)=( x>1   & x<2   ? cos(x) : 1/0 )
 plot [0:3] f(x) ti "sin(x)" ,g(x) ti "cos(x)"    
 set term gif
 set outfile "plot.gif"
 replot

wobei mit ti noch explizit die Namen in der Legende gesetzt wurde.