Gnuplot and C

  • View
    2.927

  • Download
    7

Embed Size (px)

DESCRIPTION

using C and gnuplot graphics program

Text of Gnuplot and C

Kapitel 1Vorbemerkung und Grundlegung1.1 Mondgucker sind klgerWenn nicht sie selbst, so doch ihre Nachkommen. Denn was in der europischen Antike faszi-nierte der vollkommene Kreis kommt in der Natur nicht vor, es sei denn, man mchte denMond zur Natur hinzuzhlen. In jedem Falle beschftigt sich die wissenschaftliche Welt seither(auch) mit krummen Linien insbesondere ihrer graschen Darstellung. Eine mit dem Bleistiftgezogene Linie vermittelt optisch etwas glattes, zusammenhngendes, wie auch jede Computer-grak, wenn die Schrittweite gengend klein! Aber Schrittweite bedeutet diskrete Struktur hierder vorliegenden Daten, Punkte einer Berechnung, die grasch ausgegeben werden sollen. Ne-ben dem reinen Zeichnen sehr vieler Punkte das sind Paare reeler Zahlen sollte man in derLage sein, eine vorliegende Menge von reellen Zahlen zu sortieren und einzelne Zahlen heraus-zugreifen, etwa die grte oder die kleinste Zahl eines Vektors (array). Zunchst soll aufgezeigtwerden, wie in diesem Buch die gewhlten Instrumente ineinandergreifen.1.2 Anatomie der DatenerzeugungUnabhngig von Rechentechnik und Wahl des mathematischen Modells werden wir ohne Aus-nahme Mengen von reellen Zahlen y erzeugen, die von anderen Zahlen x abhngig sind. JedeZahl y fr sich genommen ist Ergebnis eines Rechenprozesses mit einer oder mehreren Zahlenx. Im allgemeinen gibt es aber nicht eine eindeutige Abbildung der Form y =f (x). Man denkeetwaandieBahnkurve beimschiefenWurfmitLuftwiderstand.Hierliegtnachendlichvie-len Berechnungen des Computers eine endliche Menge reeller Zahlen [x(t)|y(t)] paarweise vor,die bequem im geeigneten Koordinatensystem abgebildet werden kann. Sucht man jedoch denhchsten Punkt also ein lokales Maximum dieser Bahnkurve kann man eben nicht nach denRegeln der Differentialrechnung vorgehen. Hier hilft nur die sog. Numerik, also mathematischeWerkzeuge, die einzelne diskrete Zahlen unterscheiden und logisch ordnen.4 1. Vorbemerkung und GrundlegungAls einfhrendes Beispiel lassen wir Quadratzahlen im Intervall [2; 2] berechnen, und zwar soeng beieinander, da der Eindruck einer durchgezogenen Parabel entsteht.Programm 1.1: Ein einfaches C - Programm# i ncl ude < s t d i o . h># i ncl ude < s t d l i b. h># de f i ne dx 0. 01i nt main ( voi d ){i nt i = 0 ;f l o a t squar enum [ 4 0 0 ] ;FILE* f _ p t r =NULL;f _ p t r =f open ( " d a t e n / d a t . cs v " , "w+" ) ;f or ( i = 0 ; i < 400 ; i ++ ){squar enum [ i ] = ( 2 + i*dx )*( 2 + i*dx ) ;/*Dat en i n d i e Dat e i s c h r e i b e n */f p r i n t f ( f _ p t r , "%f %.2 f \ n" , 2+ i *dx , squar enum [ i] ) ;}f c l o s e ( f _ p t r ) ;ret urn ( EXIT_SUCCESS ) ;}Mit dem Befehl fprintf() werden die Ergebnisse der Berechnung in eine Datei dat.csv geschrie-ben, und zwar in einem Format 2 +i dx squarenum[i] welches von GNUPLOT als zweiSpalten erkannt wird.DieNormalparabel hatnatrlichfrx = 0ihrMinimum.WennkeinFunktionsterm vorliegt,mu man durch Anwendung einfacher Logik die kleinste Zahl des Vektors (array) squarenum[i]suchen lassen (siehe Programm 1.2)Programm 1.2: Zahlenvergleichf or ( i = 1 ; i < 400 ; i ++ ){i f ( ( squar enum [ i ] < squar enum [ i 1] ) &&( squar enum [ i ] < squar enum [ i +1] ) ){p r i n t f ( " %.2 f %.3 f \ n" , 2+ i *dx , squar enum [ i] ) ;}}Im nchsten Schritt wird diese Datei in GNUPLOT aufgerufen. Im Umgang mit GNUPLOT istesabergnstig,zunchst smtlicheBefehlezurErzeugung einerGrakmiteinemEditorzuschreiben, und diese batch mit Endung .gp zu speichern.1.2 Anatomie der Datenerzeugung 5Abbildung 1.1 : So sieht die Datei dat.csv fr unser einfhrendes Beispiel aus: hier sollten nur Zahlen stehen. Die Spaltensind durch Leerzeichen voneinander getrennt. Die erste Spalte erkennt GNUPLOT als x-Spalte. Bei jedem numerischenProjekt sollte man diese Datei sorgfltig berprfen, wenn GNUPLOT nicht das gewnschte Bild erzeugt.Abbildung 1.2 : Hier steht eine Reihe von elementaren GNUPLOT-Befehlen, um die Parabel des einfhrenden Beispielszu zeichnen. Eine einfache Befehlsdatei, die gespeichert werden kann, um sie spter weiter zu bearbeiten.6 1. Vorbemerkung und GrundlegungNach dem Start von GNUPLOT zeigt sich eine Eingabekonsole, von der aus bequem mit demBefehl load... die Befehlsdatei c_demo.gp aufgerufen werden kann.Abbildung 1.3:Start vonGNUPLOTundAufrufderBefehlsdatei c_demo.gpanderEingabekonsole. (DergenaueBildschirmtext ist abhngig von der GNUPLOT - Version (hier 4.2))Abbildung 1.4 : GNUPLOT gibt die Grak in einem neuen Fenster aus. In dieser Grak wurde auf die Achsenbezeich-nung verzichtet.Es ist aber die wesentliche Information visualisiert. GNUPLOT skaliert die Achsen am linken und amunterenBildrand; dieskannmanndern. Achtung: IndiesemAusgabeformat vonGNUPLOTsindmancheFeinhei-ten der Grak nicht sichtbar,auch ist die Ausung der Linien allenfallsausreichend.Fr weitere grasche Effekte Linienart,Linienbreite,Farbe, Schrifteffekte... sollte man in postscript umwandeln.Kapitel 2nderungsverhalten einer FunktionWas charakterisiert eine krumme Linie? Ihre sich stndig dem Betrage und dem Vorzeichen nachndernde Steigung. Dasnderungsverhalten einerkrummen Liniemudurch stckweisege-rade Linien mit konstanter Steigung beschrieben werden. Jede krumme Linie kann also durchhinreichend viele kurze gerade Striche angenhert (approximiert) werden. Diese fundamentaleTechnik zieht sich wie ein roter Faden durch das gesamte mathematische Gebiet der Funktions-untersuchung. Wenn wir also eine Punktmenge untersuchen deren Bild eine Kurve ist, werdenwir nicht nur den aktuellen Wert den Bestand -den stock betrachten, sondern gleichzeitig dieaktuelle nderungsrate den ow im Auge haben, um Aussagen ber das weitere Verhaltendieser Kurve zu treffen, ohne alle Funktionswerte berechnen zu mssen!2.1 Grasches Integrieren:f low stock2.1.1 Der ow - stock - GesichtspunktNun versuchen wir, mit Hilfe der Information der Steigung einer Kurve ihren Verlauf zu kon-struieren. Hierzu betrachten wir verschiedene Zuuss - Modelle, die eine nderung irgendeinerStatusgre zur Folge haben; dieses Modell hat also zwei mebare Gren:1. eine nderungsrate (ow)2. eine Statusgre (stock), z. B. das aktuelle Wasservolumen eines SchwimmbadesFrjedenderdreiZussewollenwirdasaktuelleVolumen V(t)zuverschiedenen Zeiten tberechnen und geeignet grasch darstellen. Fr den konstanten Zuuss multiplizieren wir einfachdie konstante nderungsrate mit der Zeit, und erhalten den aktuellen Wert der Statusgrsse.V(t) =V0 + f1 t =V0 + 1000min t min8 2. nderungsverhalten einer Funktion 0 500 1000 1500 2000 2500 01020304050Zufluss f(t) in Liter/MinuteZeit t in Minutenf1(t)f2(t)f3(t)Abbildung 2.1: Der Zuuss f1ist konstant,etwa ein geffnetesVentil; bei Zuuss f2wird ein Schieber mit konstan-terGeschwindigkeit hochgezogen; bei f3wrdedieserSchieber anfangsschlagartiggeffnet werdenunddannmitkonstanter Geschwindigkeit nach unten gedrckt, bis der Zuuss aufhrt.Die nderung der Statusgre (stock) hier das Volumen ist durch die Flche unter der Fluss-kurve gegeben, plus einen Anfangswert; indem wir die Flche berechnen, multiplizieren wir ein-fach den Fluss mit der Zeit, als Einheit kommt wieder eine Statusgrsse heraus. Bei konstantemFluss ndert sich also die Statusgrsse geradlinig, d.h. mit konstanter Steigung.Auch imFall f2 berechnen wir die Flche unter der Flusskurve: hier steigt der Fluss konstant, willman einen Anfangswertf0= 0 zulassen, ergeben sich Trapezchen zwischen zwei Zeitwerten.V( f (t)) =f0 + f (t)2 t +V0SelbstimFall f3istdiezeitlichenderung derStatusgrssepositiv,obwohl einlinearnega-tiv steigender Fluss vorliegt: es kommt immer weniger hinein. Setzt manf3negativ fort dasentspricht nach der 20. Minute einem negativen Zuuss, also einem Abuss so wird die Sta-tusgrsse negativ steigend, sie nimmt also ab.2.1 Grasches Integrieren:f low stock 9 0 500 1000 1500 2000 05101520 0 10000 20000 30000 40000Zufluss f(t) in Liter/MinuteVolumen V(t) in LiterZeit t in MinutenV(t) mit V0=0 V(t) mit V0=20000 f(t)Abbildung 2.2: nderungdesVolumenbeikonstantemFluss; man beachtedieunterschiedlicheSkalierungender y-Achsen.Wir knnen folgende Gesetzmssigkeiten erkennen:1. Der aktuelle Wert der Statusgrsse ist gleich der Flche unter der Flusskurve.2. Ein konstanter Fluss fhrt zu linearem Verlauf der Statusgrsse. Die Steigung ist gleichdem Wert des Flusses.3. Ein linear ansteigender positiver Fluss verursacht parabelfrmiges ansteigendes Verhaltender Statusgrsse (Parabel nach oben geffnet).4. Ein linear absteigender negativer Fluss verursacht parabelfrmiges abachendes Verhaltender Statusgrsse (Parabel nach unten geffnet).5. Der Wert des Flusses zu einemZeitpunkt ist gleich der Steigung der Statusgrsse zu diesemZeitpunkt.10 2. nderungsverhalten einer Funktion 0 500 1000 1500 2000 05101520 0 10000 20000 30000 40000Zufluss f(t) in Liter/MinuteVolumen V(t) in LiterZeit t in MinutenV(t) mit V0=0V(t) mit V0=20000f2(t)Abbildung 2.3:Bei linear positivsteigendemFlussergibt sicheinparabelfrmiges VerhaltenderStatusgrsse; dieDynamik (Form der Parabel) ist vom Anfangswert unabhngig.Programm 2.1: Erzeugung der Stock - Flow - Daten# i ncl ude < s t d i o . h># i ncl ude < s t d l i b. h># de f i ne N41# de f i ne A0doubl e f _we r t ( i nt a ){ret urn ( 100*a + 2000 ) ;}i nt main ( voi d ){doubl e v o l _ t [N] ;i nt i = 0;FILE* f _ p t r = NULL;p r i n t f ( " St ock Flow Dat a ! \ n" ) ;f _ p t r =f open ( " dat en / dat _f 4_1. cs v " , "w+" ) ;f or ( i = 1 ; i < N ; i ++ ){2.1 Grasches Integrieren:f low stock 11 0 500 1000 1500 2000 2500 3000 05101520 0 10000 20000 30000 40000 50000 60000Zufluss f(t) in Liter/MinuteVolumen V(t) in LiterZeit t in MinutenV(t) mit V0=0 V(t) mit V0=40000 f3(t)Abbildung 2.4 : Bei linear negativ steigendem Fluss mit positiven Werten ist die Statusgrsse positiv ansteigend, wennauch zunehmend ach.v o l _ t [ i ] =A+ ( ( f _we r t ( 0 ) + f _we r t ( i) ) / 2 )*i ;f p r i n t f( f _pt r , "%i %.4 l f\ n " , i , v o l _ t [ i] ) ;}ret urn ( EXIT_SUCCESS ) ;}2.1.2 Grasche Integration: Rechnung von links nach rec