Einführung in GnuPlot, GNU Octave, Scilab und Maxima
Transcrição
Einführung in GnuPlot, GNU Octave, Scilab und Maxima
FH Fak. Schmalkalden Elektrotechnik Einführung in GnuPlot, GNU Octave, Scilab und Maxima Inhaltsverzeichnis 1 Übersicht 2 GnuPlot 2.1 Installation . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Installation unter Linux . . . . . . . . . . . . 2.1.2 Installation unter Unix/Linux aus den Quellen 2.1.3 Installation unter Windows . . . . . . . . . . 2.2 GnuPlot starten . . . . . . . . . . . . . . . . . . . . 2.2.1 GnuPlot interaktiv benutzen . . . . . . . . . 2.2.2 Eine Datei verarbeiten . . . . . . . . . . . . 2.3 Zahlen und Winkel . . . . . . . . . . . . . . . . . . 2.3.1 Zahlendarstellung . . . . . . . . . . . . . . . 2.3.2 Winkeldarstellung . . . . . . . . . . . . . . 2.5 Selbstdefinierte Funktionen in GnuPlot . . . . . . . . 2.6 2D-Plots . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 xy-Plots . . . . . . . . . . . . . . . . . . . . 2.6.2 Einstellungen für 2D-Plots . . . . . . . . . . 2.6.4 Zusammengesetzte Kurven . . . . . . . . . . 2.6.5 Parametrische Plots . . . . . . . . . . . . . . 2.6.6 Plots in Polarkoordinaten . . . . . . . . . . . 2.7 3D-Plots . . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 xyz-Plots . . . . . . . . . . . . . . . . . . . 2.7.2 Einstellungen für 3D-Plots . . . . . . . . . . 2.7.3 Parametrische Plots . . . . . . . . . . . . . . 2.8 Terminals . . . . . . . . . . . . . . . . . . . . . . . 2.8.1 Übersicht über Terminals . . . . . . . . . . . 2.8.2 Ausgabedatei erzeugen . . . . . . . . . . . . 2.9 GnuPlot und LATEX . . . . . . . . . . . . . . . . . . 2.9.1 GnuPlot oder pst-plot? . . . . . . . . . . . . 2.9.2 Das MetaPost-Terminal . . . . . . . . . . . 2.9.3 MetaPost-Terminal verwenden . . . . . . . . 2.9.4 MetaPost-Datei konvertieren . . . . . . . . . 2.9.5 MetaPost-Ausgabe in LATEX verwenden . . . 2.9.6 Anpassungen an der MetaPost-Datei . . . . . 2.9.7 Tipps rund um GnuPlot und LaTeX . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 7 8 9 9 10 11 11 12 13 14 14 15 40 42 43 45 45 46 51 53 53 55 57 57 57 59 60 61 62 75 3 Inhaltsverzeichnis 3 . . . . . . . . . . . . . . . . . 79 79 80 80 80 81 83 83 83 84 84 84 86 93 93 96 100 104 . . . . . . . . . . . . . . . . . . . . 127 127 127 127 127 128 128 133 137 140 140 141 143 144 147 149 151 153 154 155 159 A Anhang A.1 PDF-Attachments abspeichern . . . . . . . . . . . . . . . . . . . . A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen . . . . . . . . . 169 169 171 4 4 Erste Schritte mit GNU Octave und Scilab 3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Octave-Installation . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Octave-Installation unter Linux . . . . . . . . . . . . 3.2.2 Octave-Installation unter Unix/Linux aus den Quellen 3.2.3 Octave-Installation unter Windows . . . . . . . . . . . 3.3 Scilab-Installation . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Scilab-Installation unter Linux . . . . . . . . . . . . . 3.3.2 Scilab-Installation unter Windows . . . . . . . . . . . 3.4 Octave starten . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Interaktives Arbeiten . . . . . . . . . . . . . . . . . . 3.4.2 Datei verarbeiten . . . . . . . . . . . . . . . . . . . . 3.5 Scilab starten . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 Einfache Berechnung . . . . . . . . . . . . . . . . . . 3.6.2 Selbstdefinierte Funktion . . . . . . . . . . . . . . . . 3.6.3 Vektoren, Matrizen und lineare Gleichungssysteme . . 3.6.4 Nichtlineare Gleichungssysteme . . . . . . . . . . . . Maxima 4.1 Installation . . . . . . . . . . . . . . 4.1.1 Installation unter Windows . . 4.1.2 Installation unter Linux . . . . 4.1.3 Dokumentation . . . . . . . . 4.2 Programmstart . . . . . . . . . . . . . 4.2.1 Programmstart unter Windows 4.2.2 Programmstart unter Linux . . 4.3 Verarbeitung von Dateien . . . . . . . 4.4 Beispiele . . . . . . . . . . . . . . . 4.4.1 Numerische Ergebnisse . . . . 4.4.2 Funktionen . . . . . . . . . . 4.4.3 Werte zuweisen . . . . . . . . 4.4.4 Formeln zuweisen . . . . . . 4.4.5 Vereinfachen . . . . . . . . . 4.4.6 Werte in Formel einsetzen . . 4.4.7 Gleichungsssysteme . . . . . 4.4.8 Differenzieren . . . . . . . . 4.4.9 Integrieren . . . . . . . . . . 4.4.10 Differentialgleichungen . . . 4.4.11 Analyse eines Bandpasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Welches Programm für welchen Zweck Das Programm GnuPlot stellt mathematische Sachverhalte graphisch dar, entweder erfolgt eine Ausgabe auf dem Bildschirm oder es werden Graphikdateien erstellt. Das Programm GNU Octave dient zum Lösen mathematischer Probleme. Zum Visualisieren greift das Programm auf GnuPlot zurück. Das Programm Scilab kann mathematische Probleme lösen und auch graphisch darstellen. Maxima ist ein Computer-Algebra-System und kann Probleme analytisch (d. h. formelmäßig) lösen. Dieser Text stellt die vier Programme vor. Dabei wird GnuPlot relativ ausführlich behandelt, für GNU Octave, Scilab und Maxima wird eine Einführung anhand von Beispielen gegeben, die Anfängern erste Schritte ermöglicht. 5 1 Übersicht 6 2 GnuPlot 2.1 Installation 2.1.1 Installation unter Linux Die gängigen Linux-Distributionen bieten die Möglichkeit, Gnuplot-Pakete über den Package-Manager zu installieren. Mit 1 yum l i s t | grep gnuplot bekommen Sie die Pakete angezeigt, die mit GnuPlot zu tun haben. Mit 1 yum i n s t a l l ... installieren Sie die Pakete (geben Sie die Paketnamen an). 2.1.2 Installation unter Unix/Linux aus den Quellen Voraussetzungen Es wird ein C-Compiler benötigt. Quellen downloaden Die Quellen für GnuPlot finden Sie unter http://sourceforge.net/projects/gnuplot. Software erstellen und installieren Nach Download und Entpacken gehen Sie in das beim Entpacken entstandene Verzeichnis und starten 1 2 3 . / configure make make i n s t a l l 7 2 GnuPlot Pfade setzen Wird das configure-Script ohne weitere Optionen aufgerufen, erfolgt bei „make install“ die Installation in das Verzeichnis /usr/local. Stellen Sie sicher, dass die Umgebungsvariable PATH (Bourne-Shell, bash und Derivate) bzw. path (C-Shell, tcsh und Derivate) das Verzeichnis /usr/local/bin mit aufführt. Der Suchpfad für shared libraries (*.so-Dateien) sollte das Verzeichnis /usr/local/lib enthalten. Die Einstellung dieses Suchpfades ist systemabhängig. Auf manchen Systemen (z.B. Solaris) reicht es, das Verzeichnis in die Umgebungsvariable LD_LIBRARY_PATH aufzunehmen. Auf anderen Systemen (z.B. Linux) muss das Verzeichnis in die Datei /etc/ld.so.conf bzw. eine Datei in /etc/ld.so.conf.d aufgenommen werden und mit dem Kommando „ldconfig“ der Cache für die Bibliothekssuche neu aufgebaut werden. Die Umgebungsvariable MANPATH, die die Verzeichnisse mit Online-Hilfetexten enthält, sollte /usr/local/man enthalten. 2.1.3 Installation unter Windows Im Downloadbereich von http://sourceforge.net/projects/gnuplot finden Sie eine setup.exe-Datei für Windows. Nach dem Download führen Sie diese *.exeDatei aus. Anschließend muss der Pfad gesetzt werden, so dass wgnuplot.exe gefunden wird. Dazu gehen Sie in der Systemsteuerung auf „System“. Unter „Erweitert“ finden Sie einen Button „Umgebungsvariablen“. In der Liste „Systemvariablen“ doppelklicken Sie „PATH“ und hängen an den bereits enthaltenen Wert das Verzeichnis „C:\Programme\GnuPlot\bin“ an – durch Semikolon vom bisherigen Wert abgetrennt. Falls Sie das Programm nicht unter C:\Programme\GnuPlot installiert haben, müssen Sie diesen Teil des Pfades entsprechend korrigieren. 8 2.2 GnuPlot starten 2.2 GnuPlot starten 2.2.1 GnuPlot interaktiv benutzen GnuPlot interaktiv unter Unix/Linux nutzen Durch Eingabe von 1 gnuplot wird das Programm gestartet. Im aktuellen Terminal erscheint das GnuPlot-Prompt, das Sie zur Eingabe von GnuPlot-Kommandos auffordert. Mit derartigen Kommandos legen Sie fest, was wie geplottet wird. Um das Programm zu verlassen, geben Sie das Kommando 1 quit ein. GnuPlot interaktiv unter Windows nutzen Unter Windows haben Sie mehrere Möglichkeiten, GnuPlot zu starten: • In einer Eingabeaufforderung geben Sie 1 wgnuplot ein (bzw. „wgnuplot.exe“). • Im Windows-Explorer gehen Sie in das Verzeichnis C:\Programme\GnuPlot\bin und doppelklicken die Datei wgnuplot.exe. • Sie legen sich einen Startmenü-Eintrag für wgnuplot.exe an und benutzen diesen. Es öffnet sich ein Fenster „gnuplot“, in dem ein Prompt-Zeichen angezeigt wird. Hier können Sie Kommandos zum Plotten eingeben. Nach Abschluss Ihrer Arbeit geben Sie entweder das Kommando 1 quit ein um das Programm zu verlassen oder Sie benutzen den Menü-Eintrag „File→Exit“. 9 2 GnuPlot 2.2.2 Eine Datei verarbeiten Eine Datei unter Unix/Linux verarbeiten Verwenden Sie gnuplot Dateiname um die angegebene Datei – die GnuPlot-Kommandos enthält – zu verarbeiten, z.B. 1 g n u p l o t m y f i l e . gp Die Kommandos aus dieser Datei werden ausgeführt, wenn die Datei komplett eingelesen und verarbeitet wurde beendet sich das Programm bei Erreichen des Dateiendes. Eine Datei unter Windows verarbeiten Geben Sie wgnuplot Dateiname ein, um eine Datei mit GnuPlot-Kommandos zu verarbeiten. 10 2.3 Zahlen und Winkel 2.3 Zahlen und Winkel 2.3.1 Zahlendarstellung GnuPlot arbeitet mit Integerzahlen (ganzzahlige Werte), Gleitkommazahlen und komplexen Zahlen. Der Dezimaltrenner für Gleitkommazahlen ist der Punkt. Die Multiplikation mit Zehnerpotenzen wird mittels eines „e“ beschrieben, dem die Zehnerpotenz folgt, z.B.: „1.23e-6“ für 1,23 · 10−6 oder „4.56e3“ für 4,56 · 103 . Sollen Gleitkommazahlen verwendet werden, die vom Wert her ein Integerwert sind, wird der Dezimalpunkt mitgeschrieben. Da Zahlenangaben wie „4.“ etwas gewöhnungsbedürftig sind, sollte man hier ruhig „4.0“ schreiben. Wird der Dezimalpunkt vergessen, kann dies die Rechenergebnisse enorm verfälschen, da dann u.U. die Rechnungen in Integerarithmetik vorgenommen werden. Als Beispiel mag man die Kommandos 1 2 print 5 / 2 p r i n t 5.0 / 2.0 betrachten. Das erste Beispiel bewirkt die Ausgabe „2“. Da zwei Integerzahlen verknüpft wurden, rechnet das Programm in Integerarithmetik. Im zweiten Beispiel sind die Zahlen als Gleitkommazahlen angegeben, daher wird auch in Gleitkommaarithmetik gerechnet. Komplexe Zahlen werden mit geschweiften Klammern ausgedrückt, z.B. kann die Zahl 3 + 4i als „{3.0,4.0}“ angegeben werden. 11 2 GnuPlot 2.3.2 Winkeldarstellung Winkel können entweder in Radiant (Standard) oder in Grad angegeben werden. Zur Umstellung werden die Kommandos 1 set angles radians (zur Umstellung in Radiant) bzw. 1 set angles degrees (zur Umstellung auf Grad) benutzt. Alle auf diese Kommandos folgenden Winkeleingaben werden als Radiant- bzw. Gradwerte betrachtet und Rechenergebnisse entsprechend in Radiant- oder Gradwerten ausgegeben. Dies betrifft insbesondere die Funktionen sin(x), cos(x) und tan(x) sowie die Ausgabe von asin(x), acos(x), atan(x), atan2(x) und arg(x). Werte von inversen hyperbolischen Funktionen mit komplexen Argumenten werden in Radiant ausgedrückt. Werden derartige Berechnungen vorgenommen, sollten aus Konsistenzgründen auch die Eingaben in Radiant erfolgen. Wird mit Polarkoordinaten geplottet, sollte 1 set angles degrees vor 1 set polar angegeben werden, falls benötigt. In diesem Fall wird der Bereich für die unabhängige Variable automatisch mit auf „[0:360]“ gesetzt. 12 2.5 Selbstdefinierte Funktionen in GnuPlot 2.5 Selbstdefinierte Funktionen in GnuPlot In GnuPlot ist es möglich, eigene Funktionen zu definieren. Im Beispiel wird eine Funktion dargestellt, die den Gesamtwiderstand einer Parallelschaltung aus zwei Widerständen berechnet. 1 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) Wird die Funktion verwendet, z.B. als 1 rpar (5.0 ,10.0) so werden in der o.a. Berechnungsvorschrift jedes „ra“ durch das erste Argument im Funktionsaufruf („5.0“) und jedes „rb“ entsprechend durch das zweite Argument im Funktionsaufruf („10.0“) ersetzt. 13 2 GnuPlot 50 0 -50 -100 -150 -200 -250 -300 -350 -400 -450 -500 -10 rpar(10.0,x) -5 0 5 10 Abbildung 2.1: Erster Plot 2.6 2D-Plots 2.6.1 xy-Plots Ein 2D-Plot (x-y-Plot) wird mit plot Funktion Optionen bewirkt. Die unabhängige Variable x wird dabei auf der x-Achse dargestellt, der Funktionswert auf der y-Achse. Im Beispiel wird eine Funktion geplottet, die den Gesamtwiderstand für eine Parallelschaltung zweier Widerstände berechnet. Einer der Widerstände sei vorgegeben als Ry = 10 Ω, der andere Widerstand Rx sei variabel. 1 2 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) plot rpar (10.0 , x) 14 2.6 2D-Plots 5 rpar(10.0,x) 4 3 2 1 0 0 5 10 15 20 Abbildung 2.2: Eingrenzungen für x- und y-Bereich 2.6.2 Einstellungen für 2D-Plots Druckbereich eingrenzen Der Druckbereich kann sowohl in x-Richtung als auch in y-Richtung mit den Kommandos set xrange [Startwert:Endwert] set yrange [Startwert:Endwert] eingegrenzt werden. Im Beispiel wird der Bereich eingegrenzt auf 0. . . 20 für x und 0. . . 5 für y. 1 2 3 4 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] s e t yrange [ 0 . 0 : 5 . 0 ] plot rpar (10.0 , x) Werden keine Vorgaben gemacht, plottet GnuPlot im Bereich −10 ≤ x ≤ 10 und ermittelt den y-Bereich aus den Funktionswerten. Verwenden Sie das Kommando 1 help s e t xrange für ausführlichere Informationen. 15 2 GnuPlot 7 rpar(10.0,x) Gesamtwiderstand 6 5 4 3 2 1 0 0 5 10 Parallelwiderstand 15 Abbildung 2.3: Beschriftungen für x- und y-Achse Achsen beschriften Die Achsenbeschriftungen für x- und y-Achse können mit set xlabel Text-Label set ylabel Text-Label festgelegt werden. 1 2 3 4 5 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " plot rpar (10.0 , x) Verwenden Sie das Kommando 1 help set xlabel für ausführlichere Informationen. 16 20 2.6 2D-Plots 7 Gesamtwiderstand 6 5 4 3 2 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.4: Kurvenbeschriftung deaktiviert Kurvenbeschriftung deaktivieren Die Kurvenbeschriftung kann für eine Kurve deaktiviert werden, indem der „plot“Anweisung die Option notitle hinzugefügt wird. 1 2 3 4 5 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " plot rpar (10.0 , x) no ti tl e Verwenden Sie das Kommando 1 help plot für ausführlichere Informationen. 17 2 GnuPlot 7 R Gesamtwiderstand 6 5 4 3 2 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.5: Kurve mit Beschriftung Kurvenbeschriftung festlegen Die Kurvenbeschriftung für eine Kurve kann festgelegt werden, indem der „plot“Anweisung die Option title Beschriftungstext hinzugefügt wird. 1 2 3 4 5 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R" Verwenden Sie das Kommando 1 help plot für ausführlichere Informationen. 18 2.6 2D-Plots 7 R Gesamtwiderstand 6 5 4 3 2 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.6: Anderer Platz für Kurvenbeschriftung Kurvenbeschriftung platzieren Wenn die Kurvenbeschrift (Legende) ungünstig liegt und Teile der Kurve verdeckt, gibt es zwei Möglichkeiten zur Verbesserung: • Änderung des y-Bereiches oder • Umplatzierung der Kurvenbeschriftung. Die Position der Kurvenbeschriftung wird mit set key x-Position y-Position festgelegt. Für die x-Position kann „left“ bzw „right“ vorgegeben werden, für die y-Position „top“ bzw. „bottom“ 1 2 3 4 5 6 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " s e t key l e f t t o p p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R" Verwenden Sie das Kommando 1 h e l p s e t key für ausführlichere Informationen. 19 2 GnuPlot 7 Gesamtwiderstand 6 5 4 3 2 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.7: Gitter Gitter hinterlegen Mit set grid show grid wird ein Gitter mit Standardeinstellungen eingerichtet und gezeichnet. 1 2 3 4 5 6 7 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " set grid show g r i d plot rpar (10.0 , x) no ti tl e Das Kommando 1 help set grid liefert weitere Informationen zur Einrichtung des Gitters (u.a. Linientyp, Farbe. . . ). 20 2.6 2D-Plots Gesamtwiderstand 8 6 4 2 0 0 2.5 5 7.5 10 12.5 Parallelwiderstand 15 17.5 20 Abbildung 2.8: Manuell eingerichtete Gitterabstände Gitterabstände manuell festlegen Die Abstände zwischen den Gitterlinien können mit set xtics x-Abstände set ytics y-Abstände vorgegeben werden. 1 2 3 4 5 6 7 8 9 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " set grid show g r i d set x t i c s 2.5 set y t i c s 2.0 plot rpar (10.0 , x) no ti tl e Verwenden Sie das Kommando 1 help set grid für ausführlichere Informationen. 21 2 GnuPlot 7 R Geringerer Anstieg Gesamtwiderstand 6 5 4 3 2 Starker Anstieg 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.9: Zusätzliche Text-Labels Zusätzliche Text-Labels einfügen Text-Labels können mit set label [Tag-Nr.] Text-Label Optionen eingefügt werden. Die Optionen geben u.a. die Position des Labels sowie die Ausrichtung an. 1 2 3 4 5 6 7 8 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " s e t key l e f t t o p set label " Starker Anstieg " at 2.0 ,1.0 set label " Geringerer Anstieg " at 15.0 ,6.5 r i g h t p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R" Verwenden Sie das Kommando 1 help set l a b e l für ausführlichere Informationen. 22 2.6 2D-Plots 7 R Geringerer Anstieg Gesamtwiderstand 6 5 4 3 2 Starker Anstieg 1 0 0 5 10 Parallelwiderstand 15 20 Abbildung 2.10: Linientyp und Liniendicke geändert Verfügbare Linien- und Füllarten anzeigen Mit 1 test terminal ; wird Ihnen angezeigt, welche Linientypen, Füllmuster, Liniendicken. . . benutzt werden können, die Muster sind jeweils mit der zugehörigen Nummer versehen, die in den Plot-Kommandos angegeben wird. Der Linientyp (lt) bestimmt Farbe und Art der Linie (durchgezogen, gestrichelt. . . ), die Liniendicke (lw). 1 2 3 4 5 6 7 8 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Parallelwiderstand " s e t y l a b e l " Gesamtwiderstand " s e t key l e f t t o p set label " Starker Anstieg " at 2.0 ,1.0 set label " Geringerer Anstieg " at 15.0 ,6.5 r i g h t p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R" w i t h l i n e s l t 4 lw 2 Verwenden Sie das Kommando 1 help with für ausführlichere Informationen. 23 2 GnuPlot 30 parallel in Reihe Gesamtwiderstand 25 20 15 10 5 0 0 5 10 Testwiderstand 15 20 Abbildung 2.11: Mehrere Kurven Mehrere Kurven in einem Diagramm Sollen mehrere Kurven in ein Diagramm geplottet werden, so werden die entsprechenden Funktionen in einer „plot“-Anweisung durch Komma getrennt angegeben. Falls keine Linientypen. . . angegeben sind, wählt GnuPlot selbständig unterschiedliche Linientypen für die verschiedenen Kurven. 1 2 3 4 5 6 7 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) r s e r ( ra , rb )= r a + rb s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Testwiderstand " s e t y l a b e l " Gesamtwiderstand " s e t key l e f t t o p p l o t r p a r ( 1 0 . 0 , x ) t i t l e " p a r a l l e l " , r s e r ( 1 0 . 0 , x ) t i t l e " in Reihe " 24 7 Gesamtwiderstand R R 6 P 5 4 3 2 1 0 0 5 10 Testwiderstand 15 0.001 0.0009 0.0008 0.0007 0.0006 0.0005 0.0004 0.0003 0.0002 0.0001 0 20 Gesamtleistung P 2.6 2D-Plots Abbildung 2.12: Unterschiedliche Koordinatensysteme Verwendung mehrerer Koordinatensysteme Sollen zwei Plots mit stark unterschiedlichen Werten gezeichnet werden, kann eine zweite y-Achse (bzw. auch eine zweite x-Achse) verwendet werden. Im Beispiel wird zusätzlich noch die Leistung dargestellt, wenn in den Gesamtwiderstand ein Strom von 10 mA eingeprägt wird. P = Rges · I 2 = 1 2 3 4 5 6 7 8 9 10 11 Ra · Rb 2 ·I Ra + Rb r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) pwr ( r a , rb , i ) = r p a r ( r a , r b ) * ( i * * 2 ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Testwiderstand " s e t y l a b e l " G e s a m t w i d e r s t a n d R" s e t y 2 l a b e l " Gesamtleistung P" s e t y2range [ 0 . 0 : 0 . 0 0 1 ] s e t y 2 t i c s 0.0001 s e t key l e f t t o p p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R " , \ pwr ( 1 0 . 0 , x , 1 0 . 0 e −3) t i t l e " P " a x e s x1y2 Im Beispiel ist zu sehen, wie eine überlange Zeile umgebrochen wird. Hierzu wird dem Zeilenende (Newline) ein Backslash vorangestellt, dies bedeutet, dass das Kommando in der Folgezeile fortgesetzt wird. Die Einrückung in der Folgezeile ist nicht unbedingt erforderlich, erhöht aber die Übersichtlichkeit im Quelltext. 25 2 GnuPlot 7 0.0014 0.0012 5 0.001 4 0.0008 3 0.0006 2 0.0004 1 0.0002 0 0 5 10 Testwiderstand 15 Gesamtleistung P Gesamtwiderstand R R 6 P 0 20 Abbildung 2.13: Verbesserungen für die Skalen Da auf der rechten Seite die Skalenstriche für die erste y-Achse ebenfalls gezeichnet werden, kann die Darstellung unübersichtlich werden. Dem kann vorgebeugt werden, indem man in beiden Skalen für eine gleiche Anzahl Teilstriche sorgt (Abb. 2.13). Im Beispiel wird für die linke y-Achse ein Bereich 0 . . . 7 vorgegeben, bei einer Teilschrittweite von 1.0 erhält man 7 Teilschritte. Die rechte y-Achse deckt den Bereich 0.0. . . 0.0014 ab. Bei einer Teilschrittweite von 0.0002 erhält man ebenfalls 7 Teilschritte. 1 2 3 4 5 6 7 8 9 10 11 12 13 r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) pwr ( r a , rb , i ) = r p a r ( r a , r b ) * ( i * * 2 ) s e t xrange [ 0 . 0 : 2 0 . 0 ] set xlabel " Testwiderstand " s e t yrange [ 0 : 7 . 0 ] set y t i c s 1.0 s e t y l a b e l " G e s a m t w i d e r s t a n d R" s e t y 2 l a b e l " Gesamtleistung P" s e t y2range [ 0 . 0 : 0 . 0 0 1 4 ] s e t y 2 t i c s 0.0002 s e t key l e f t t o p p l o t r p a r ( 1 0 . 0 , x ) t i t l e "R " , \ pwr ( 1 0 . 0 , x , 1 0 . 0 e −3) t i t l e " P " a x e s x1y2 Für alle benutzen Achsen sollten sowohl der Wertebereich als auch die Skalenteilung vorgegeben werden. Mit der Option „axes Achsen“ kann für jeden Plot separat festgelegt werden, welche Achsen zu verwenden sind („x1y1“, „x1y2“, „x2y1“ oder „x2y2“). 26 2.6 2D-Plots 0 -20 -40 -60 -80 Übertragungskennlinie -100 0.01 0.1 10 1 100 Abbildung 2.14: Beispiel für logarithmische Skalenteilung Logarithmische Skalenteilung Mit set logscale Achsen [Basis] kann für die angegebenen Achsen eine logarithmische Skalenteilung eingestellt werden. Als Achsen können „x“, „y“, „z“ oder „cb“ bzw. „x2“ oder „y2“ angegeben werden. Das optionale Argument Basis gibt die Basis des Logarithmus an, als Standardwert wird 10 verwendet. Der Wertebereich für die entsprechende Achse darf nur positive Werte beinhalten, da ansonsten der Logarithmus nicht definiert ist. Im Beispiel wird die Tiefpass-Übertragungsfunktion G( f ) = 1 1+j f fG betragsmäßig dargestellt. 1 2 3 4 5 6 f (x )=1.0/(1.0+{0.0 ,1.0}* x) s e t xrange [ 0 . 0 1 : 1 0 0 . 0 ] s e t yrange [ −100.0:0.0] set logscale x s e t key l e f t b o t t o m p l o t 20 * l o g ( a b s ( f ( x ) ) ) t i t l e " Ü b e r t r a g u n g s k e n n l i n i e " Verwenden Sie das Kommando 1 help set logscale für ausführlichere Informationen. 27 2 GnuPlot Diese Daten werden in eine Datei „gosp0015.dat“ geschrieben: 1 2 3 4 5 6 7 8 9 10 1.08 2.12 3.12 4.13 5.19 6.52 7.27 8.09 9.78 10.86 28 0.000227 0.000455 0.000664 0.000907 0.001121 0.001337 0.001544 0.001857 0.002104 0.002229 2.6 2D-Plots Kennlinie 0.002 Strom 0.0015 0.001 0.0005 0 0 2 4 6 Spannung 8 10 Abbildung 2.15: Messwerte-Plot Mit 1 2 3 4 5 6 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t yrange [ 0 . 0 : 0 . 0 0 2 4 ] s e t x l a b e l " Spannung " s e t y l a b e l " Strom " s e t key l e f t t o p p l o t ’ gosp0015 . dat ’ t i t l e " K e n n l i n i e " werden die Daten geplottet. 29 2 GnuPlot Kennlinie 0.002 Strom 0.0015 0.001 0.0005 0 0 2 4 6 Spannung 8 Abbildung 2.16: Messkurve Plot als Kurve Mit der zusätzichen Option with lines werden die Punkte durch Kurven (Linienzüge) miteinander verbunden. 1 2 3 4 5 6 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t yrange [ 0 . 0 : 0 . 0 0 2 4 ] s e t x l a b e l " Spannung " s e t y l a b e l " Strom " s e t key l e f t t o p p l o t ’ gosp0015 . dat ’ t i t l e " K e n n l i n i e " with l i n e s Verwenden Sie das Kommando 1 help with für ausführlichere Informationen zu den Diagrammarten. 30 10 2.6 2D-Plots Kennlinie 0.002 Strom 0.0015 0.001 0.0005 0 0 2 4 6 Spannung 8 10 Abbildung 2.17: bezier - Polynom n-ten Grades Geglättete Kurven Mit den zusätzlichen Optionen smooth bezier bzw. smooth csplines wird die Messkurve geglättet. Die Glättung erfolgt entweder durch ein Polynom n-ten Grades (sbezier) oder durch mehrere Polynomsegmente dritten Grades (csplines). 1 2 3 4 5 6 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t yrange [ 0 . 0 : 0 . 0 0 2 4 ] s e t x l a b e l " Spannung " s e t y l a b e l " Strom " s e t key l e f t t o p p l o t ’ g o s p 0 0 1 5 . d a t ’ t i t l e " K e n n l i n i e " w i t h l i n e s smooth s b e z i e r 31 2 GnuPlot Kennlinie 0.002 Strom 0.0015 0.001 0.0005 0 0 2 4 6 Spannung 8 10 Abbildung 2.18: csplines - Polynomstücken dritten Grades 1 2 3 4 5 6 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t yrange [ 0 . 0 : 0 . 0 0 2 4 ] s e t x l a b e l " Spannung " s e t y l a b e l " Strom " s e t key l e f t t o p p l o t ’ g o s p 0 0 1 5 . d a t ’ t i t l e " K e n n l i n i e " w i t h l i n e s smooth c s p l i n e s Verwenden Sie das Kommando 1 h e l p smooth für ausführlichere Informationen zur Kurvenglättung. Abb. 2.21 auf Seite 38 zeigt die Auswirkung verschiedener Glättungsverfahren auf dieselben Datensätze. Zu sehen ist, dass mit „sbezier“ die geplottete Kurve wesentlich glatter wird als mit „csplines“, aber nicht mehr alle Messpunkte durchlaufen werden (Bei der Interpolation wird die Summe der quadrierten Abständer zwischen den Punkten und der Kurve minimiert). 32 2.6 2D-Plots 4900 Widerstand 4800 4700 4600 4500 4400 4300 0 2 4 6 Spannung 8 10 Abbildung 2.19: Berechnung aus den Messwerten Berechnung aus den Messwerten Die Messwerte können nicht nur als Werte ausgeplottet werden, es können auch Berechnungen mit den Messwerten vorgenommen werden bevor geplottet wird. Die „using Format“-Option bestimmt, welche Berechnungsvorschrift jeweils zur Bildung der x- und y-Werte verwendet wird. Das Format besteht aus x-Auswahl und y-Auswahl, getrennt durch einen Doppelpunkt. Sowohl x- als auch y-Auswahl können auf zwei Wegen angegeben werden: • Eine einzelne Zahl. Diese Zahl gibt die Spaltennummer an (der wievielte Wert eines Datensatzes soll herausgegriffen und verwendet werden). • Ein mathematischer Ausdruck in Klammern. Dieser Ausdruck kann „$1“, „$2“. . . enthalten, anstelle dieser Platzhalter wird jeweils der erste, zweite. . . Wert des Datensatzes eingesetzt. Um im Beispiel den jeweiligen Widerstandswert in Abhängigkeit von der jeweils eingestellten Spannung zu zeigen, muss für die x-Richtung die Spannung (erster Wert im Datensatz) und für die y-Richtung der Quotient aus dem jeweils ersten und zweiten Wert eines jeden Datensatzes verwendet werden: 1 2 3 4 5 6 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t x l a b e l " Spannung " s e t y l a b e l " Widerstand " s e t key l e f t t o p p l o t ’ g o s p 0 0 1 5 . d a t ’ u s i n g 1 : ( $1 / $2 ) n o t i t l e \ w i t h l i n e s smooth s b e z i e r 33 2 GnuPlot Verwenden Sie das Kommando 1 help using für ausführlichere Informationen über die „using“-Option. 34 2.6 2D-Plots Messwerte in GnuPlot-Datei Die Messwerte können auch gleich mit in die GnuPlot-Datei geschrieben werden. Anstelle des Dateinamens steht dann ein „-“. Die Datensätze folgen unmittelbar auf die plot-Anweisung. Ein einzelnes „e“ in einer Zeile signalisiert das Ende der Datensätze. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t x l a b e l " Spannung " s e t y l a b e l " Widerstand " s e t key l e f t t o p p l o t ’ − ’ u s i n g 1 : ( $1 / $2 ) n o t i t l e w i t h l i n e s smooth s b e z i e r 1.08 0.000227 2.12 0.000455 3.12 0.000664 4.13 0.000907 5.19 0.001121 6.52 0.001337 7.27 0.001544 8.09 0.001857 9.78 0.002104 10.86 0.002229 e 35 2 GnuPlot 5000 4900 Widerstand 4800 4700 4600 4500 4400 4300 0 2 4 6 Spannung 8 10 Abbildung 2.20: Messreihen zweier Kurven in einem Diagramm Sollen mehrere Kurven in ein Diagramm gezeichnet werden, so werden die Datenreihen hintereinander weg in der Reihenfolge in die Datei geschrieben, in der die entsprechenden Dateinamen „-“ in der Plot-Anweisung erscheinen. Jede Datenreihe wird mit einem „e“ abgeschlossen. Im nachfolgenden Beispiel werden die Kurven aus zwei Messreihen in einem Diagramm geplottet. 36 2.6 2D-Plots 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 s e t xrange [ 0 . 0 : 1 1 . 0 ] s e t x l a b e l " Spannung " s e t y l a b e l " Widerstand " s e t key l e f t t o p p l o t ’ − ’ u s i n g 1 : ( $1 / $2 ) n o t i t l e w i t h l i n e s smooth s b e z i e r , \ ’ − ’ u s i n g 1 : ( $1 / $2 ) n o t i t l e w i t h l i n e s smoot b e z i e r 1.08 0.000227 2.12 0.000455 3.12 0.000664 4.13 0.000907 5.19 0.001121 6.52 0.001337 7.27 0.001544 8.09 0.001857 9.78 0.002104 10.86 0.002229 e 1.01 0.000224 2.11 0.000434 3.27 0.000685 4.11 0.000869 5.09 0.001169 6.41 0.001288 7.21 0.001519 8.21 0.001722 9.60 0.002003 10.14 0.002172 e 37 2 GnuPlot 2 dots bezier csplines acsplines Widerstand 1.8 1.6 1.4 1.2 1 0.8 0 2 4 6 8 10 12 14 Abbildung 2.21: Verschiedene Glättungsverfahren Abb. 2.21 zeigt Kurven für identische Datensätze mit verschiedenen Glättungsverfahren. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 s e t key l e f t t o p p l o t ’−’ t i t l e " d o t s " , \ ’ − ’ t i t l e " b e z i e r " w i t h l i n e s smooth b e z i e r , \ ’ − ’ t i t l e " c s p l i n e s " w i t h l i n e s smooth c s p l i n e s 1.0 1.0 2.0 1.0 3.0 1.0 4.0 1.0 5.0 1.0 6.0 1.0 7.0 2.0 8.0 1.0 9.0 1.0 10.0 1.0 11.0 1.0 12.0 1.0 13.0 1.0 e 1.0 1.0 2.0 1.0 3.0 1.0 4.0 1.0 5.0 1.0 6.0 1.0 7.0 2.0 38 2.6 2D-Plots 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 8.0 9.0 10.0 11.0 12.0 13.0 e 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 e 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 1.0 1.0 1.0 1.0 1.0 1.0 39 2 GnuPlot 1.5 Hysteresekurve 1 B 0.5 0 -0.5 -1 -1.5 -20000 -15000 -10000 -5000 0 H 5000 10000 15000 20000 Abbildung 2.22: Hysteresekurve als Beispiel für zusammengesetzte Kurve 2.6.4 Zusammengesetzte Kurven Setzt sich eine Kurve aus verschiedenen Teilstücken zusammen (z.B. Hysteresekurven), verwendet GnuPlot für jedes Segment einen anderen Linienstil. Soll dies verhindert werden, muss für alle Segmente ein Linienstil vorgegeben werden. 40 2.6 2D-Plots 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 s e t x l a b e l "H" s e t y l a b e l "B" s e t xrange [ −20000:20000] s e t yrange [ −1.6:1.6] s e t key l e f t t o p p l o t ’ − ’ smooth b e z i e r t i t l e " H y s t e r e s e k u r v e " l t 0 w i t h l i n e s , \ ’ − ’ smooth b e z i e r n o t i t l e l t 0 w i t h l i n e s −16000 −1.5 −12000 −1.5 −8000 −1.4 −4000 −1.25 0 −1.05 2000 −0.85 4000 −0.4 6000 0.5 8000 1.05 10000 1.25 12000 1.35 16000 1.5 e −16000 −1.5 −12000 −1.4 −10000 −1.35 −8000 −1.2 −6000 −0.4 −4000 0.6 −2000 0.9 0 1.1 4000 1.25 8000 1.30 12000 1.35 16000 1.5 e 41 2 GnuPlot 16 Kurve 14 12 10 8 6 4 2 0 1 2 3 4 5 6 7 8 9 10 Abbildung 2.23: Parametrischer Plot 2.6.5 Parametrische Plots Parametrische Plots sind Plots, bei denen ein Parameter t ein vorgegebenes Inter vall durchläuft. Dabei kann für jeden t-Wert eindeutig ein Punkt P x(t),y(t) berechnet werden. Mit „set parametric“ wird auf parametrisches Plotten umgeschalten. Das Intervall kann entweder über die Einstellung „trange“ gesetzt oder in der plotAnweisung angegeben werden. Im Beispiel wird die Kurve √ 1≤t ≤5 y = 43 t 3 k̃ : x = 21 t 2 − t + 2 gezeichnet. Wie man sieht, werden x-Funktion und y-Funktion durch Komma voneinander getrennt angegeben. 1 2 3 set parametric set trange [1.0:5.0] p l o t 0 . 5 * t **2− t + 2 , 4 . 0 / 3 . 0 * s q r t ( t * * 3 ) Alternativ wäre auch 1 2 set parametric p l o t [ 1 . 0 : 5 . 0 ] 0 . 5 * t **2− t + 2 , 4 . 0 / 3 . 0 * s q r t ( t * * 3 ) möglich. 42 2.6 2D-Plots a α b Abbildung 2.24: Flächeninhalt eines Parallelogrammes 15 3*5*abs(sin(t)) 10 5 0 5 10 15 8 6 4 2 0 2 4 6 8 Abbildung 2.25: Flächeninhalt in Abhängigkeit vom Winkel 2.6.6 Plots in Polarkoordinaten Plots in Polarkoordinaten können als Sonderform der parametrischen Plots angesehen werden. Auch hier durchläuft ein Parameter t (ein Winkel) ein vorgegebenes Intervall. Für jeden t-Wert wird ein Radius berechnet, aus Radius und Winkel werden dann x und y berechnet. Im Beispiel ist ein Parallelogramm mit den Seitenlängen a=3 b=5 gegeben. Geplottet werden soll der Flächeninhalt in Abhängigkeit vom Winkel. Dieser berechnet sich nach der Formel A = a · b · | sin α| 1 2 3 set polar set trange [0:2.0* pi ] p l o t 3*5* a b s ( s i n ( t ) ) n o t i t l e 43 2 GnuPlot Standardmäßig geht GnuPlot davon aus, dass die Winkelvariable t in Radiant angegeben wird. Dies kann mit 1 set angles degrees auf Grad umgestellt werden, mit 1 set angles radians kann dann wieder auf Radiant zurückgeschalten werden. Die „set angles“-Anweisung sollte vor „set polar“ geschrieben werden. Hinweis: Die Winkeleinstellung beeinflusst die Funktionen sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(x) und arg(x). Hyperbolische Funktionen werden nicht beeinflusst. Werden Umkehrfunktionen der hyperbolischen Funktionen für komplexe Argumente aufgerufen, muss die Winkeleinstellung auf „radians“ gestellt sein! 44 2.7 3D-Plots 5 4 3 2 1 0 0 2 4 6 8 10 0 2 4 6 8 10 Abbildung 2.26: Funktionsgebirge 2.7 3D-Plots 2.7.1 xyz-Plots Funktionen f (x,y) mit zwei unabhängigen Variablen x und y können als „Gebirge“ über der x,y-Ebene dargestellt werden. Hierzu wird die „splot“-Anweisung splot Bereiche f(x,y) Plot-Optionen verwendet, Bereichs-Angaben und Plot-Optionen sind optional. Empfohlen wird, die Bereiche über „xrange“ und „yrange“ einzustellen. Im Beispiel wird der Gesamtwiderstand aus der Parallelschaltung zweier Widerstände dargestellt. R1 · R2 Rges = R1 + R2 1 2 3 4 r p a r ( a , b ) = ( ( a > 0 . 0 ) ? ( ( b > 0 . 0 ) ? ( ( a * b ) / ( a+b ) ) : 0 . 0 ) : 0 . 0 ) s e t xrange [ 0 . 0 : 1 0 . 0 ] s e t yrange [ 0 . 0 : 1 0 . 0 ] splot rpar (x , y) no ti tl e Verwenden Sie das Kommando 1 help s p l o t für ausführlichere Informationen. 45 2 GnuPlot 5 4 3 2 1 0 0 2 4 6 8 10 0 2 4 6 8 10 Abbildung 2.27: Verdeckte Elemente 2.7.2 Einstellungen für 3D-Plots Versteckte Darstellung Die Option „set hidden3d“ bewirkt, dass Objekte im Hintergrund nicht gezeichnet werden, wenn sie durch weiter vorn befindliche Objekte verdeckt werden. 1 2 3 4 5 r p a r ( a , b ) = ( ( a > 0 . 0 ) ? ( ( b > 0 . 0 ) ? ( ( a * b ) / ( a+b ) ) : 0 . 0 ) : 0 . 0 ) s e t xrange [ 0 . 0 : 1 0 . 0 ] s e t yrange [ 0 . 0 : 1 0 . 0 ] s e t hidden3d splot rpar (x , y) no ti tl e Verwenden Sie das Kommando 1 help s e t hidden3d für ausführlichere Informationen. 46 2.7 3D-Plots 5 4 3 2 1 0 0 2 4 6 8 10 0 2 4 6 8 10 Abbildung 2.28: Höhere Anzahl an Stützstellen Anzahl der Stützstellen Die Anzahl der Stützstellen kann mit set isosamples x-samples y-samples gesetzt werden. Die zweite Angabe ist dabei optional. Zu beachten ist, dass eine höhere Anzahl an Stützstellen eine längere Berechnung erfordert und größere Ausgabedateien erzeugt. Im Beispiel wird die Anzahl der Stützstellen auf 30 für jede Achse erhöht. 1 2 3 4 5 6 r p a r ( a , b ) = ( ( a > 0 . 0 ) ? ( ( b > 0 . 0 ) ? ( ( a * b ) / ( a+b ) ) : 0 . 0 ) : 0 . 0 ) s e t xrange [ 0 . 0 : 1 0 . 0 ] s e t yrange [ 0 . 0 : 1 0 . 0 ] s e t hidden3d s e t i s o s a m p l e s 30 ,30 splot rpar (x , y) no ti tl e Verwenden Sie das Kommando 1 help set isosamples für ausführlichere Informationen. 47 2 GnuPlot 5 4 3 2 1 0 0 4 3 2 1 2 4 6 8 10 0 2 4 6 8 10 Abbildung 2.29: Niveaulinien Niveaulinien Zusätzlich zum Funktionsgebirge können mit set contour Ort Niveaulinien eingezeichnet werden. Als Ort, an dem die Linien gezeichnet werden, kann „contour“ (im Funktionsgebirge), „base“ (in der xy-Ebene) oder „both“ (beides) angegeben werden. Im Beispiel werden beide Möglichkeiten für Niveaulinien benutzt. mit set cntrparam Parameter können Parameter für die Kontur und die Höhenlinien festgelegt werden. Im Beispiel wird vorgegeben, dass die Kurvenverläufe durch kubische Splines approximiert werden. 1 2 3 4 5 6 7 8 9 r p a r ( a , b ) = ( ( a > 0 . 0 ) ? ( ( b > 0 . 0 ) ? ( ( a * b ) / ( a+b ) ) : 0 . 0 ) : 0 . 0 ) s e t xrange [ 0 . 0 : 1 0 . 0 ] s e t yrange [ 0 . 0 : 1 0 . 0 ] s e t hidden3d s e t i s o s a m p l e s 30 ,30 s e t contour both set cntrparam cubicspline s e t key l e f t t o p splot rpar (x , y) no ti tl e Verwenden Sie die Kommandos 1 2 help set contour help set cntrparam für ausführlichere Informationen. 48 2.7 3D-Plots Blickrichtung Die Darstellung dreidimensionaler Objekte auf zweidimensionalen Ausgabegeräten (Bildschirm, Papier) hängt in erheblicher Weise vom Standpunkt bzw. der Blickrichtung des Beobachters ab. Mit set view α,β ,s,sz kann die Blickrichtung festgelegt werden. Standardmäßig ist α = 60◦ , β = 30◦ , s = 1 und sz = 1 eingestellt. Die Werte haben folgende Auswirkungen: • Zunächst ist die Blickrichtung so festgelegt, dass man von oben auf die x,yEbene schaut. Die z-Achse kommt also dem Betrachter entgegen. • Die Blickrichtung klappt dann um den Winkel α herunter zur x,y-Ebene. • Die Blickrichtung wird dann um den Winkel β nach rechts geklappt. • Der Parameter s gibt die Skalierung für den gesamten Plot vor. • Der Parameter sz kann optional benutzt werden, um eine gesonderte Skalierung für die z-Achse vorzunehmen. Das Beispiel in Abb. 2.30 auf der nächsten Seite zeigt dieselbe Funktion aus verschiedenen Blickrichtungen betrachtet. Verwenden Sie das Kommando 1 h e l p s e t view für ausführlichere Informationen. 49 2 GnuPlot 30,30,1 5 4 3 2 1 0 60,30,1 10 8 6 0 2 4 5 4 3 2 1 0 4 6 0 2 8 2 4 10 0 6 8 10 0 4 2 45,30,1 5 4 3 2 1 0 8 6 10 60,45,1 10 5 4 3 2 1 0 8 6 0 2 4 0 4 6 2 4 2 8 10 0 6 8 10 0 2 4 60,30,1 60,60,1 5 4 3 2 1 0 5 4 3 2 1 0 0 2 4 6 8 10 0 2 4 8 6 10 0 2 4 6 8 2 10 0 4 10 8 6 60,100,1 100,30,1 5 4 3 2 1 0 5 4 3 2 1 0 0 2 4 6 8 10 0 2 4 6 8 10 0 2 Abbildung 2.30: Verschiedene Blickpunkte 50 10 8 6 4 6 8 8 10 10 6 4 2 0 2.7 3D-Plots u, cos(u), sin(u) 1 0.5 z 0 -0.5 -1 0 2 4 0 6 8 10 -0.5 12 14 16 x 18 20 -1 1 0.5 y Abbildung 2.31: Schraubenförmige Kurve 2.7.3 Parametrische Plots Für dreidimensionale parametrische Plots heißen die unabhängigen Variablen „u“ und „v“. Die entsprechenden Wertebereiche werden als „urange“ und „vrange“ festgelegt. Wird nur eine unabhängige Variable benötigt, wird der anderen Variablen ein Wertebereich mit gleichem Anfangs- und Endwert zugewiesen wie im Beispiel: 1 2 3 4 5 6 7 8 9 set parametric s e t urange [0:6* pi ] s e t vrange [ 1 : 1 ] set xlabel "x" set ylabel "y" set zlabel "z" s e t y t i c s −1 ,0.5 ,1 s e t z t i c s −1 ,0.5 ,1 s p l o t u , cos ( u ) , s i n ( u ) Das „splot“-Kommando erhält als Argumente drei Funktionen zur Berechung von x-, y- und z-Wert. 51 2 GnuPlot 3D-Plot z 2 1 0 -1 -2 4 -8 -6 -4 -2 x 0 0 2 4 6 -4 y 8 Abbildung 2.32: Torus Im Beispiel wird ein Torus dargestellt. Hierzu wird die Kreisfläche à : y = 5 + 2 cos v z = 2 sin v entlang der kreisförmigen Kurve k̃ : x = 5 cos u z = 5 sin u rotiert. Es ergibt sich x = (5 + 2 cos v) cos u 1 2 3 4 5 6 7 8 9 10 11 12 13 14 y = (5 + 2 cos u) sin u z = 2 sin v set parametric set xlabel "x" set ylabel "y" set zlabel "z" A=5 B=2 s e t urange [ 0 : 2 . 0 * pi ] s e t vrange [ 0 : 2 . 0 * pi ] s e t i s o s a m p l e s 50 ,50 s e t hidden3d s e t y t i c s −8 ,4 ,8 s e t z t i c s −2 ,1 ,2 s p l o t (A+B* c o s ( v ) ) * c o s ( u ) , ( A+B* c o s ( v ) ) * s i n ( u ) , B* s i n ( v ) \ t i t l e "3D−P l o t " 52 2.8 Terminals 2.8 Terminals - Die Ausgabetreiber 2.8.1 Übersicht über Terminals Im Sprachgebrauch von GnuPlot werden Ausgabegeräte als Terminals bezeichnet. Hierzu zählen sowohl Ausgaben auf dem Bildschirm als auch Ausgaben in Datei. Beim Start von GnuPlot ist voreingestellt, dass Graphiken auf den Bildschirm ausgegeben werden. Tabelle 2.4 führt die Ausgabetreiber auf. Tabelle 2.4: Terminals 1 aus Name Ausgabe windows Ausgabe in ein Windows-Fenster aifm Datei für Adobe Illustrator 3.0+ cgm *.cgm-Datei corel Corel-Draw-Datei dumb Text-Terminal dxf *.dxf-Datei (für Import nach AutoCad) emf *.emf-Datei (Windows Metafile) fig *.fig-Datei (für XFig, jFig und WinFig) gif *.gif-Datei1 hp2623a Ausgabe auf HP2623-Drucker hp2648 Ausabe auf HP2648-Drucker hp500c Ausgabe auf HP DeskJet 500c hpgl *.hpgl-Datei (z.B. für HP7575A-Plotter) hpljii Ausgabe auf HP Laserjet II Drucker hppj Ausgabe auf HP PaintJet- und HP3630-Drucker imagen Imagen-Laserdrucker mif *.mif-Datei (für Frame Maker) pbm *.pbm-Datei (NetPBM) png *.png-Datei postscript *.ps-Datei (PostScript) qms QMS/QUIC-Laserdrucker svg *.svg-Datei (für Batik, Inkscape. . . ) Lizenzgründen erzeugen manche GnuPlot-Versionen PNG-Dateien anstelle von GIF-Dateien 53 2 GnuPlot 54 2.8 Terminals Abbildung 2.33: PNG-Datei 2.8.2 Ausgabedatei erzeugen Um eine Ausgabedatei zu erzeugen, werden zwei Anweisungen benötigt: • Mit set term Terminal [Terminal-Optionen] wird ein Terminal festgelegt (damit wird angegeben, was für eine Ausgabedatei erzeugt wird). Optional können weitere Optionen für das Terminal angegeben werden. • Mit set output "Dateiname" wird ein Dateiname für die Ausgabe vorgegeben. Im Beispiel wird eine PNG-Datei erzeugt, diese kann z.B. in Webseiten eingebunden werden. 55 2 GnuPlot 1 2 3 4 5 6 7 8 9 10 11 s e t t e r m i n a l png t r a n s p a r e n t i n t e r l a c e s e t o u t p u t " o u t p u t . png " r p a r ( a , b ) = ( ( a > 0 . 0 ) ? ( ( b > 0 . 0 ) ? ( ( a * b ) / ( a+b ) ) : 0 . 0 ) : 0 . 0 ) s e t xrange [ 0 . 0 : 1 0 . 0 ] s e t yrange [ 0 . 0 : 1 0 . 0 ] s e t hidden3d s e t i s o s a m p l e s 30 ,30 s e t contour both set cntrparam cubicspline s e t key l e f t t o p splot rpar (x , y) no ti tl e Verwenden Sie das Kommando 1 h e l p s e t t e r m png für ausführlichere Informationen zum Setup des PNG-Terminals. Ersetzen Sie ggf. „png“ durch den Terminal-Namen, falls Sie ein anderes Terminal verwenden möchten. 56 2.9 GnuPlot und LATEX 2.9 GnuPlot und LATEX 2.9.1 GnuPlot oder pst-plot? GnuPlot ist sehr gut dafür geeignet, mathematische Zusammenhänge „auf die Schnelle“ zu visualisieren, um Lösungsansätze zu finden oder Anschauungsmaterialien zu erstellen. Im Bereich der technischen Dokumentationen sollten Diagramme aber entsprechend DIN 461 angefertigt werden. Diese gilt insbesondere für Qualifikationsnachweise im Rahmen einer Ausbildung (z. B. Beleg-, Bachelor- und Diplomarbeiten). Das Paket „pst-plot“, das Bestandteil des PSTricks-Bundles ist, ermöglicht das Erstellen normgerechter Diagramme für die Einbindung in LATEX-Dokumente. Eine Einführung in pst-plot finden Sie z. B. unter http://www.fh-schmalkalden. de/schmalkaldenmedia/Downloads/elektrotechnik/l/edv/pstpl.pdf. 2.9.2 Das MetaPost-Terminal GnuPlot-Ausgaben, die mit LATEX bzw. pdfLATEX verwendet werden, sollten folgende Anforderungen erfüllen: • Es kommen nur Vektorgraphiken in Frage, da diese ohne Qualitätsverluste skalierbar sind. Der Unterschied zwischen der Vektor- und Bitmapgraphiken wird beim Vergleich von Abb. 2.33 auf Seite 55 (Bitmapgraphik) und Abb. 2.29 auf Seite 48 (Vektorgraphik) deutlich, insbesondere beim Hineinzoomen. • Die GnuPlot-Ausgabe muss Nachbearbeitungen zulassen, diese müssen ohne großen Aufwand möglich sein. Daher sollte die GnuPlot-Ausgabe als TextDatei vorliegen, das Dateiformat sollte unkompliziert sein. • Die Datei – bzw. eine Datei, die aus der GnuPlot-Ausgabe erzeugt wird – muss sowohl mit LATEX als auch mit pdfLATEX verarbeitet werden können. Diese Anforderungen werden besonders gut durch das MetaPost-Terminal erfüllt. MetaPost-Dateien (*.mp) werden mit dem Programm metapost (bzw. mpost) verarbeitet. Dabei entsteht eine „*.0“-Datei. Wird diese zu „*.mps“ umbenannt, kann die „*.mps“-Datei sowohl mit LATEX als auch mit pdfLATEX verwendet werden. 57 2 GnuPlot Die MetaPost-Sprache ist wesentlich verständlicher als reines PostScript, z.B. bewirkt 1 2 3 4 5 6 7 8 beginfig (0) path p ; p : = ( f u l l c i r c l e s c a l e d 1cm ) s h i f t e d ( 2 cm , 2 cm ) ; f i l l p withcolor ( red ) ; p i c k u p p e n c i r c l e s c a l e d 1mm; draw p w i t h c o l o r ( b l a c k ) ; endfig ; end . dasselbe wie 1 2 3 4 5 6 7 8 9 10 11 12 13 14 %!PS−Adobe −2.0 %%BoundingBox : 0 0 73 73 1 0 0 setrgbcolor newpath 7 0 . 8 6 6 5 6 . 6 9 3 moveto 5 6 . 6 9 3 5 6 . 6 9 3 1 4 . 1 7 3 0 360 a r c closepath fill 0 setgray 2.8346 s e t l i n e w i d t h 7 0 . 8 6 6 5 6 . 6 9 3 moveto 5 6 . 6 9 3 5 6 . 6 9 3 1 4 . 1 7 3 0 360 a r c closepath stroke 58 2.9 GnuPlot und LATEX 2.9.3 MetaPost-Terminal verwenden Um das MetaPost-Terminal zu verwenden, schreiben Sie in der GnuPlot-Datei die Zeilen set term mp Optionen set output Dateiname Folgende Optionen werden empfohlen, wenn die GnuPlot-Ausgabe mit LATEX weiterverarbeitet werden soll: • color für farbige Darstellung. • latex legt fest, dass MetaPost LATEX für den Textsatz verwendet. • psnfss bewirkt, dass PostScript-Fonts verwendet werden. Das Beispiel entsprechend Abb. 2.2 auf Seite 15 wird damit folgendermaßen abgewandelt, die Ausgabedatei „gosp0003.mp“ wird erzeugt. 1 2 3 4 5 6 s e t t e r m i n a l mp c l a t e x p s n f s s s e t o u t p u t " g o s p 0 0 0 3 . mp" r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] s e t yrange [ 0 . 0 : 5 . 0 ] plot rpar (10.0 , x) Verwenden Sie das Kommando 1 h e l p s e t t e r m mp für weitere Informationen zu Optionen des MetaPost-Terminals. 59 2 GnuPlot 2.9.4 MetaPost-Datei konvertieren Verwenden Sie den Befehl mpost -tex=latex Dateiname und geben Sie den Dateinamen dabei ohne Endung an. Im Beispiel 1 mpost −t e x = l a t e x g o s p 0 0 0 3 wird die Datei „gosp0003.mp“ verarbeitet, es entsteht die Datei „gosp0003.0“. Diese benennen Sie um zu „gosp0003.mps“. 60 2.9 GnuPlot und LATEX 5 rpar(10.0,x) 4 3 2 1 0 0 5 10 15 20 Abbildung 2.34: Meine Bildunterschrift 2.9.5 MetaPost-Ausgabe in LATEX verwenden In der LATEX-Quelle binden Sie „gosp0003.mps“ folgendermaßen ein: 1 2 3 4 5 6 7 \ begin { f i g u r e } {\ centering \ i n c l u d e g r a p h i c s { g o s p 0 0 0 3 . mps} \ c a p t i o n { Meine B i l d u n t e r s c h r i f t } \ l a b e l { f i g : i r g e n d e i n −r e f e r e n z −name } } \ end { f i g u r e } Das Ergebnis dieser Operation sehen Sie in Abb. 2.34. 61 2 GnuPlot 2.9.6 Anpassungen an der MetaPost-Datei Datei umbenennen Sollen Anpassungen an der GnuPlot-Ausgabe vorgenommen werden, muss die GnuPlot-Ausgabedatei vorher umbenannt werden. Andernfalls wird bei einem erneuten Aufruf von GnuPlot die MetaPost-Datei mit unseren Änderungen überschrieben, die Änderungen wären dann verloren. Also benennen wir im Beispiel „gosp0003.mp“ um zu „gomp0001.mp“, bevor mit den Änderungen begonnen wird. 62 2.9 GnuPlot und LATEX Font-Anpassungen Meist stimmen die von MetaPost gewählten Fonts nicht mit denen überein, die im jeweiligen LATEX-Dokument verwendet werden. Um eine Übereinstimmung zu erreichen, muss die LATEX-Präambel in der MetaPost-Datei an die des Dokumentes angepasst werden. Lautet die Dokumenten-Präambel z.B. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \ d o c u m e n t c l a s s [ ngerman , 1 2 p t , a 4 p a p e r , o r i g l o n g t a b l e ] { s c r b o o k } \ u s e p a c k a g e { ngerman } \ usepackage { i f p d f } \ usepackage [ l a t i n 1 ]{ inputenc } \ u s e p a c k a g e [ T1 ] { f o n t e n c } \ usepackage { textcomp } \ u s e p a c k a g e { mathptmx } \ usepackage [ scaled =.92]{ h e l v e t } \ usepackage { c o u r i e r } \ u s e p a c k a g e [ i n t l i m i t s ] { amsmath } \ usepackage { t r f s i g n s } \ usepackage { array } \ usepackage { enumerate } \ usepackage { l o n g t a b l e } \ usepackage { latexsym } \ usepackage { l i s t i n g s } \ u s e p a c k a g e [ ngerman ] { v a r i o r e f } \ u s e p a c k a g e { makeidx } \ usepackage { color } \ ifpdf \ usepackage [ a c t i v a t e =normal ]{ p d f c p r o t } \ usepackage [ pdftex ]{ graphicx } \ usepackage { epstopdf } \ p d f c o m p r e s s l e v e l =9 \ usepackage [ pdftex , a4paper=true , p d f t i t l e ={Some t i t l e } , p d f s u b j e c t ={Some s u b j e c t } , p d f a u t h o r ={My Name } , colorlinks =true , bookmarks , bookmarksnumbered , linkcolor =linkgreen , pdfpagemode =UseNone , p d f s t a r t v i e w ={XYZ 0 835 1 . 2 5 } , ]{ hyperref } \ else \ usepackage [ dvips ]{ graphicx } \ D e c l a r e G r a p h i c s R u l e { . png }{ e p s } { . bb } { ‘ bmeps #1} 63 2 GnuPlot 41 42 43 44 45 46 47 48 49 50 51 \ usepackage [ dvips ]{ hyperref } \ fi \ d e f i n e c o l o r { l i n k g r e e n }{ r g b } { 0 , 0 . 5 , 0 } \ d e f \ t h e y e a r {2006} \ parindent0cm \ a u t h o r {My Name} \ t i t l e {Some t i t l e } \ include { cover } \ renewcommand * { \ s e c t f o n t } { \ b f s e r i e s } \ newcommand { \ i m a g e s c a l e f a c t o r } [ 0 ] { 0 . 7 5 } \ makeindex so kann daraus der Teil extrahiert werden, der die Fonts einstellt und sich auf TextEncoding bezieht. 1 2 3 4 5 6 7 8 9 10 11 \ d o c u m e n t c l a s s [ ngerman , 1 2 p t , a 4 p a p e r , o r i g l o n g t a b l e ] { s c r b o o k } \ u s e p a c k a g e { ngerman } \ usepackage [ l a t i n 1 ]{ inputenc } \ u s e p a c k a g e [ T1 ] { f o n t e n c } \ usepackage { textcomp } \ u s e p a c k a g e { mathptmx } \ usepackage [ scaled =.92]{ h e l v e t } \ usepackage { c o u r i e r } \ u s e p a c k a g e [ i n t l i m i t s ] { amsmath } \ usepackage { t r f s i g n s } \ usepackage { latexsym } Der Einfachheit halber kann in der MetaPost-Quelle die Dokumentenklasse „article“ verwendet werden, als Präambel ergibt sich somit: 1 2 3 4 5 6 7 8 9 10 11 \ documentclass [12 pt ]{ a r t i c l e } \ u s e p a c k a g e { ngerman } \ usepackage [ l a t i n 1 ]{ inputenc } \ u s e p a c k a g e [ T1 ] { f o n t e n c } \ usepackage { textcomp } \ u s e p a c k a g e { mathptmx } \ usepackage [ scaled =.92]{ h e l v e t } \ usepackage { c o u r i e r } \ u s e p a c k a g e [ i n t l i m i t s ] { amsmath } \ usepackage { t r f s i g n s } \ usepackage { latexsym } 64 2.9 GnuPlot und LATEX Der Beginn der MetaPost-Quelle sieht aus wie folgt: 1 %GNUPLOT M e t a p o s t o u t p u t : Thu J u n 04 1 8 : 3 4 : 4 8 2009 2 3 4 5 6 7 8 %% %% %% %% %% Add \ d o c u m e n t c l a s s and \ b e g i n { dcoument } f o r l a t e x NB you s h o u l d s e t t h e e n v i r o n m e n t v a r i a b l e TEX t o t h e name o f y o u r l a t e x e x e c u t a b l e ( n o r m a l l y l a t e x ) i n o r d e r f o r m e t a p o s t t o work or run mpost −−t e x = l a t e x . . . 9 10 11 12 13 14 15 16 17 18 19 20 21 22 % BEGPRE verbatimtex \ documentclass { a r t i c l e } \ usepackage [ l a t i n 1 ]{ inputenc } \ u s e p a c k a g e [ T1 ] { f o n t e n c } \ usepackage { textcomp } \ u s e p a c k a g e { mathptmx } \ usepackage [ scaled =.92]{ h e l v e t } \ usepackage { c o u r i e r } \ usepackage { latexsym } \ b e g i n { document } etex % ENDPRE Zu erkennen ist, dass die LATEX-Präambel zwischen zwei Zeilen „verbatimtex“ und „etex“ eingeschlossen ist. Diese Konstruktion erlaubt, LATEX-Code anzugeben, der nicht direkt zu einer Ausgabe führt sondern zum Setup genutzt wird. Da derartiger Code an unterschiedlichen Stellen auftreten kann, ist die LATEX-Präambel durch zusätzliche Kommentare „% BEGPRE“ und „% ENDPRE“ markiert. Wird die Präambel durch eine solche ersetzt, die unserem LATEX-Dokument entspricht, führt dies zu einer Darstellung wie in Abb. 2.36 auf Seite 67. Im Wesentlichen werden dieselben Pakete für die Font-Auswahl verwendet, die Schriften sind in beiden Abbildungen gleich. Lediglich die Schriftgröße ist unterschiedlich, in Abb. 2.36 auf Seite 67 wird für die Skalenbeschriftungen und die Legende dieselbe Schriftart und Schriftgröße verwendet wie im umgebenden Text. 1 %GNUPLOT M e t a p o s t o u t p u t : S a t Mar 11 1 7 : 2 5 : 1 1 2006 2 3 4 5 6 7 8 %% %% %% %% %% Add \ d o c u m e n t c l a s s and \ b e g i n { dcoument } f o r l a t e x NB you s h o u l d s e t t h e e n v i r o n m e n t v a r i a b l e TEX t o t h e name o f y o u r l a t e x e x e c u t a b l e ( n o r m a l l y l a t e x ) i n o r d e r f o r m e t a p o s t t o work or run mpost −−t e x = l a t e x . . . 9 10 11 % BEGPRE verbatimtex 65 2 GnuPlot 12 13 14 15 16 17 18 19 20 21 22 23 24 25 \ documentclass [12 pt ]{ a r t i c l e } \ u s e p a c k a g e { ngerman } \ usepackage [ l a t i n 1 ]{ inputenc } \ u s e p a c k a g e [ T1 ] { f o n t e n c } \ usepackage { textcomp } \ u s e p a c k a g e { mathptmx } \ usepackage [ scaled =.92]{ h e l v e t } \ usepackage { c o u r i e r } \ u s e p a c k a g e [ i n t l i m i t s ] { amsmath } \ usepackage { t r f s i g n s } \ usepackage { latexsym } \ b e g i n { document } etex % ENDPRE 66 2.9 GnuPlot und LATEX 5 rpar(10.0,x) 4 3 2 1 0 0 5 10 15 20 Abbildung 2.35: Darstellung mit den Standard-Schriftarten 5 rpar(10.0,x) 4 3 2 1 0 0 5 10 15 20 Abbildung 2.36: Darstellung mit angepassten Schriften 67 2 GnuPlot Größenanpassung Um die Diagrammdarstellung in ein Zentimeter-Raster zu bringen, müssen zunächst die Koordinatenbereiche so gewählt werden, dass Skalenanfang und Skalenende für jede Achse auf „runde“ Werte fallen. Der x-Bereich verläuft von 0 bis 10 und kann so belassen werden. Der y-Bereich verläuft von 0 bis 5 und kann ebenfalls so belassen werden. 1 2 3 4 5 6 7 8 9 10 s e t t e r m i n a l mp c l a t e x p s n f s s s e t o u t p u t " g o s p 0 0 4 5 . mp" s e t x l a b e l " Widerstand " s e t y l a b e l " Gesamtwiderstand " r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] s e t yrange [ 0 . 0 : 5 . 0 ] set xtics 0 ,2 ,20 set ytics 0 ,2 ,4 plot rpar (10.0 , x) Diese Datei wird mit GnuPlot verarbeitet, die entstehende *.mp-Datei wird zu gomp. . . .mp umbenannt und die Präambel an das LATEX-Dokument angepasst wie in Abschnitt 2.9.6 auf Seite 63 beschrieben. Aus Abb. 2.37 auf der nächsten Seite ist zu entnehmen, dass für den x-Bereich eine Breite von 10 cm und für den y-Bereich eine Höhe von 10 cm angemessen erscheinen. 68 2.9 GnuPlot und LATEX Bildfläche Diagrammfläche h = 720 b y2 ∆y = y2 − y1 y1 x1 ∆x = x2 − x1 x2 w = 1200 a Abbildung 2.37: Aufteilung der Zeichenfläche 69 2 GnuPlot Standardmäßig verwendet GnuPlot für das gesamte zu erzeugende Bild eine Breite von 5 Zoll und eine Höhe von 3 Zoll. Die Bildbreite wird in 1200 Einheiten der Länge a unterteilt, die Höhe in 720 Einheiten der Länge b. Ein Teil von Breite und Höhe wird für Beschriftungen verwendet, der Rest für das Diagramm. Die Bildmessungen und die Aufteilung in a- und b-Einheiten finden sich unmittelbar nach der „beginfig(0)“Anweisung. 1 enddef ; 2 3 beginfig (0); Im anschließenden Text werden zunächst die Skalen gezeichnet und beschriftet, hier finden sich immer jeweils mehrere „draw“ und je eine „put_text“-Anweisung im Wechsel. Bevor die x- und y-Label mit „put_text“ angebracht werden, wird der Umriss der Diagrammfläche einmal gezeichnet. 1 2 3 4 5 draw ( 1 1 4 6 . 3 a , 1 0 9 . 8 b ) − −(1146.3 a , 1 2 6 . 4 b ) ; draw ( 1 1 4 6 . 3 a , 6 8 4 . 6 b ) − −(1146.3 a , 6 6 8 . 0 b ) ; p u t _ t e x t ( b t e x 20 e t e x , 1 1 4 6 . 3 a , 7 3 . 2 b , 0 , 2 ) ; draw ( 1 2 5 . 7 a , 1 0 9 . 8 b ) − −(1146.3 a , 1 0 9 . 8 b ) − −(1146.3 a , 6 8 4 . 6 b ) − −(125.7 a , 6 8 4 . 6 b ) − −(125.7 a , 1 0 9 . 8 b ) ; Kurz vor der „endfig“-Anweisung, die das Bild abschließt, wird der Diagram-Umriss nochmals gezeichnet. 1 2 3 4 5 6 7 8 9 10 − −(589.6 a , 6 5 7 . 2 b ) − −(599.9 a , 6 6 3 . 5 b ) − −(610.2 a , 6 6 9 . 7 b ) − −(620.5 a , 6 7 5 . 8 b ) − −(630.8 a − −(636.0 a , 6 8 4 . 6 b ) ; l i n e t y p e −2; draw ( 1 2 5 . 7 a , 1 0 9 . 8 b ) − −(1146.3 a , 1 0 9 . 8 b ) − −(1146.3 a , 6 8 4 . 6 b ) − −(125.7 a , 6 8 4 . 6 b ) − −(125.7 a , 1 0 9 . 8 b ) ; endfig ; % BEGPOST verbatimtex \ end { document } etex In beiden Listings wurde die „draw“-Zeile umgebrochen, damit sie hier auf die Seite passt. Diesen Listings kann entnommen werden, dass x1 = 125.7 a x2 = 1146,3 a y1 = 109,8 b y2 = 684,6 b ∆x = x2 − x1 ∆y = y2 − y1 woraus folgt = 1020,6 a 70 = 574,8 b 2.9 GnuPlot und LATEX rpar(10.0,x) Gesamtwiderstand 4 2 0 0 2 4 6 8 10 12 14 16 18 20 Widerstand Abbildung 2.38: Korrigierte Skalenteilung Wenn die Diagrammfläche also 10 cm breit und 10 cm hoch werden soll, gilt für die Bildfläche w = 10 cm · 1200 1020,6 h = 10 cm · 720 574,8 Dies wird unmittelbar nach der „beginfig“-Anweisung eingegeben. Die Berechnung wird dabei MetaPost überlassen. 1 2 3 beginfig (0); w: = 1 0 . 0 cm * ( 1 2 0 0 . 0 / ( 1 1 4 6 . 3 − 1 2 5 . 7 ) ) ; h : = 1 0 . 0 cm * ( 7 2 0 . 0 / ( 6 8 4 . 6 − 1 0 9 . 8 ) ) ; a : =w / 1 2 0 0 . 0 ; b : = h / 7 2 0 . 0 ; Mit diesen Änderungen wird eine Darstellung wie in Abb. 2.38 erreicht. Werden Dokumente ausgedruckt, die auf Zentimeterdarstellung optimierte Plots enthalten, muss die automatische Größenanpassung beim Druck deaktiviert werden, siehe Abb. 2.39 auf der nächsten Seite. 71 2 GnuPlot Abbildung 2.39: Größenanpassung deaktivieren 72 2.9 GnuPlot und LATEX rpar(10.0,x) Rges 4 2 0 0 2 4 6 8 10 12 14 16 18 20 R1 Abbildung 2.40: LATEX-Textlabels LaTeX-Labels MetaPost verwendet LATEX für den Textsatz, daher können auch LATEX-Kommandos in Textlabels in MetaPost verwendet werden. Zu beachten ist, dass GnuPlot Backslashes in Labeln als Beginn einer Steuerzeichenfolge betrachtet. Um einen Backslash in die MetaPost-Datei auszugeben, müssen daher zwei Backslashes in der GnuPlotDatei geschrieben werden, z.B. „\\(R_1\\)“ um in der MetaPost-Datei „\(R_1\)“ zu erzeugen. Das Beispiel 1 2 3 4 5 6 7 8 9 s e t t e r m i n a l mp c l a t e x p s n f s s s e t o u t p u t " g o s p 0 0 4 6 . mp" s e t x l a b e l " \ \ ( R_1 \ \ ) " s e t y l a b e l " \ \ ( R_ \ \ t e x t { g e s } \ \ ) " r p a r ( ra , rb ) = ( r a * rb ) / ( r a + rb ) s e t xrange [ 0 . 0 : 2 0 . 0 ] s e t yrange [ 0 . 0 : 5 . 0 ] set xtics 0 ,2 ,20 set ytics 0 ,2 ,4 73 2 GnuPlot 10 plot rpar (10.0 , x) erzeugt dann eine Darstellung entsprechend Abb. 2.40 auf der vorherigen Seite. 74 2.9 GnuPlot und LATEX 2.9.7 Tipps rund um GnuPlot und LaTeX Projekt-Organisation Es wird empfohlen, das Projekt mit all seinen Text- und Graphikdateien in etwa folgendermaßen zu organisieren (für das Beispiel wird angenommen, dass „mb.pdf“ für „Mein Buch“ erzeugt werden soll): • mb.tex Die Hauptdatei enthält die Präambel und schließt dann per „\input{}“ die Datei „mbtext.tex“ ein. • mbtext.tex Diese Datei enthält „\section“, „\subsection“. . . und schließt die zugehörigen Textabschnitte per „\input“ ein, z.B. 1 2 3 4 5 \ \ \ \ \ section { Erster Abschnitt } s u b s e c t i o n { E r s t e r U n t e r a b s c h n i t t } \ i n p u t { mb0101 } s u b s e c t i o n { Z w e i t e r U n t e r a b s c h n i t t } \ i n p u t { mb0102 } section { Zweiter Abschnitt } s u b s e c t i o n { Noch e i n U n t e r a b s c h n i t t } \ i n p u t { mb0201 } Dies hat den Vorteil, dass die Gliederung des Gesamtwerkes in einer Datei gut sichtbar und bearbeitbar ist. • mb0101.tex. . . mb9999.tex Die zu den entsprechenden Überschriften gehörenden Texte. • mbgp0001.gp. . . mbgp9999.gp Dies sind alle GnuPlot-Dateien, durchnummeriert in der Reihenfolge, in der sie angelegt wurden. Die Nummerierung ist unabhängig von der Kapitel- und Abschnittsnummerierung. • mbmp0001.mp. . . mgmp9999.mp Zum einen finden sich hier MetaPost-Dateien, die Sie manuell angelegt haben. Zum anderen handelt es sich um MetaPost-Dateien, die Sie mit GnuPlot erzeugt haben, die aber umbenannt wurden bevor sie angepasst wurden. Die Nummerierung ist unabhängig von der Kapitel- und Abschnittsnummerierung und unabhängig von der Nummerierung der GnuPlot-Dateien. • mbfi0001.fig. . . mbfi9999.fig Fig-Dateien, die mit XFig, jFig oder WinFig erzeugt wurden. • mbbi0001.png. . . mbbi9999.jpg Bitmap-Dateien, die im Projekt verwendet werden. Die unterschiedlichen Quelldateien (*.gp, *.fig, *.png) können auf verschiedenen Wegen (z.B. über *.mp, *.eps, *.pdf) in Zieldateien verwandelt werden, die in 75 2 GnuPlot das LATEX-Dokument eingebunden werden. Die unterschiedlichen Stammnamen („mbgp“, „mbmp“, „mbfi“ und „mbbi“) sollen Namenskollisionen verhindern, die zu versehentlichen Überschreiben von Dateien führen könnten. 76 2.9 GnuPlot und LATEX Das Script prepare.pl Übersicht Das Script „prepare.pl“3 kann Ihnen bei größeren Projekten behilflich sein. Es nimmt Umwandlungen von Quell- in Zieldateien vor und konvertiert dabei nur Dateien, für die das auch erforderlich ist (Quelldatei neuer als Zieldatei). Es ist auch möglich, den Zeittest zu überspringen und alle Zieldateien neu zu erzeugen. Im einzelnen werden • *.gp-Dateien zu *.mp-Dateien konvertiert, • *.fig-Dateien zu *.mp-Dateien oder *.eps/*.pdf/*.tex-Dateien, • *.mp-Dateien zu *.mps und • *.png-Dateien zu *.eps- und *.pdf-Dateien. Setup Um das Script einzusetzen, benötigen Sie folgende Software: • GnuPlot, • Perl, • bmeps4 , • fig2vect5 . Perl und GnuPlot können Sie unter UNIX/Linux meist über das Paketmanagement installieren. Bmeps, png2pdf und fig2vect compilieren Sie aus den Quellen. Für Windows stellt die Firma ActiveState6 die Perl-Distribution ActivePerl bereit. Bmeps, png2pdf und fig2vect sind im „dklibs-win32“-Package7 enthalten, verwenden Sie die Datei „dklibs-win32-*-user-setup.exe“ mit der höchsten Versionsnummer. Das Script muss noch angepasst werden, bevor es benutzt werden kann. • $preamblefile gibt den Namen für eine Datei an, die die LATEX-Präambel enthält, die in *.mp und *.tex-Ausgaben verwendet wird. Diese Datei darf die Zeile „\begin{document}“ nicht enthalten. • $figtomp legt fest, ob *.fig-Dateien zu MetaPost-Dateien (*.mp) konvertiert werden (1) oder zu *.eps/*.pdf/*.tex (0). 3 als Anlage in dieser PDF-Datei enthalten, siehe Anhang A.1 auf Seite 169 4 http://sourceforge.net/projects/bmeps 5 http://sourceforge.net/projects/fig2vect 6 http://www.activestate.com 7 http://sourceforge.net/projects/dklibs 77 2 GnuPlot • usetransfig gibt vor, ob *.fig-Dateien mit transfig (1) oder fig2vect (0) verarbeitet werden. • $bmeps_options legt die Optionen für das Programm „bmeps“ fest, das *.png-Dateien zu *.epsDateien konvertiert. Standardmäßig ist hier „-leps“ voreingestellt für PostScript Level 2, farbige Ausgabe und ASCII 85- und Runlength-Encoding. Der wichtigste anzupassende Punkt ist meist die Erstellung einer eigenen LATEXPräambel-Datei. 78 3 Erste Schritte mit GNU Octave und Scilab 3.1 Einführung Dieser Text versucht, einen Einstieg in GNU Octave und Scilab anhand ausgwählter Beispiele zu ermöglichen. Die Beispiele zeigen einige Verwendungsmöglichkeiten beider Programme auf und sollen Interesse für eine weitere Beschäftigung mit der Software wecken. Eine ausführliche oder gar vollständige Beschreibung beider Programme ist nicht das Ziel dieses Textes, hierfür sollte das Handbuch „octave.pdf“ konsultiert werden, das GNU Octave wesentlich detaillierter beschreibt. Dieses ca. 400 Seiten umfassende Handbuch wird normalerweise bei der Installation von GNU Octave mit installiert. Für Informationen über Scilab kann die Projekt-Homepage http://www.scilab. org/ konsultiert werden. Eine PDF-Datei mit einer Einführung in Scilab ist unter ftp://ftp.inria.fr/INRIA/Scilab/documentation/pdf/intro.pdf erhältlich. 79 3 Erste Schritte mit GNU Octave und Scilab 3.2 Octave-Installation 3.2.1 Octave-Installation unter Linux Gängige UNIX/Linux-Distributionen bieten meist an, GNU Octave über das Paketmanagement zu installieren. 3.2.2 Octave-Installation unter Unix/Linux aus den Quellen Die Quelltexte können von der Projekt-Homepage1 bezogen werden. Nach dem Entpacken werden die Kommandos 1 2 3 . / configure make make i n s t a l l ausgeführt. 1 http://www.octave.org 80 3.2 Octave-Installation 3.2.3 Octave-Installation unter Windows GNU Octave ist ein Bestandteil der Cygwin-Tools. • Download Die Software finden Sie unter http://www.cygwin.com. • Installation Bei der Installation sollten Sie in den Abschnitten für Mathematik und Dokumentationen alles aktivieren, was „octave“ im Namen hat. • Pfad-Korrektur Nach der Installation sollten Sie den Pfad korrigieren (Umgebungsvariable PATH). Unter „Systemsteuerung / System / Erweitert“ klicken Sie auf den Button „Umgebungsvariablen“. Es werden die nutzerspezifischen Variablen für den angemeldeten Benutzer (bei Software-Installationen meist „Administrator“) und die systemweiten Umgebungsvariablen angezeigt. In den Systemvariablen doppelklicken Sie „PATH“ und nehmen folgende Einstellungen vor: – C:\Cygwin\bin;C:\Cygwin\usr\X11R6\bin;C:\Cygwin\lib\lapack werden hinter den Standardverzeichnissen angehangen, durch Semikolon vom bereits vorhandenen Text abgetrennt. – Falls MikTex bzw. eine andere LATEX-Distribution installiert ist, sollten die Verzeichnisse mit den Binaries (z.B. C:\texmf\MikTeX\bin) vor den Cygwin-Verzeichnissen aufgeführt sein. Mitunter installiert Cygwin eine TeTeX-Version gemeinsam mit GNU Octave. Wenn Sie eine native Win32LATEX-Distribution installiert haben, werden Sie sicherlich diese verwenden wollen und nicht die Cygwin-basierte. – Falls sowohl MikTeX als auch dklibs-win32 installiert sind, sollte C:\Programme\Krause\bin im PATH vor C:\texmf\MikTeX\bin aufgeführt sein. Die dklibs-win32-Packages enthalten Binaries der jeweils aktuellen bmeps-Version, die bmeps-Binaries in MikTeX sind meist nicht ganz so aktuell. – Falls Perl und/oder Tcl/Tk installiert sind, sollten die entsprechenden binVerzeichnisse vor den Cygwin-Verzeichnissen in PATH aufgeführt sein. Auch hier sollten native Win32-Versionen den Vorzug vor den Cygwinbasierten Versionen erhalten. • Testweiser Start des Cygwin X-Servers (falls dieser mit installiert wurde). Das Kommando „startxwin.bat“ startet den X-Server. Dieser wird hier nicht benötigt, es soll nur die interne Verzeichnisstruktur des X-Servers angelegt werden. Das sich öffnende Terminal kann durch Eingabe von „exit“ verlassen werden. Ein Klick mit der rechten Maustaste auf das Systray-Icon, das ein „X“ darstellt, bietet eine Option zum Beenden des X-Servers. 81 3 Erste Schritte mit GNU Octave und Scilab • Korrektur der Benutzerrechte. Die Cygwin-Software installiert sich standardmäßig in C:\Cygwin. Da bei der Installation keine Berechtigungen gesetzt werden, werden alle Berechtigungen von C:\ geerbt. Diese ererbten Berechtigungen sind für meinen Geschmack eine Spur zu großzügig und sollten etwas reduziert werden – was detailliert im Anhang A.2 auf Seite 171 beschrieben wird. Der Gruppe „Benutzer“ wird das Recht auf C:\Cygwin entzogen, in Verzeichnissen neue Dateien anzulegen und Daten zu schreiben. Auf C:\Cygwin\tmp erhält entweder die Gruppe „Benutzer“ oder die Rolle „INTERAKTIV“ Lese- und Ausführungszugriff sowie speziellen Zugriff für „Dateien erstellen / Daten anhängen“ und „Ordner erstellen / Daten anhängen“. 82 3.3 Scilab-Installation 3.3 Scilab-Installation 3.3.1 Scilab-Installation unter Linux Die Quellen können von der Projekt-Homepage http://www.scilab.org/ bezogen werden. Für die Installation unter UNIX/Linux können die Kommandos 1 2 3 . / configure make make i n s t a l l verwendet werden. Mit 1 . / c o n f i g u r e −−h e l p erhalten Sie Hilfestellung, welche Optionen das „configure“-Script verarbeitet. Evtl. findet das „configure“-Script Tcl/Tk nicht selbständig, hier muss durch Angabe der Installationsverzeichnisse nachgeholfen werden. 3.3.2 Scilab-Installation unter Windows Die Software kann von der Projekt-Homepage2 bezogen werden. Zur Installation unter Windows wird die *.exe-Datei gestartet. 2 http://www.scilab.org 83 3 Erste Schritte mit GNU Octave und Scilab 3.4 Octave starten 3.4.1 Interaktives Arbeiten Um interaktiv mit GNU Octave zu arbeiten, geben Sie unter UNIX/Linux in einem Terminalfenster bzw. unter Windows in einem „Cygwin Bash Shell“-Fenster 1 octave ein. Unter Windows können Sie GNU Octave nicht aus einem normalen Eingabeaufforderung-Fenster starten, Sie müssen eine der Cygwin-Shells verwenden, andernfalls erhalten Sie eine unschöne Fehlermeldung entsprechend Abb. 3.1 auf der nächsten Seite. 3.4.2 Datei verarbeiten Eine Datei mit Kommandos können Sie auf zwei Wegen verarbeiten: • Verwendung der Datei als Standardeingabe für GNU Octave: octave < Dateiname • Dateinamen als Kommandozeilenargument angeben: octave Dateiname 84 3.4 Octave starten Abbildung 3.1: Fehlermeldung des 16-Bit-Subsystems 85 3 Erste Schritte mit GNU Octave und Scilab Abbildung 3.2: Scilab-Hauptfenster 3.5 Scilab starten Unter Windows wird das Programm über den Startmenü-Eintrag gestartet, unter UN IX /Linux geben Sie in einem Terminal-Fenster 1 scilab ein. Das Scilab-Hauptfenster erscheint, siehe Abb. 3.2. 86 3.5 Scilab starten Abbildung 3.3: Editor starten Kommandos können direkt im Scilab-Hauptfenster eingegeben werden. Dies ist allerdings nur für kleinere Probleme empfehlenswert, wenn es sich nicht lohnt, diese Kommandos zur Wiederverwendung in einer Datei zu speichern. Sollen Kommandos wiederholt und mit Abwandlungen genutzt werden, wird die Kommandofolge in einer „*.sce“-Datei gespeichert. Zum Anlegen einer solchen Datei klicken Sie auf den Button „Editor“ im Hauptfenster-Menü. Das Editorfenster wird geöffnet. Hier können Sie die Kommandos als Textdatei eingeben (siehe Abb. 3.4 auf der nächsten Seite) und abspeichern (siehe Abb. 3.5 auf Seite 89). Mit dem Menüpunkt „Execute→Load into Scilab“ werden die Kommandos durch Scilab ausgeführt. Die gewünschte Ausgabe ist dann im Hauptfenster sichtbar (Abb. 3.7 auf Seite 91). 87 3 Erste Schritte mit GNU Octave und Scilab Abbildung 3.4: Editorfenster 88 3.5 Scilab starten Abbildung 3.5: Datei speichern 89 3 Erste Schritte mit GNU Octave und Scilab Abbildung 3.6: Kommandos ausführen 90 3.5 Scilab starten Abbildung 3.7: Ergebnisse im Hauptfenster 91 3 Erste Schritte mit GNU Octave und Scilab Abbildung 3.8: Programm verlassen Über den Menüpunkt „File→Exit“ kann das Programm verlassen werden (Abb. 3.8). Alternativ kann im Hauptfenster das Kommando „quit“ eingegeben werden. 92 3.6 Beispiele R1 Uq R2 U2 Abbildung 3.9: Spannungsteiler Listing 3.1: oe0001.m bzw. oe0001.sce 1 2 3 4 5 Uq = 1 0 . 0 ; R1 = 4 . 7 e3 ; R2 = 1 0 . 0 e3 ; U2 = Uq * R2 / ( R1 + R2 ) ; p r i n t f ( ’ U2 = %g \ n ’ , U2 ) ; 3.6 Beispiele 3.6.1 Einfache Berechnung Beispiel Gegeben ist eine Schaltung entsprechend Abb. 3.9 mit folgenden Werten: Uq = 10 V R1 = 4,7 kΩ R2 = 10 kΩ Zu berechnen ist die Spannung U2 , die über dem Widerstand R2 abfällt. Die Berechnung kann nach der Formel U2 = R2 ·Uq R1 + R2 erfolgen, dies wird in GNU Octave durch die Datei oe0001.m bzw. in Scilab durch die Datei oe0001.sce realisiert, siehe Listing 3.1. Beide Dateien sind für dieses Beispiel identisch. Als Ergebnis wird ausgegeben, dass U2 = 6,8 V. 93 3 Erste Schritte mit GNU Octave und Scilab Aufbau der Eingabe Die Eingabe für GNU Octave und Scilab besteht jeweils aus einer Folge von Anweisungen. Die meisten Anweisungen sind dabei Zuweisungen, die einer Variable einen Wert zuweisen. Wird eine Anweisung nicht mit Semikolon abgeschlossen, wird der Wert, der sich bei der letzten Berechnung ergibt, als Report ausgegeben. Wird eine Anweisung mit Semikolon abgeschlossen, erfolgt diese Report-Ausgabe nicht. Es wird empfohlen, alle Anweisungen mit Semikolon abzuschließen. Zuweisung Eine Zuweisungsanweisung hat die Form Variablenname = Ausdruck Ein Variablenname beginnt mit Buchstaben oder Unterstrich, darauf können weitere Unterstriche, Buchstaben und Zahlen folgen. Ein mathematischer Ausdruck entsteht, indem Operanden (Zahlenwerte oder Variableninhalte) durch mathematische Operatoren und Funktionen verknüpft werden.3 In GNU Octave ist bereits eine große Anzahl an Funktionen und Konstanten vordefiniert. Diese werden im Abschnitt „Arithmetic“ in „octave.pdf“ ausführlich vorgestellt. In Scilab öffnen Sie die Hilfe über den Menüpunkt „?→Scilab Help“ oder indem Sie das Kommando 1 help ( ) ; eingeben. Das Fenster „Scilab Browse Help“ wird geöffnet, es enthält im linken Teil ein Inhaltsverzeichnis als Baumstruktur. Wird hier ein Eintrag angeklickt, wird im rechten Teil des Fensters der zugehörige Text angezeigt. Der Eintrag „Elementar Functions“ im Inhaltsverzeichnis enthält die Dokumentation der in Scilab vordefinierten Funktionen. 3 In diesem Sinne kann ein „Ausdruck“ auch als Synonym für „Berechnungsergebnis“ angesehen werden. 94 3.6 Beispiele Skalare Skalare sind Datentypen, die einen einzelnen Wert (entweder reell oder komplex) aufnehmen. Matrizen als weiterer numerischer Datentyp werden später behandelt. Der Dezimaltrenner für Gleitkommazahlen ist der Punkt. Die Multiplikation mit Zehnerpotenzen wird mittels eines „e“ beschrieben, dem die Zehnerpotenz folgt, z.B.: „1.23e-6“ für 1,23 · 10−6 oder „4.56e3“ für 4,56 · 103 . Für die Zahl π ist in GNU Octave die Konstante „pi“ und in Scilab die Konstante „%pi“vordefiniert. Um komplexe Zahlen zu bilden, kann in GNU Octave die vordefinierte Variable „i“ verwendet werden, in Scilab „%i“. Die Zahl 3 + 4i kann z.B. als „3+4*i“ (GNU Octave) bzw. „3+4*%i“ (Scilab) eingegeben werden. Als Kurzschreibweise ist in GNU Octave auch „3+4i“ möglich, hier darf zwischen dem numerischen Wert des Imaginärteiles und dem „i“ kein Leerzeichen stehen. π Komplexe Zahlen Octave pi 3+4*i 3+4i Scilab %pi 3+4*%i 95 3 Erste Schritte mit GNU Octave und Scilab R1 I3 Uq R2 R3 Abbildung 3.10: Schaltung 3.6.2 Selbstdefinierte Funktion Beispiel Gegeben sei eine Schaltung entsprechend Abb. 3.10 mit Uq = 10 V R1 = 4,7 kΩ R2 = 10 kΩ R3 = 47 kΩ Zu berechnen ist der Strom I3 durch R3 . Die Dateien oe0002.m und oe0002.sce realisieren die Berechnung in GNU Octave und Scilab. 96 3.6 Beispiele Listing 3.2: oe0002.m: Berechnung in Octave 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # Funktionsdefinition # P a r a l l e l s c h a l t u n g zweier Widerstaende function y = para ( a , b ) y = 0.0; if ( a > 0.0) if (b > 0.0) y = a * b / (a + b); endif endif endfunction # Gegebene G r o e s s e n Uq = 1 0 . 0 ; R1 = 4 . 7 e3 ; R2 = 1 0 . 0 e3 ; R3 = 4 7 . 0 e3 ; # Berechnung Rges = R1 + p a r a ( R2 , R3 ) ; I g e s = Uq / Rges ; I 3 = I g e s * R2 / ( R2 + R3 ) ; # Ausgabe p r i n t f ( ’ I 3 = %g \ n ’ , I 3 ) ; 97 3 Erste Schritte mit GNU Octave und Scilab Listing 3.3: oe0002.sce: Berechnung in Scilab 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // Funktionsdefinition / / P a r a l l e l s c h a l t u n g zweier Widerstaende function [ y ] = para ( a , b ) y = 0.0; if ( a > 0.0) if (b > 0.0) y = a * b / (a + b); end end endfunction / / Gegebene G r o e s s e n Uq = 1 0 . 0 ; R1 = 4 . 7 e3 ; R2 = 1 0 . 0 e3 ; R3 = 4 7 . 0 e3 ; / / Berechnung Rges = R1 + p a r a ( R2 , R3 ) ; I g e s = Uq / Rges ; I 3 = I g e s * R2 / ( R2 + R3 ) ; / / Ausgabe p r i n t f ( ’ I 3 = %g \ n ’ , I 3 ) ; 98 3.6 Beispiele Funktionsdefinition Eine Funktionsdefinition hat in GNU Octave folgenden grundsätzlichen Aufbau: function Rückgabevariable = Funktionsname(Parameterliste) Anweisungsliste endfunction In Scilab wird die Rückgabevariable auch dann in eckige Klammern gesetzt, wenn nur ein Wert bzw. Objekt zurückgegeben wird: function [Rückgabevariable] = Funktionsname(Parameterliste) Anweisungsliste endfunction Definiert wird die Funktion mit dem angegebenen Funktionsnamen. In der Anweisungsliste wird die Rückgabevariable auf den Wert gesetzt, der als Funktionsergebnis zurückgegeben wird. Die Rückgabevariable und die Parameter aus der Parameterliste sind lokale Variablen der Funktion. Im Beispiel wird die Funktion para() definiert, die den Gesamtwiderstand bei der Parallelschaltung zweier Widerstände berechnet. Die Rückgabevariable y wird zunächst auf 0 gesetzt. Nur wenn beide Widerstände größer als 0 sind, wird die Berechnung durchgeführt, damit wird eine Division durch 0 vermieden. 99 3 Erste Schritte mit GNU Octave und Scilab Listing 3.4: oe0003.m bzw. oe0003.sce 1 2 3 4 5 6 7 8 9 10 2 −1 −1 2 6 −2 3 −1 −4 2 3 −2 2 0 4 −3 ] ; YVektor = [ 3 −3 −2 −1 ] ; XVektor = C M a t r i x \ YVektor ; XVektor CMatrix = [ 3.6.3 Vektoren, Matrizen und lineare Gleichungssysteme Beispiel 1 - Mathematisches Gleichungssystem Gesucht wird die Lösung für das Gleichungssystem 2x1 − x2 6x1 − 2x2 −4x1 + 2x2 2x1 − x3 + 3x3 + 3x3 + 4x3 + 2x4 − x4 − 2x4 − 3x4 = 3 = −3 = −2 = −1 Das Gleichungssystem wird in Matrizenschreibweise ausgedrückt als 2 −1 −1 2 x1 3 6 −2 3 −1 · x2 = −3 −4 2 3 −2 x3 −2 2 0 4 −3 x4 −1 Die Octave- bzw. Scilab-Datei – dieselbe Datei hier kann für beide Programme genutzt werden – zur Lösung des Gleichungssystemes (Listing 3.4) erzeugt folgende Ausgabe: 1 XVektor = 2 8.0000 21.0000 −2.0000 3.0000 3 4 5 6 100 3.6 Beispiele Matrizen und Vektoren Matrizen sind ein zweiter numerischer Datentyp, Vektoren werden als Sonderformen von Matrizen mit nur einer Zeile bzw. Spalte betrachtet. Die Eingabe von Matrizen erfolgt in eckigen Klammern. Die einzelnen Elemente sind durch Leerzeichen getrennt (eine beliebige Folge von Leerzeichen und Tabulatoren wird als ein Trennzeichen zwischen zwei Elementen betrachtet). Alternativ kann das Komma als Trennzeichen verwendet werden. Jede Matrixzeile wird durch ein Zeilenende abgeschlossen. Lange Matrixzeilen können über mehrere Eingabezeilen hinweg eingegeben werden, dabei wird bedeutet ein Backslash vor dem Ende einer Eingabezeile, dass die Matrixzeile in der nächsten Eingabezeile fortgesetzt wird. Für Matrizen mit kurzen Zeilen ist es auch möglich, mehrere Matrixzeilen in einer Eingabezeile zusammenzufassen, die Matrixzeilen werden dabei durch eine Semikolon getrennt. Im Beispiel 1 2 3 4 5 6 7 8 9 10 A = [1 2 4 5]; B = [1 2; 6 7 ] ; C = [1 \ 2 8 \ 9]; A( 1 , 2 ) B C werden drei Matrizen 1 2 A = 4 5 B= 1 2 6 7 C= 1 2 8 9 angelegt. Ausgegeben wird A1,2 , B und C . 1 2 ans = 2 B = 3 4 5 1 6 2 7 6 7 C = 8 9 10 1 8 2 9 101 3 Erste Schritte mit GNU Octave und Scilab R2 2 Uq2 1 I6 Uq1 R5 Uq4 R6 R1 R4 R3 Uq3 3 0 Abbildung 3.11: Schaltung entsprechend Aufgabenstellung Beispiel 2 - Knotenspannungsanalyse Für die gegebenen Größen Uq1 = 15 V R1 = 15 Ω R5 = 33 Ω Uq2 = 20 V R2 = 3,3 Ω R6 = 20 Ω Uq3 = 25 V R3 = 4,7 Ω Uq4 = 30 V R4 = 3 Ω ist I6 mittels Knotenspannungsanalyse gesucht. Die Knoten werden nummeriert wie in Abb. 3.11 angegeben, eine Knotenspannungsanalyse ergibt das Gleichungssystem U10 Uq2 G2 +Uq4 G4 G2 + G4 + G6 −G2 0 −G2 G1 + G2 + G5 −(G1 + G5 ) U20 = Uq1 G1 −Uq2 G2 0 −(G1 + G5 ) G1 + G3 + G5 U30 Uq3 G3 −Uq1 G1 Nach Lösung des Gleichungssystemes kann I6 mit I6 = U10 R6 berechnet werden. Die Schreibweise U10 steht hier für die Spannung vom Knoten 1 zum Knoten 0. 102 3.6 Beispiele Listing 3.5: oe0004.m bzw. oe0004.sce 1 2 3 Uq1 = 1 5 . 0 ; R1 = 1 5 . 0 ; R5 = 3 3 . 0 ; Uq2 = 2 0 . 0 ; R2 = 3 . 3 ; R6 = 2 0 . 0 ; Uq3 = 2 5 . 0 ; R3 = 4 . 7 ; Uq4 = 3 0 . 0 ; R4 = 3 . 0 ; 4 5 6 G1 = 1 . 0 / R1 ; G2 = 1 . 0 / R2 ; G3 = 1 . 0 / R3 ; G4 = 1 . 0 / R4 ; G5 = 1 . 0 / R5 ; G6 = 1 . 0 / R6 ; 7 8 CMatrix = [ 9 10 ( G2+G4+G6 ) −G2 0 −G2 ( G1+G2+G5 ) −(G1+G5 ) 0 −(G1+G5 ) ( G1+G3+G5 ) ]; 11 12 13 14 YVektor = [ ( Uq2 * G2+Uq4 * G4 ) ( Uq1 * G1−Uq2 * G2 ) ( Uq3 * G3−Uq1 * G1 ) ]; 15 16 XVektor = C M a t r i x \ YVektor ; 17 18 19 U10 = XVektor ( 1 ) ; I 6 = U10 / R6 ; 20 21 22 p r i n t f ( ’ U10 = %g \ n ’ , U10 ) ; p r i n t f ( ’ I 6 = %g \ n ’ , I 6 ) ; Dieses Gleichungssystem wird mit der Datei oe0004.m bzw. oe0004.sce gelöst. Auch in diesem Beispiel sind die Eingabedateien für GNU Octave und Scilab gleich. Bei der Verarbeitung wird die folgende Ausgabe erzeugt: 1 2 U10 = 2 9 . 7 3 1 1 3 4 I6 = 1.486557 Es gilt also U10 = 29,7 V und I6 = 1,49 A. Im Beispiel ist zu sehen, dass auch beim Erstellen von Matrizen die einzelnen Elemente in Form von Ausdrücken angegeben werden können. 103 3 Erste Schritte mit GNU Octave und Scilab 10 x+y √ 1 + 10 − x − y 10 x+5−y 10 8 6 4 2 0 0 1 2 3 4 5 0 3 2 1 4 5 Abbildung 3.12: 3 Funktionen als Gebirge über x-y-Ebene 3.6.4 Nichtlineare Gleichungssysteme Beispiel Gegeben sind drei Funktionen als Gebirge über der xy-Ebene. Gesucht ist der Schnittpunkt der drei Flächen. p 10 10 f2 (x,y) = 1 + 10 − x − y f3 (x,y) = f1 (x,y) = x+y 5+x−y Um das Gleichungssystem mit GNU Octave oder Scilab zu lösen, muss es erst in die entsprechende Schreibweise → − − → − → − y = f (→ x)= 0 gebracht werden. x ↔ x1 y ↔ x2 z ↔ x3 10 x+y p z2 = f2 (x,y) = 1 + 10 − x − y z1 = f1 (x,y) = z3 = f3 (x,y) = 10 5+x−y ↔ 10 − x3 x1 + x2 p y2 = 1 + 10 − x1 − x2 − x3 ↔ y3 = ↔ y1 = 10 − x3 5 + x1 − x2 Gesucht wird nun − − → − → 0 = f (→ x) 104 3.6 Beispiele Listing 3.6: oe0006.m 1 2 3 4 5 6 function y = f (x) y = zeros (3 ,1); y (1) = 10.0 / ( x (1) + x ( 2 ) ) − x ( 3 ) ; y (2) = 1.0 + s q r t (10.0 − x (1) − x ( 2 ) ) − x ( 3 ) ; y (3) = 10.0 / (5.0 + x (1) − x ( 2 ) ) − x ( 3 ) ; endfunction 7 8 [x , info ] = fsolve (" f " , [0.5 ; 2.5; 2 . 0 ] ) ; 9 10 11 12 13 14 15 i f ( i n f o == 1 ) p r i n t f ( ’ Gleichungssystem geloest . \ n ’ ) ; p r i n t f ( ’ x = %g \ ny = %g \ nz = %g \ n ’ , x ( 1 ) , x ( 2 ) , x ( 3 ) ) ; else perror (" fsolve " , 1); endif Die Eingabedatei oe0006.m für GNU Octave wird entsprechend Listing 3.6 erstellt, für Scilab wird oe0006.sce entsprechend Listing 3.7 auf der nächsten Seite verwendet. Die Ausgabe 1 2 3 4 Gleichungssystem geloest . x = 0.201562 y = 2.500000 z = 3.701562 enthält die Koordinaten des Schnittpunktes. 105 3 Erste Schritte mit GNU Octave und Scilab Listing 3.7: oe0006.sce 1 2 3 4 5 6 function [y] = f (x) y = zeros (3 ,1); y (1) = 10.0 / ( x (1) + x ( 2 ) ) − x ( 3 ) ; y (2) = 1.0 + s q r t (10.0 − x (1) − x ( 2 ) ) − x ( 3 ) ; y (3) = 10.0 / (5.0 + x (1) − x ( 2 ) ) − x ( 3 ) ; endfunction 7 8 [x , v , info ] = fsolve ([0.5 ; 2.5; 2.0] , f ); 9 10 11 12 13 14 15 i f ( i n f o == 1 ) p r i n t f ( ’ Gleichungssystem geloest . \ n ’ ) ; p r i n t f ( ’ x = %g \ ny = %g \ nz = %g \ n ’ , x ( 1 ) , x ( 2 ) , x ( 3 ) ) ; else p r i n t f ( ’ Das G l e i c h u n g s s y s t e m k o n n t e n i c h t g e l o e s t werden ! \ n ’ ) ; end 106 3.6 Beispiele Vektoren und Matrizen als Funktionswert und Argument Wie in Zeilen 2. . . 5 zu sehen ist, können sowohl Argumente als auch Rückgabewerte von Funktionen Matrizen (und somit auch Vektoren) sein. Die Anweisung 1 y = zeros (3 ,1); legt fest, dass y ein Vektor mit drei Zeilen und einer Spalte ist. Würde diese Zuweisung weggelassen, ergäbe sich ein Ablauf wie folgt: • Die erste Zuweisung bezieht sich auf Index 1, es wird ein Skalar angelegt. • Die zweite Zuweisung bezieht sich auf Index 2, es wird ein Vektor mit 2 Zeilen angegelegt, der bisherige Inhalt von y wird kopiert und anschließend die Zuweisung für y(2) vorgenommen. • Die dritte Zuweisung bezieht sich auf Index 3, der wiederum außerhalb der bisherigen Feldgröße liegt. Es wird also ein neuer Vektor mit 3 Zeilen angelegt, der bisherige Inhalt von y wird kopiert und anschließend die Zuweisung für y(3) vorgenommen. Das explizite Anlegen eines leeren Vektor mit drei auf 0 gesetzten Elementen verhindert das Neuanlegen und Kopieren durch die ständigen Größenänderungen. Diese sind zwar möglich, aber zeitaufwendig. 107 3 Erste Schritte mit GNU Octave und Scilab Gleichungssystem lösen In GNU Octave erhält die Funktion fsolve() als Argument den Namen der Funktion → − f als Text sowie einen Startwert für die Iteration. Der Name f wird als String – d.h. mit Anführungszeichen – angegeben. Zurückgegeben wird ein Zeilenvektor, der seinerseits einen Zeilenvektor x und eine Statusvariable in f o enthält. In Scilab erhält die Funktion fsolve() als Argumente zuerst den IterationsStartpunkt und dann den Funktionsnamen als Identifier – d.h. ohne Anführungszeichen. Zurückgegeben wird ein Zeilenvektor, der seinerseits einen Zeilenvektor x, einen Vektor v und eine Statusvariable in f o enthält. Wenn in f o = 1, wurde eine Lösung gefunden und x ist der Lösungsvektor. Weitere Informationen zum Lösen nichtlinearer Gleichungssystem finden sich in „octave.pdf“ im Abschnitt „Nonlinear Equations“. 108 3.6 Beispiele Um die Berechnung zu optimieren, kann eine Funktion zur Berechnung der JacobiMatrix (engl.: Jacobian matrix) mit angegeben werden. Diese Matrix sieht folgendermaßen aus: dy dy d y1 1 1 . . . dx d x2 xn 1 dy dy d y2 2 2 d x1 d x2 . . . xn J = . .. .. .. .. . . . d ym d ym d ym d x1 d x2 . . . xn im Beispiel − 10 (x1 +x2 )2 − 10 (x1 +x2 )2 −1 1 1 = − 2√10−x1 −x2 − 2√10−x1 −x2 −1 10 10 −1 − 2 2 (5+x1 −x2 ) (5+x1 −x2 ) In GNU Octave wird der Funktion fsolve() ein Feld von Strings mit 2 Elementen als Argument übergeben (siehe Listing 3.8 auf der nächsten Seite): − • Funktionsname für die Berechnung von → y • Funktionsname für die Berechnung von J − In Scilab werden die Funktionsnamen zur Berechnung von → y und J direkt im fsolve()-Funktionsaufruf angegeben (siehe Listing 3.9 auf Seite 111). 109 3 Erste Schritte mit GNU Octave und Scilab Listing 3.8: oe0009.m 1 2 3 4 5 6 function y = f (x) y = zeros (3 ,1); y (1) = 10.0 / ( x (1) + x ( 2 ) ) − x ( 3 ) ; y (2) = 1.0 + s q r t (10.0 − x (1) − x ( 2 ) ) − x ( 3 ) ; y (3) = 10.0 / (5.0 + x (1) − x ( 2 ) ) − x ( 3 ) ; endfunction 7 8 9 10 11 12 13 14 15 16 17 18 19 function y = jacobimatrix (x) y = zeros (3 ,3) y ( 1 , 1 ) = −10.0 / ( ( x ( 1 ) + x ( 2 ) ) ** 2 ) ; y ( 1 , 2 ) = −10.0 / ( ( x ( 1 ) + x ( 2 ) ) ** 2 ) ; y ( 1 , 3 ) = −1. 0; y ( 2 , 1 ) = −1.0 / ( 2 . 0 * s q r t ( 1 0 . 0 − x ( 1 ) − x ( 2 ) ) ) ; y ( 2 , 2 ) = −1.0 / ( 2 . 0 * s q r t ( 1 0 . 0 − x ( 1 ) − x ( 2 ) ) ) ; y ( 2 , 3 ) = −1. 0; y ( 3 , 1 ) = −10.0 / ( ( 5 . 0 + x ( 1 ) − x ( 2 ) ) ** 2 ) ; y ( 3 , 2 ) = 1 0 . 0 / ( ( 5 . 0 + x ( 1 ) − x ( 2 ) ) ** 2 ) ; y ( 3 , 3 ) = −1. 0; endfunction 20 21 22 names = ’ f ’ , ’ j a c o b i m a t r i x ’ ; [ x , i n f o ] = f s o l v e ( names , [ 0 . 5 ; 2 . 5 ; 2 . 0 ] ) ; 23 24 25 26 27 28 29 i f ( i n f o == 1 ) p r i n t f ( ’ Gleichungssystem geloest . \ n ’ ) ; p r i n t f ( ’ x = %g \ ny = %g \ nz = %g \ n ’ , x ( 1 ) , x ( 2 ) , x ( 3 ) ) ; else perror (" fsolve " , 1); endif 110 3.6 Beispiele Listing 3.9: oe0009.sce 1 2 3 4 5 6 function [y] = f (x) y = zeros (3 ,1); y (1) = 10.0 / ( x (1) + x ( 2 ) ) − x ( 3 ) ; y (2) = 1.0 + s q r t (10.0 − x (1) − x ( 2 ) ) − x ( 3 ) ; y (3) = 10.0 / (5.0 + x (1) − x ( 2 ) ) − x ( 3 ) ; endfunction 7 8 9 10 11 12 13 14 15 16 17 18 19 function [y] = jacobimatrix (x) y = zeros (3 ,3) y ( 1 , 1 ) = −10.0 / ( ( x ( 1 ) + x ( 2 ) ) ** 2 ) ; y ( 1 , 2 ) = −10.0 / ( ( x ( 1 ) + x ( 2 ) ) ** 2 ) ; y ( 1 , 3 ) = −1. 0; y ( 2 , 1 ) = −1.0 / ( 2 . 0 * s q r t ( 1 0 . 0 − x ( 1 ) − x ( 2 ) ) ) ; y ( 2 , 2 ) = −1.0 / ( 2 . 0 * s q r t ( 1 0 . 0 − x ( 1 ) − x ( 2 ) ) ) ; y ( 2 , 3 ) = −1. 0; y ( 3 , 1 ) = −10.0 / ( ( 5 . 0 + x ( 1 ) − x ( 2 ) ) ** 2 ) ; y ( 3 , 2 ) = 1 0 . 0 / ( ( 5 . 0 + x ( 1 ) − x ( 2 ) ) ** 2 ) ; y ( 3 , 3 ) = −1. 0; endfunction 20 21 [x , v , info ] = fsolve ([0.5 ; 2.5; 2.0] , f , jacobimatrix ); 22 23 24 25 26 27 28 i f ( i n f o == 1 ) p r i n t f ( ’ Gleichungssystem geloest . \ n ’ ) ; p r i n t f ( ’ x = %g \ ny = %g \ nz = %g \ n ’ , x ( 1 ) , x ( 2 ) , x ( 3 ) ) ; else p r i n t f ( ’ Das G l e i c h u n g s s y s t e m k o n n t e n i c h t g e l o e s t werden ! \ n ’ ) ; end 111 3 Erste Schritte mit GNU Octave und Scilab Gewünscht wird eine Interpolation, um folgende Berechnungen durchführen zu können: • Welcher magnetische Fluss stellt sich bei einer Feldstärke H = 250 Acm−1 ein? • Welche Feldstärke ist erforderlich, um einen Fluss von B = 0,8 T hervorzurufen? • Bei welchem Paar (H,B) liegt der optimale Arbeitspunkt d.h. der Punkt der Kennlinie, für den |B · H| einen Maximalwert erreicht? Wenn eine Kurve durch n Messwerte gegeben ist, gibt es unterschiedliche Möglichkeiten, Funktionen so aufzustellen, dass alle Messpunkte erfasst werden, z.B.: • Ein Polynom vom Grad n − 1 • Natual Splines. Dabei werden n − 1 Polynomstücken zwischen den Messpunkten verwendet. In der Praxis werden häufig Natural Splines verwendet, da ein durchgängiges Polynom hohen Grades meist Oszillationen aufweist. 112 3.6 Beispiele Natural Splines Bei der Verwendung von Natural Splines wird die Gesamtfunktion stückweise aus Polynomen dritten Grades zusammengesetzt. Das Polynom pi (x) = ai (x − xi )3 + bi (x − xi )2 + ci (x − xi ) + di beschreibt dabei den Kurvenverlauf zwischen den Punkten i und i+1, d.h. für x-Werte mit xi ≤ x ≤ xi+1 . Zwischen n Punkten bestehen n−1 Zwischenräume, somit werden n−1 Polynome benötigt. Da jedes Polynom 4 Koeffizienten aufweist, müssen 4(n − 1) Koeffizienten bestimmt werden, hierzu werden 4(n − 1) Gleichungen benötigt. Die Gleichungen werden folgendermaßen gewonnen: (a) n − 1 Gleichungen (1 ≤ i ≤ n − 1) für den Messwert am linken Polynomrand di = yi (b) n − 1 Gleichungen (1 ≤ i ≤ n − 1) für den Messwert am rechten Polynomrand (xi+1 − xi )3 ai + (xi+1 − xi )2 bi + (xi+1 − xi )ci + di = yi+1 (c) n − 2 Gleichungen (2 ≤ i ≤ n − 1) aus der folgenden Stetigkeitsbedingung: An den inneren Punkten ist die erste Ableitung des jeweils linken und rechten Polynomes gleich. 3(xi − xi−1 )2 ai−1 + 2(xi − xi−1 )bi−1 + ci−1 = ci 3(xi − xi−1 )2 ai−1 + 2(xi − xi−1 )bi−1 + ci−1 − ci = 0 (d) n − 2 Gleichungen (2 ≤ i ≤ n − 1) aus der folgenden Stetigkeitsbedingung: An den inneren Punkten ist die zweite Ableitung des jeweils linken und rechten Polynomes gleich. 6(xi − xi−1 )ai−1 + 2bi−1 = 2bi 6(xi − xi−1 )ai−1 + 2bi−1 − 2bi = 0 113 3 Erste Schritte mit GNU Octave und Scilab (e) 2 Gleichungen aus der folgenden Stetigkeitsbedingung: An den äußeren Punkten ist die zweite Ableitung des jeweiligen Polynomes 0. 2b0 = 0 6an−1 (xn − xn+1 ) + 2bn−1 = 0 Natural Splines mit einfachen Polynomen Einige mathematische Probleme sind einfacher zu lösen, wenn ein Ansatz fi (x) = pi x3 + qi x2 + ri x + si anstelle von fi (x) = ai (x − xi )3 + bi (x − xi )2 + ci (x − xi ) + di verwendet wird. Durch Ausmultiplizieren und Koeffizientenvergleich erhält man: = ai x3 + (bi − 3ai xi )x2 + (ci − 2bi xi + 3ai xi2 )x + di − ci xi + bi xi2 − ai xi3 pi = ai qi = bi − 3ai xi ri = ci − 2bi xi + 3ai xi2 si = di − ci xi + bi xi2 − ai xi3 114 3.6 Beispiele Installation des nsplines-Paketes Quelltext-Archiv downloaden und entpacken Am Beispiel von nsplines wird gezeigt, wie zusätzliche Bibliotheken bzw. Pakete in GNU Octave und Scilab integriert werden können. Das nsplines-Paket wird von http://sourceforge.net/projects/nsplines bezogen. Aus dem Downloadbereich des Projektes wird die Datei „nsplines-*.tar.gz“ mit der höchsten Versionsnummer bezogen. Diese wird mit 1 g z i p −dc n s p l i n e s − * . t a r . gz | t a r x f − entpackt. Installationsmöglichkeiten Zusätzliche Funktionsbibliotheken – auch selbst erstellte – können auf zweierlei Weise installiert werden: • als Nutzer „root“ wird eine systemweite Installation vorgenommen, so dass das Paket allen Nutzern zur Verfügung steht oder • als normaler Nutzer wird eine Installation „für den Eigenbedarf“ vorgenommen. Eine systemweite Installation wird für „fertige“ Bibliotheken und Pakete empfohlen. Für Eigenentwicklungen – insbesondere wenn die Entwicklungsarbeit noch nicht abgeschlossen ist – sollte nur eine nutzerspezifische Installation vorgenommen werden. 115 3 Erste Schritte mit GNU Octave und Scilab Systemweite Installation für Octave Die systemweite Installation durch Nutzer „root“ geht in folgenden Schritten vor sich: • Das programm GNU Octave wird gestartet. • Am Eingabeprompt wird der Befehl 1 DEFAULT_LOADPATH eingeben. • Das Programm antwortet, indem es den Pfad ausgibt, der nach Funktionsdateien durchsucht wird. Wird in GNU Octave eine Funktion aufgerufen (d.h. verwendet), die noch nicht definiert ist, sucht das Programm nach einer Datei, deren Dateiname aus dem Funktionsnamen und der Endung „.m“ zusammengesetzt ist. Wird also eine Funktion testfct() aufgerufen, sucht GNU Octave nach einer Datei „testfct.m“, in der diese Funktion definiert ist. Der Standard-Suchpfad enthält eine Liste von Verzeichnissen, die nach der entsprechenden Datei durchsucht werden. Die einzelnen Verzeichnisse sind durch Doppelpunkte voneinander abgetrennt. Einige Verzeichnisnamen haben am Ende zwei angehängte Slashes, dies bedeutet, dass die Verzeichnisse rekursiv – d.h. mit allen Unterverzeichnissen – durchsucht werden. • Aus der Liste der Verzeichnisse wird ein Verzeichnis ausgewählt, das alle folgenden Merkmale erfüllt: – Das Verzeichnis wird rekursiv durchsucht (im Listing hat es zwei Slashes am Ende). – Es ist keine GNU Octave Versionsnummer im Namen enthalten. – Es ist keine API-Versionsnummer im Namen enthalten. – Es ist keine Komponente im Namen enthalten, die auf eine bestimmte Architektur hindeutet. Nach Möglichkeit sollte das Verzeichnis „/usr/local/share/octave/site/m“ bzw. „/usr/share/octave/site/m“ verwendet werden, wenn es in der Liste enthalten ist. • Im ausgewählten Verzeichnis wird ein Unterverzeichnis „nsplines“ angelegt. • Die Dateien m/*.m aus dem entpackten nsplines-Archiv werden in das neue Verzeichnis „nsplines“ kopiert. 116 3.6 Beispiele Nutzer-Installation für Octave Eine nutzerspezifische Installation geht wie folgt vonstatten: • Im Home-Verzeichnis wird ein Unterverzeichnis „octave“ für GNU Octave Funktionsdateien angelegt falls noch nicht vorhanden. Wir nehmen einmal an, dass der vollständige Pfadname dieses Verzeichnisses „/home/erwin/octave“ lautet. • Im Home-Verzeichnis wird die Datei „.octaverc“ bearbeitet (erstellen, falls noch nicht vorhanden). Es wird eine Zeile 1 LOADPATH= ’ / home / e r w i n / o c t a v e / / : : ’ ; eingetragen. Der Suchpfad wird jetzt so gesetzt, dass zunächst einmal in „/home/erwin/octave“ gesucht wird. Dieses Verzeichnis wird rekursiv – d.h. mit allen Unterverzeichnissen – durchsucht („//“). Ist die Suche in diesem Verzeichnis erfolglos, wird der Standardsuchpfad verwendet („::“). • Im „octave“-Verzeichnis wird wiederum ein Unterverzeichnis „nsplines“ angelegt. • Die Dateien m/*.m aus dem entpackten nsplines-Archiv werden in das neue Verzeichnis „nsplines“ kopiert. 117 3 Erste Schritte mit GNU Octave und Scilab Systemweite Installation für Scilab • Sie benötigen root- bzw. Administrator-Rechte. • Suchen Sie zunächst das Scilab-Installationsverzeichnis (z.B. C:\Programme\scilab-4.0). Hier finden Sie ein Unterverzeichnis „macros“. • In „macros“ legen Sie ein Unterverzeichnis „nsplines“ an. • Aus dem nsplines-Quellarchiv kopieren Sie die Dateien sci/*.sci in das soeben angelegte „nsplines“-Verzeichnis. • Starten Sie Scilab. • Geben Sie das Kommando 1 g e n l i b ( ’ n s p l i n e s ’ , ’ SCI / m a c r o s / n s p l i n e s ’ ) ; ein. Damit wird eine „lib“-Datei angelegt. • Um die Bibliothek zu nutzen, muss sie mit 1 l o a d ( ’ SCI / m a c r o s / n s p l i n e s / l i b ’ ) ; geladen werden. • Für das automatische Laden der Bibliothek beim Start von Scilab gibt es zwei Möglichkeiten: – Der load-Befehl wird in die Datei C:\Programme\scilab-4.0\scilab.star geschrieben (hinter den bisherigen Inhalt). Bei jedem Start von Scilab wird nsplines automatisch mit geladen. Dies ist sinnvoll, wenn der überwiegende Teil der Scilab-Benutzer mit nsplines arbeitet. – Falls nur einige Scilab-Nutzer mit nsplines arbeiten, können diese den load-Befehl in die Datei „.scilab“ in ihrem Homverzeichnis eintragen. Diese Datei enthält Kommandos, die bei jedem Start von Scilab ausgeführt werden. 118 3.6 Beispiele Nutzer-Installation für Scilab Bibliotheken, die sich noch in Entwicklung befinden, sollten nicht in das ScilabVerzeichnis installiert werden. Ein automatisches Laden für alle Nutzer verbietet sich hier von selbst, da Fehler in den Bibliotheken zu Abbrüchen der Startup-Abläufe führen können. • Legen Sie in Ihrem Homeverzeichnis ein Unterverzeichnis „scilab“ an (Sie können selbstverständlich auch einen anderen Namen wählen). • Legen Sie ein Unterverzeichnis für jede Bibliothek an. • Kopieren Sie die Funktionsdateien für die Bibliothek (die *.sci-Dateien, die die Funktionen der Bibliothek enthalten) in das neue Verzeichnis. Im Beispiel würden wir also die sci/*.sci-Dateien des nsplinesQuelltextarchives nach c:\erwin\scilab\nsplines4 bzw. /home/erwin/scilab/nsplines kopieren. • In Scilab muss dann die Kommandofolge 1 2 3 4 5 6 7 8 9 exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ exec ( ’ c : \ erwin \ erwin \ erwin \ erwin \ erwin \ erwin \ erwin \ erwin \ erwin \ scilab scilab scilab scilab scilab scilab scilab scilab scilab \ \ \ \ \ \ \ \ \ nsplines nsplines nsplines nsplines nsplines nsplines nsplines nsplines nsplines \ ns_create . sci ’ ) ; \ ns_polynom . s c i ’ ) ; \ ns_value . sci ’ ) ; \ ns_gpfile . sci ’ ) ; \ nssp_create . sci ’ ) ; \ nssp_polynom . s c i ’ ) ; \ nssp_value . sci ’ ) ; \ nssp_gpfile . sci ’ ) ; \ ns_nssp . sci ’ ) ; • Bei der Installation eigener Bibliotheken müssen Sie jeweils alle betreffenden *.sci-Dateien aufführen. • Die exec-Befehle können in der Datei „.scilab“ im Homeverzeichnis eingetragen werden. 4 Als Home-Verzeichnis wurde hier kurzerhand C:\erwin auserkoren, das Verzeichnis C:\Dokumente und Einstellungen\erwin könnte auch genutzt werden. Allerdings würde der lange Verzeichnisname natürlich zu entsprechend langen Dateinamen hier im Beispiel führen, so dass manche Befehle nicht mehr auf eine Zeile passen. 119 3 Erste Schritte mit GNU Octave und Scilab Verwendung des nspline-Paketes Das API des Paketes umfasst folgende Funktionen: • Eine Funktion ns_create(mw), die einen Satz Punkte in die Polynomsequenz für ein natural spline umwandelt. Die Punkte sind dabei als zweispaltige Matrix gegeben. Die Matrix enthält in jeder Zeile die Daten für einen Punkt der Kurve. Der x-Wert steht in Spalte 1, der y-Wert in Spalte 2. Optional können noch zwei weitere Spalten vorhanden sein, wenn der Anstieg in den Kurvenpunkten gegeben ist. Ist in Spalte 3 ein positiver Wert (> 0) eingetragen, bedeutet dies, dass Spalte 4 den Anstiegswert im Punkt angibt. Ist in Spalte 4 ein Wert ≤ 0 angegeben, wird Spalte 4 ignoriert. Die Funktion gibt eine Matrix mit 6 Spalten zurück, die die Beschreibung für die einzelnen Intervalle i enthält. Jede Zeile enthält die Daten für ein Intervall, die Spalten sind belegt mit xi,start , xi,end , ai , bi , ci und di . • Eine Funktion ns_value(M, x), die den Wert für ein bestimmtes x interpoliert. Das Argument M ist die mit ns_create() erzeugte Matrix. Die Funktion gibt den interpolierten Funktionswert zurück. • Eine Funktion ns_gpfile(mw, M, name), die die Messwerte und die Interpolationswerte in eine rudimentäre GnuPlot-Datei mit dem angegebenen Namen (Argument name) schreibt. • Funktionen nssp_create(), nssp_value() und nssp_gpfile() analog zu den ns_. . . ()-Funktionen. Der Unterschied liegt darin, dass hier die Matrix M die Polynomkoeffizienten für einfache Polynome enthält, die Spalten sind also belegt mit xi,start , xi,end , pi , qi , ri und si . Hinweis: Für Matrizen, die mit ns_create() erzeugt wurden, dürfen nur die ns_. . . ()-Funktionen verwendet werden. Für Matrizen, die mit nssp_create() erzeugt wurden, dürfen nur die nssp_. . . ()Funktionen verwendet werden. • Eine Funktion ns_nssp(M), die eine mit ns_create() erzeugte Matrix in eine solche umwandelt, die mit den nssp_. . . ()-Funktionen verwendet werden kann. 120 3.6 Beispiele Vorüberlegungen zum Beispiel Aus den Messwerten kann ein natural Spline B = f (H) gewonnen werden, die Teilaufgaben werden damit wie folgt gelöst: • der Wert B1 für H1 = 250 Acm−1 kann direkt mittels ns_value() bzw. nssp_value() gewonnen werden. • der Wert H2 für B2 = f (H2 ) = 0,8 T wird als Nullstelle der Funktion g(H) = f (H) − B2 gewonnen. • Der optimale Arbeitspunkt (der den Maximalwert für |B · H| aufweist), ist ein Extremwert, es gilt 0= d (BH) dH Haben wir den Spline in Form einfacher Polynome gegeben, gilt für jedes Intervall i BH = pi H 4 + qi H 3 + ri H 2 + si H und somit d (BH) = 4pi H 3 + 3qi H 2 + 2ri H + si dH 0 = 4pi H 3 + 3qi H 2 + 2ri H + si Es muss also die Nullstelle von h(H) = 4pi H 3 + 3qi H 2 + 2ri H + si Die letzte Funktion ist ebenfalls wieder eine Folge von Polynomen dritter Ordnung, wobei die Intervallgrenzen dieselben sind wie die von f (H). Es kann also zur Berechnung der nssp_. . . ()-Mechanismus genutzt werden. Um die Interpolationsmatrix für h(H) zu erstellen, wird zunächst eine Kopie der Interpolationsmatrix von f (H) erzeugt. In dieser Kopie werden dann alle Werte der dritten Spalte mit 4 multipliziert, alle Werte der vierten Spalte mit 3 und alle Werte der fünften Spalte mit 2. 121 3 Erste Schritte mit GNU Octave und Scilab Lösung für das Beispiel Zunächst wird eine Eingabedatei oe0008.m bzw. oe0008.sce erstellt, siehe Listings 3.10 auf der nächsten Seite und 3.11 auf Seite 124. Die Verarbeitung mit 1 o c t a v e −q oe0008 .m ergibt 1 2 3 P r o b l e m 1 i s t g a r zu e i n f a c h : H = 250.0 B = 1.45149 4 5 6 7 Problem 2 e r f o l g r e i c h g e l o e s t : H = −391.629 B = 0.8 8 9 10 11 12 Problem 3 e r f o l g r e i c h g e l o e s t : H = −368.153 B = 0.857926 | BH | = 3 1 5 . 8 4 8 122 3.6 Beispiele Listing 3.10: oe0008.m 1 2 3 4 5 6 7 mw = [ −525.0 −470.0 −420.0 −330.0 −220.0 −120.0 0.0 0.0 0.5 0.72 0.94 1.12 1.22 1.3 ] ; 8 9 10 g l o b a l M1; M1 = n s s p _ c r e a t e (mw) ; 11 12 13 14 15 16 17 18 19 g l o b a l M2; M2 = M1; [ r , c ] = s i z e (M2 ) ; f o r i =1: r M2( i , 3 ) = 4 . 0 * M2( i , 3 ) ; M2( i , 4 ) = 3 . 0 * M2( i , 4 ) ; M2( i , 5 ) = 2 . 0 * M2( i , 5 ) ; endfor 20 21 22 23 24 f u n c t i o n b a c k = g (H) g l o b a l M1; b a c k = n s s p _ v a l u e (M1, H) − 0 . 8 ; endfunction 25 26 27 28 29 f u n c t i o n b a c k = h (H) g l o b a l M2; b a c k = n s s p _ v a l u e (M2, H ) ; endfunction 30 31 32 33 p r i n t f ( ’ P r o b l e m 1 i s t g a r zu e i n f a c h : \ n ’ ) ; p r i n t f ( ’H = 250.0\n ’ ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, 2 5 0 . 0 ) ) ; 34 35 36 37 38 39 40 41 42 [H, i n f o ] = f s o l v e ( " g " , [ − 5 2 5 . 0 / 2 . 0 ] ) ; i f ( i n f o == 1 ) p r i n t f ( ’ \ nProblem 2 e r f o l g r e i c h g e l o e s t : \ n ’ ) ; p r i n t f ( ’H = %g \ n ’ , H ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, H ) ) ; else perror (" fsolve " , info ); endif 43 44 45 [H, i n f o ] = f s o l v e ( " h " , [ − 5 2 5 . 0 / 2 . 0 ] ) ; i f ( i n f o == 1 ) 123 3 Erste Schritte mit GNU Octave und Scilab 46 47 48 49 50 51 52 p r i n t f ( ’ \ nProblem 3 e r f o l g r e i c h g e l o e s t : \ n ’ ) ; p r i n t f ( ’H = %g \ n ’ , H ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, H ) ) ; p r i n t f ( ’ | BH | = %g \ n ’ , a b s (H* n s s p _ v a l u e (M1, H ) ) ) ; else perror (" fsolve " , info ); endif Listing 3.11: oe0008.sce 1 mw = [ 2 3 4 5 6 7 −525.0 −470.0 −420.0 −330.0 −220.0 −120.0 0.0 0.0 0.5 0.72 0.94 1.12 1.22 1.3 ] ; 8 9 10 g l o b a l M1; M1 = n s s p _ c r e a t e (mw) ; 11 12 13 14 15 16 17 18 19 g l o b a l M2; M2 = M1; [ r , c ] = s i z e (M2 ) ; f o r i =1: r M2( i , 3 ) = 4 . 0 * M2( i , 3 ) ; M2( i , 4 ) = 3 . 0 * M2( i , 4 ) ; M2( i , 5 ) = 2 . 0 * M2( i , 5 ) ; end 20 21 22 23 24 f u n c t i o n [ b a c k ] = g (H) g l o b a l M1; b a c k = n s s p _ v a l u e (M1, H) − 0 . 8 ; endfunction 25 26 27 28 29 f u n c t i o n [ b a c k ] = h (H) g l o b a l M2; b a c k = n s s p _ v a l u e (M2, H ) ; endfunction 30 31 32 33 p r i n t f ( ’ P r o b l e m 1 i s t g a r zu e i n f a c h : \ n ’ ) ; p r i n t f ( ’H = 250.0\n ’ ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, 2 5 0 . 0 ) ) ; 34 35 36 37 [H, v , i n f o ] = f s o l v e ( [ − 5 2 5 . 0 / 2 . 0 ] , g ) ; i f ( i n f o == 1 ) p r i n t f ( ’ \ nProblem 2 e r f o l g r e i c h g e l o e s t : \ n ’ ) ; 124 3.6 Beispiele 38 39 40 41 42 p r i n t f ( ’H = %g \ n ’ , H ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, H ) ) ; else p r i n t f ( ’ Das P r o b l e m 2 k o n n t e n i c h t g e l o e s t werden ! \ n ’ ) ; end 43 44 45 46 47 48 49 50 51 52 [H, v , i n f o ] = f s o l v e ( [ − 5 2 5 . 0 / 2 . 0 ] , h ) ; i f ( i n f o == 1 ) p r i n t f ( ’ \ nProblem 3 e r f o l g r e i c h g e l o e s t : \ n ’ ) ; p r i n t f ( ’H = %g \ n ’ , H ) ; p r i n t f ( ’B = %g \ n ’ , n s s p _ v a l u e (M1, H ) ) ; p r i n t f ( ’ | BH | = %g \ n ’ , a b s (H* n s s p _ v a l u e (M1, H ) ) ) ; else p r i n t f ( ’ Das P r o b l e m 3 k o n n t e n i c h t g e l o e s t werden ! \ n ’ ) ; end 125 3 Erste Schritte mit GNU Octave und Scilab 126 4 Maxima 4.1 Installation 4.1.1 Installation unter Windows Das Installationsprogramm kann von http://maxima.sourceforge.net bezogen werden. Das entsprechende Paket heißt WxMaxima. Das Maxima-System besteht aus mehreren Komponenten, u. a. ist eine Komponente für die algebraischen Arbeiten vorhanden und eine weitere für das GUI. Beide Komponenten kommunizieren über das Netzwerk bzw. das virtuelle Loopback-Netzwerk. Diese Kommunikation muss von der Firewall zugelassen werden. Nach der Installation bleiben Sie als Administrator angemeldet und starten Maxima einmal. Wenn Sie mit der Windows-eigenen Firewall arbeiten, werden Sie beim ersten Start von Maxima gefragt, ob Sie eine Firewall-Regel einrichten möchten, um Maxima die Kommunikation zu erlauben. Diese Frage sollten Sie mit „ja“ beantworten. In der Systemsteuerung finden Sie den Unterpunkt „Windows-Firewall“. Hier können Sie die Firewall-Regel ändern, z. B. in der Liste der Ausnahmen den Zugriff auf wxMaxima nicht allen Computern gestatten sondern nur für eine benutzerdefinierte Liste an Computern. Diese Liste sollte auf alle Fälle das LoopbackNetzwer (d. h. „127.0.0.0/255.255.255.0“) enthalten sowie die IP-Adresse des Computers (z. B. „192.168.1.33/255.255.255.255“) falls der Computer über eine statische IP-Adresse verfügt. Da Maxima für graphische Darstellungen das Programm GnuPlot verwendet, muss GnuPlot ebenfalls installiert werden. 4.1.2 Installation unter Linux Maxima kann über die Paketverwaltung installiert werden. Das Programm GnuPlot sollte ebenfalls installiert werden, da es von Maxima für graphische Darstellungen verwendet wird. 4.1.3 Dokumentation Weitere Dokumentation (z. B. ein Handbuch) sind unter http://maxima. sourceforge.net verfügbar. 127 4 Maxima Abbildung 4.1: Hauptfenster von wxMaxima 0.7.6 4.2 Programmstart 4.2.1 Programmstart unter Windows Zum Starten des Programmes kann entweder das „wxMaxima“ Desktop-Icon oder der Startmenü-Eintrag genutzt werden. Beim Programmstart erscheinen Tipps, nachdem diese geschlossen wurden, kann mit der Anwendung gearbeitet werden. wxMaxima 0.7.6 Neben dem üblichen Menü und der Buttonbar enthält das Anwendungsfenster einen Ausgabebereich, eine Eingabezeile und im unteren Bereich ein Feld mit Buttons für bestimmte Aufgaben (siehe Abb. 4.1). 128 4.2 Programmstart Abbildung 4.2: Befehl in der Eingabezeile In der Eingabezeile kann ein Befehl eingeben werden. Mit ENTER wird die Bearbeitung des Befehles veranlasst. Ein eventuell fehlendes Semikolon am Ende des Befehles wird vom GUI automatisch eingefügt. 129 4 Maxima Abbildung 4.3: Ergebnisanzeige Nach der Verarbeitung eines Befehles wird der Befehl mitsamt dem Ergebnis im Ausgabebereich angezeigt. 130 4.2 Programmstart Abbildung 4.4: Hauptfenster von wxMaxima 0.8.1 wxMaxima 0.8.1 Die Nutzeroberfläche von wxMaxima 0.8.1 verhält sich ein wenig anders als die von wxMaxima 0.7.6. Es wird ein Bereich kombiniert für Ein- und Ausgaben genutzt. Werden Tastatureingaben getätigt, startet wxMaxima einen Eingabeblock, der sich durchaus über mehrere Zeilen erstrecken kann. Mit den Cursortasten kann innerhalb des Blockes navigiert werden und es können Korrekturen vorgenommen werden (siehe Abb. 4.5 auf der nächsten Seite). Mit SHIFT-ENTER wird der gesamte Eingabeblock verarbeitet, anschließend werden die Ergebnisse der einzelnen Anweisungen nacheinander angezeigt (siehe Abb. 4.6 auf der nächsten Seite). 131 4 Maxima Abbildung 4.5: Eingabeblock Abbildung 4.6: Nach Verarbeitung des Eingabeblockes 132 4.2 Programmstart Abbildung 4.7: Maxima-Hauptfenster mit Dokumenten-Browser 4.2.2 Programmstart unter Linux In einem Terminalfenster wird 1 xmaxima & eingegeben. Im Terminal erscheinen einige informative Zeilen, anschließend öffnet sich die Anwendung (Abb. 4.7). Das Hauptfenster ist zweigeteilt: oben der Arbeitsbereich, unten der Dokumentenbrowser. 133 4 Maxima Abbildung 4.8: Maxima-Hauptfenster Mit dem Menüpunkt „Options → Toggle Browser Visibility“ kann der Dokumentenbrowser ausgeblendet werden, es steht dann das ganze Hauptfenster für den Arbeitsbereich zur Verfügung. 134 4.2 Programmstart Abbildung 4.9: Befehlseingabe Im Hauptfenster können Befehle eingegeben werden (im Beispiel „3+5;“). 135 4 Maxima Abbildung 4.10: Ergebnisanzeige Wird ein Befehl mit ENTER bestätigt, so wird er von Maxima verarbeitet. Nach der Verarbeitung wird das Ergebnis angezeigt. 136 4.3 Verarbeitung von Dateien Abbildung 4.11: Maxima-Neustart 4.3 Verarbeitung von Dateien Mit Maxima können Sie einerseits interaktiv arbeiten, andererseits aber auch Dateien verarbeiten. Das Arbeiten mit Dateien hat den Vorteil, dass auf bereits vorhandene Lösungen bzw. Lösungswege zurückgegriffen werden kann, wenn ein Problem auftaucht, das einem bereits gelösten ähnelt. Dateien müssen die Endung „.mac“ haben bzw. „.wmx“ für wxMaxima 0.7.6. Bevor eine Datei eingelesen wird, sollte ein Maxima-Neustart erfolgen, um bereits definierte Variablen und Objekte zu löschen. Andernfalls können beim Anlegen von Objekten Konflikte mit bereits vorhandenen Objekten auftreten. Zum Neustart kann der Menüpunkt „Maxima → Maxima neustarten“ verwendet werden (Abb. 4.11). Der Neustart muss in einer Dialogbox nochmals bestätigt werden. 137 4 Maxima Abbildung 4.12: Datei einlesen Anschließend kann mit dem Menüpunkt „Datei → Datei abarbeiten“ (0.7.6: „Datei → Read file“) eine Datei eingelesen werden. Im Beispiel wird eine Datei mit dem Inhalt Listing 4.1: Kleine Eingabedatei 1 (3*5)/(3+5); eingelesen. 138 4.3 Verarbeitung von Dateien Abbildung 4.13: Verarbeitung der Datei beendet Bei der Verarbeitung von Dateien wird jeder eingelesene Befehle im Ausgabebereich dargestellt, dabei werden Multiplikationspunkte weggelassen. Den gelesenen Eingaben wird dabei ein in Klammern stehendes Promptzeichen vorangestellt, das aus Prozentzeichen, „i“ (für Input) und einer laufenden Nummer besteht. Nach der Verarbeitung eines Befehles wird das Ergebnis dargestellt, hier besteht das vorangestellte Promptzeichen aus Prozentzeichen, „o“ (für Output) und einer laufenden Nummer. 139 4 Maxima Abbildung 4.14: Numerische Darstellung 4.4 Beispiele 4.4.1 Ergebnis numerisch, nicht als Bruch Wie gerade gesehen, stellt Maxima das Ergebnis als Bruch dar, wenn bei der Berechnung Divisionen auftraten. Soll die Bruchdarstellung unterdrückt werden und stattdessen eine numerische Darstellung erfolgen, muss der Zusatz „, numer“ angegeben werden, z. B. 1 ( 3 * 5 ) / ( 3 + 5 ) , numer 140 4.4 Beispiele Abbildung 4.15: Definition einer Funktion 4.4.2 Selbst definierte Funktionen Funktionen werden in der Form Funktionsname(Argumente):=Ausdruck; angegeben. Beispiel: 1 p a r a l l e l ( a , b ) : = ( a * b ) / ( a+b ) ; Diese Funktion kann zur Berechnung des Gesamtwiderstandes zweier parallel geschalteter Widerstände verwendet werden. Die Berechnung kann für 3 und 5 Ω mit 1 p a r a l l e l ( 3 , 5 ) , numer erfolgen. 141 4 Maxima Abbildung 4.16: Verwendung der Funktion 142 4.4 Beispiele Abbildung 4.17: Zuweisungsoperationen mit Ersetzungen 4.4.3 Zuweisungen mit Werten In Maxima können Variable nicht nur Zahlenwerte, Vektoren und Matrizen sondern auch mathematische Ausdrücke und Gleichungen enthalten. Um Zuweisungsoperationen von Gleichungen zu unterscheiden, wird für die Zuweisung der Doppelpunkt als Operator verwendet. Beispiel: 1 2 3 a : 2; b: 3 + a; c : b / 2; Werden in Berechnungen Variablen verwendet, denen bereits ein Inhalt zugewiesen wurde, wird in die Berechnung der Variableninhalt eingesetzt. 143 4 Maxima Iges I3,4,5 I2 R1 Uq I5 I4 R3 R2 R5 R4 Abbildung 4.18: Beispielschaltung 4.4.4 Zuweisungen mit Unbekannten Für die Beispielschaltung entsprechend Abb. 4.18 mit Uq = 10 V R1 = 11 Ω R2 = 12 Ω R3 = 13 Ω R4 = 14 Ω R5 = 15 Ω soll I4 sowohl analytisch als auch wertmäßig ermittelt werden. Für die manuelle Berechnung mit Ersatzschaltbildern würde man folgendermaßen vorgehen: • Zusammenfassung R4 und R5 R4,5 = R4 ||R5 R4 R5 = R4 + R5 • Zusammenfassung R3 und R4,5 R3,4,5 = R3 + R4,5 • Zusammenfassung R2 und R3,4,5 R2,3,4,5 = R2 ||R3,4,5 R2 R3,4,5 = R2 + R3,4,5 • Zusammenfassung Gesamtwiderstand Rges = R1 + R2,3,4,5 144 4.4 Beispiele • Berechnung des Gesamtstromes Iges = Uq Rges • Aufteilung des Gesamtstromes I3,4,5 = R2 · Iges R2 + R3,4,5 • Aufteilung von I3,4,5 I4 = R5 · I3,4,5 R4 + R5 Bei jedem Schritt müssten die Formeln für die bereits bekannten Größen eingesetzt werden, anschließend müsste gekürzt werden. All diese Schritte können Maxima überlassen werden: Listing 4.2: Einsetzen bekannter Formeln 1 2 3 4 5 6 7 8 p a r a l l e l ( a , b ) : = ( a * b ) / ( a+b ) ; R45 : p a r a l l e l ( R4 , R5 ) ; R345 : R3+R45 ; R2345 : p a r a l l e l ( R2 , R345 ) ; Rges : R1+R2345 ; Iges : Uq / Rges ; I345 : I g e s * R2 / ( R2+R345 ) ; I4 : I 3 4 5 * R5 / ( R4+R5 ) ; Ist einer Variablen als Inhalt eine Formel hinterlegt, wird diese Formel immer dann eingesetzt, wenn die Variable selbst wiederum in einer Formel zur Berechnung einer anderen Größe angegeben ist. Für I4 erhalten wir die noch nicht vereinfachte Formel I4 = Uq R2 R5 R5 (R5 + R4 ) RR44+R + R + R 3 2 5 ! R4 R5 R4 +R5 +R3 R4 R5 R4 +R5 +R3 +R2 R2 + R1 145 4 Maxima Abbildung 4.19: Ergebnis nach Einsetzen 146 4.4 Beispiele 4.4.5 Formeln Vereinfachen Mit ratsimp(Ausdruck); kann ein mathematischer Ausdruck vereinfacht werden. Dabei kann – wie auch in Formeln – mit „%oZahl“ Bezug auf die Ausgabe eines beliebigen vorherigen Schrittes bzw. mit „%“ Bezug auf das Ergebnis des vorangegangenen Schrittes genommen werden. Mit Listing 4.3: Vereinfachtes Ergebnis 1 2 3 4 5 6 7 8 9 p a r a l l e l ( a , b ) : = ( a * b ) / ( a+b ) ; R45 : p a r a l l e l ( R4 , R5 ) ; R345 : R3+R45 ; R2345 : p a r a l l e l ( R2 , R345 ) ; Rges : R1+R2345 ; Iges : Uq / Rges ; I345 : I g e s * R2 / ( R2+R345 ) ; I4 : I 3 4 5 * R5 / ( R4+R5 ) ; ratsimp (%); wird die gleiche Berechnung wie im vorangegangenen Abschnitt ausgeführt, im letzten Schritt wird eine Vereinfachung (Entfernung von Mehrfachbrüchen und Kürzen) vorgenommen. Wir erhalten das Ergebnis I4 = Uq R2 R5 ((R2 + R1 )R4 + (R2 + R1 )R3 + R1 R2 )R5 + ((R2 + R1 )R3 + R1 R2 )R4 147 4 Maxima Abbildung 4.20: Vereinfachte Formel 148 4.4 Beispiele Abbildung 4.21: Einsetzen von Werten in Formeln 4.4.6 Werte in Formel einsetzen Soll der Wert einer Formel bzw. einer Funktion an einer bestimmten Stelle berechnet werden, wird der Befehl at(Ausdruck,Parameterliste); verwendet. Dabei erfolgt die Ausgabe als Bruch, wenn nicht explizit eine numerische Ausgabe gefordert wird. Listing 4.4: Einsetzen von Werten in Formeln 1 2 3 4 5 6 7 8 9 10 11 p a r a l l e l ( a , b ) : = ( a * b ) / ( a+b ) ; R45 : p a r a l l e l ( R4 , R5 ) ; R345 : R3+R45 ; R2345 : p a r a l l e l ( R2 , R345 ) ; Rges : R1+R2345 ; Iges : Uq / Rges ; I345 : I g e s * R2 / ( R2+R345 ) ; I4 : I 3 4 5 * R5 / ( R4+R5 ) ; ratsimp (%); a t ( I4 , [ Uq=10 , R1 =11 , R2 =12 , R3 =13 , R4 =14 , R5 = 1 5 ] ) ; a t ( I4 , [ Uq=10 , R1 =11 , R2 =12 , R3 =13 , R4 =14 , R5 = 1 5 ] ) , numer ; 149 4 Maxima Wir erhalten I4 = 0,1039 A 150 4.4 Beispiele R1 Uq R3 R2 IA R4 IB R5 IC Abbildung 4.22: Maschenströme 4.4.7 Lineare Gleichungssysteme Die Aufgabenstellung aus Abschnitt 4.4.4 auf Seite 144 kann auch einfacher gelöst werden, z. B. mit dem Maschenstromverfahren. Hierbei wird ein lineares Gleichungssystem aus 3 Gleichungen mit 3 Unbekannten (den Maschenströmen IA , IB und IC ) aufgestellt und gelöst, der Strom I4 ergibt sich dann als I4 = IB − IC Listing 4.5: Lineares Gleichungssystem 1 2 3 4 gl1 : 0 = gl2 : 0 = gl3 : 0 = s o l v e ( [ gl1 , IA * ( R1+R2 ) − IB * R2 −Uq ; IB * ( R2+R3+R4 ) − IA * R2 −IC * R4 ; IC * ( R4+R5 ) − IB * R4 ; g l 2 , g l 3 ] , [ IA , IB , IC ] ) ; Mit dem solve()-Befehl werden die Lösungen des Gleichungssystemes nur angezeigt, die Lösungsformeln werden aber nicht in globale Variablen übernommen. Mit 1 globalsolve : true wird ein Flag „globalsolve“ gesetzt, das veranlasst, dass für die Lösungen von solve() entsprechende globale Variablen erzeugt werden, deren Inhalt das Gleichungssystem löst. Listing 4.6: Lineares Gleichungssystem 1 2 3 4 5 6 7 gl1 : 0 = IA * ( R1+R2 ) − IB * R2 −Uq ; gl2 : 0 = IB * ( R2+R3+R4 ) − IA * R2 −IC * R4 ; gl3 : 0 = IC * ( R4+R5 ) − IB * R4 ; globalsolve : true ; s o l v e ( [ g l 1 , g l 2 , g l 3 ] , [ IA , IB , IC ] ) ; I4 : r a t s i m p ( IB−IC ) ; a t ( I4 , [ Uq=10 , R1 =11 , R2 =12 , R3 =13 , R4 =14 , R5 = 1 5 ] ) , numer ; 151 4 Maxima Abbildung 4.23: Lineares Gleichungssystem gelöst 152 4.4 Beispiele Abbildung 4.24: Differenzieren 4.4.8 Differenzieren Zum Differenzieren einer Funktion kann diff(Ausdruck,Variable); verwendet werden. Der Ausdruck wird nach der angegebenen Variablen differenziert. Im Beispiel fließt ein sinusförmiger Wechselstrom durch eine Spule. Gesucht ist die über der Spule abfallende Spannung. i(t) = Imax · sin ωt di dt = LωImax cos ωt uL = L Listing 4.7: Spannungsabfall über einer Spule 1 2 i: u: Imax * s i n ( omega * t ) ; L* d i f f ( i , t ) ; 153 4 Maxima Abbildung 4.25: Spannung über einem Kondensator 4.4.9 Integrieren Zum Integrieren dient integrate(Ausdruck,Variable); Damit wird versucht, den Ausdruck nach der angegebenen Variable zu integrieren. Falls Maxima das Integral nicht lösen kann, wird die noun-Form ’integrate(Ausdruck,Variable) als Ergebnis zurückgegeben. Im Beispiel fließt ein sinusförmiger Wechselstrom durch einen Kondensator. Die Kondensatorspannung kan mit i(t) = Imax sin ωt 1 uC (t) = C Z i(t) dt =− Imax cos ωt ωC errechnet werden. Listing 4.8: Spannung über Kondensator 1 2 i: u: 154 Imax * s i n ( omega * t ) ; 1/C * i n t e g r a t e ( i , t ) ; 4.4 Beispiele R1 i i2 iC Uq C R2 Abbildung 4.26: Umladevorgang 4.4.10 Differentialgleichungen Für eine Schaltung entsprechend Abb. 4.26 sei der Schalter lange genug geöffnet, so dass der Kondensator auf uC = Uq aufgeladen ist. Zum Zeitpunkt t0 = 0 wird der Schalter geschlossen. Gesucht ist der zeitliche Verlauf uC (t). Aus den Grundlagen der Elektrotechnik ist bekannt, dass für diese Umladung gilt: UEnd = R2 Uq R1 + R2 Endwert der Kondensatorspannung uC (t) = UEnd − UEnd −Uq e−t/τ τ= R1 R2C R1 + R2 Ist diese Lösung nicht bereits bekannt, kann man Gleichungen aufstellen: i(t) = i2 (t) + iC (t) Uq − uC (t) R1 uC (t) i2 (t) = R2 duC iC (t) = C dt i(t) = 155 4 Maxima Werden alle diese Gleichungen ineinander eingesetzt, ergibt sich: Uq − uC (t) uC (t) duC = +C R1 R2 dt Dies kann umgeformt werden zu 0 = R1 R2C duC + (R1 + R2 )uC (t) −Uq R2 dt Der Ansatz uC (t) = UA e−t/τ +UB duC UA = − e−t/τ dt τ ergibt beim Einsetzen 0=− UA R1 R2Ce−t/τ + (R1 + R2 )UA e−t/τ + (R1 + R2 )UB − R2Uq τ Durch Koeffizientenvergleich erhalten wir R1 R2C + R1 + R2 τ 0 = (R1 + R2 )UB − R2Uq 0=− Daraus ergibt sich R1 R2C R1 + R2 R2 UB = Uq R1 + R2 τ= UA muss aus den Randwerten bestimmt werden: uC (t0 ) = Uq R2 Uq R1 + R2 R2 UA = Uq − Uq R1 + R2 R1 = Uq R1 + R2 Uq = UA + Somit ergibt sich als Gesamtlösung uC (t) = 156 t(R +R ) R1 R2 − 1 2 Uq e R1 R2C + Uq R1 + R2 R1 + R2 4.4 Beispiele Wird Maxima verwendet, kann die Gleichung Uq − uC (t) uC (t) duC = +C R1 R2 dt mit dem Befehl ode2(Differentialgleichung, y-Variable, x-Variable); gelöst werden. Dabei ist Differentialgleichung die zu lösende Gleichung, y-Variable gibt an, welche Variable abgeleitet wurde und x-Variable gibt an, nach welcher Variable die Ableitung erfolgte. Für dudtC ist die y-Variable uC (t) und die x-Variable t. Nach dem Finden der allgemeinen Lösung können mit ic1(Lösungsgleichung, x-Position, y-Wert); bekannte Randwerte eingesetzt werden, um ggf. weitere Konstanten zu bestimmen. Im Beispiel wird angegeben, dass zum Zeitpunkt t = 0 gilt uC = Uq . Listing 4.9: Lösung einer Differentialgleichung 1 2 3 gl : lsg : rwp : ( Uq−uc ) / R1= uc / R2+C * ’ d i f f ( uc , t ) ; ode2 ( g l , uc , t ) ; i c 1 ( l s g , t =0 , uc =Uq ) ; Maxima findet hier die Lösung: − RtC e uC (t) = 2 t + t R2Uq e R2C R1C + R1Uq t (R1 + R2 )e R1C Einige einfache Umformungen zeigen, dass diese Lösung identisch zu der manuell gefundenen Lösung ist. 157 4 Maxima Abbildung 4.27: Lösung einer Differentialgleichung 158 4.4 Beispiele 4.4.11 Analyse eines Bandpasses R1 U1 C2 C1 R2 U2 Abbildung 4.28: Bandpass Aufgabenstellung Für den Bandpass entsprechend Abb. 4.28 mit R1 = R2 = 1 kΩ und C1 = C2 = 10 nF sind folgende Größen gesucht: • Gm Maximalwert (betragsmäßig) des Amplitudenganges. • ωm Kreisfrequenz, bei der der Maximalwert auftritt. • ωg,u ωg,o untere und obere Grenzfrequenz. Allgemeines Vorgehen Bei den Berechnungen am Bandpass wird folgendermaßen vorgegangen: • Aus der Übertragungsfunktion G(j ω) wird der Amplitudengang G(ω) = |G(j ω)| bestimmt. • Es wird das Maximum des Amplitudenganges Gm gesucht und die Kreisfrequenz ωm , bei der das Maximum auftritt. An der Extremwertstelle muss gelten: d G =0 d ω ω=ωm 159 4 Maxima • Wenn das Maximum des Amplitundenganges ermittelt ist, gilt für den Amplitudengang bei der Grenzfrequenz 1 Gg = G(ω)|ω=ωg = √ · Gm 2 • Zur Vereinfachung der weiteren Berechnungen wird eine Normierung der Frequenz ω auf die Maximums-Kreisfrequenz ωm vorgenommen. ω = x · ωm g(x) = G(xωm ) = |G(j xωm )| Um die Grenz-Kreisfrequenz ωg zu finden, muss die Nullstelle der Funktion f (x) = g(x) − Gg gefunden werden. Berechnung Da für das Netzwerk R1 = R2 und C1 = C2 vorgegeben ist, wird gleich R1 = R2 = R und C1 = C2 = C eingesetzt, um die Berechnungen zu vereinfachen. Die Eingabesprache von Maxima erfordert die Angabe von Bezeichnern (Namen) für Objekte, für diese Variablennamen gelten die in Programmiersprachen üblichen Regeln. Folgende Namen werden verwendet: ω ↔w G↔G R↔R G = |G| ↔ aG Gm ↔ Gm ZC ↔ ZC dG ↔ daG dω ωm ↔ wm Die Eingabedatei setzt sich folgendermaßen zusammen: • Zunächst wird eine Funktion zur Berechnung des Gesamtwiderstandes einer Parallelschaltung zweier Widerstände definiert. akb= 1 160 p a r a ( a , b ) : = ( a * b ) / ( a+b ) ; a·b a+b 4.4 Beispiele Abbildung 4.29: Screenshot 1 • Anschließend wird ein Berechnungsterm für ZC angegeben und als Variable ZC gespeichert. ZC = 2 ZC : 1 j ωC 1 . 0 / ( % i *w*C ) ; Wird das Symbol ZC in nachfolgenden Formeln verwendet, wird automatisch der Berechnungsterm anstelle des ZC eingesetzt. • In der Variablen G wird der Berechnungsterm für die Spannungsübertragungsfunction G(j ω) gespeichert. G(j ω) = 3 ZC ||(R + ZC ) R · R + ZC k (R + ZC ) R + ZC G : ( p a r a ( ZC , ZC+R ) ) * ( R ) / ( ( R+ p a r a ( ZC , ZC+R ) ) * ( R+ZC ) ) ; Die Formel nach Einsetzung der Berechnungsterme für ZC und die Parallelschaltung wird als Ausgabe %o4 angezeigt, siehe Abb. 4.29. 161 4 Maxima Abbildung 4.30: Screenshot 2 • In der Variablen aG wird ein Berechnungsterm für |G| hinterlegt. Es wird angefordert, dass vor der Betragsbildung noch eine Vereinfachung erfolgen soll. G(ω) = |G(j ω)| 4 aG : a b s ( r a t s i m p (G ) ) ; Die Formel für die Berechnung des Betrages wird als Ausgabe %o5 angezeigt, siehe Abb. 4.30. v 2 u ω 5 C 5 R5 u u − (ω 3C3 R3 −7ωCR)2 +(2−5ω 2C2 R2 )2 u u 3ω 3C3 R3 u − u (ω 3C3 R3 −7ωCR)2 +(2−5ω 2C2 R2 )2 u u 4ωCR + 3 3 3 2 2 G(ω) = u 2 2 2 u u (ω C R −7ωCR) +(2−5ω C R ) u 2 3ω 4C4 R4 u 2 2 u (ω 3C3 R3 −7ωCR) +(2−5ω 2C2 R2 ) u + t 2 2 2 + 3 3 3 12ω 2C R 2 (ω C R −7ωCR) +(2−5ω 2C2 R2 ) q 2 2 (−ω 5C5 R5 − 3ω 3C3 R3 + 4ωCR) + (3ω 4C4 R4 + 12ω 2C2 R2 ) = 2 2 (ω 3C3 R3 − 7ωCR) + (2 − 5ω 2C2 R2 ) 162 4.4 Beispiele Abbildung 4.31: Screenshot 3 • In daG wird die Ableitung des Betrages nach der Kreisfrequenz hinterlegt. 5 daG : r a t s i m p ( d i f f ( aG , w ) ) ; Die Formel wird als Ausgabe %o6 angezeigt. • In gl01 wird eine Gleichung hinterlegt, die die Ableitung auf 0 setzt. 6 gl01 : daG = 0 ; Die Ausgabe %o7 zeigt die Gleichung an. • Es wird nach einem ω gesucht, das diese Gleichung löst. 7 s o l v e ( gl01 , w ) ; • Da die zu lösende Gleichung Polynome höherer Ordnung enthält, existieren aus mathematischer Sicht mehrere Lösungen, siehe Ausgabe %o8 in Abb. 4.31. Davon ist technisch nur eine Lösung ωm = 1 RC sinnvoll, da ωm einen positiven reellen Wert haben muss. 8 wm: 1 / ( R*C ) ; 163 4 Maxima Abbildung 4.32: Screenshot 4 • Die gefundene Lösung wird nun verwendet, um den Wert von G an der Stelle ωm zu berechnen. Gm = |G(j ω)|ω=ωm 9 Gm: a t ( aG , w=wm) ; Es ergibt sich (Ausgabe %o10): Gm = 1 3 √ • Bei der Grenzfrequenz muss die Amplitude auf den 1/ 2-fachen Wert des Maximalwertes abfallen. 1 1 Gg = √ Gm = √ 2 3 2 10 Gg : Gm/ s q r t ( 2 ) ; • Die in %o5 erhaltene Formel q 2 2 (−ω 5C5 R5 − 3ω 3C3 R3 + 4ωCR) + (3ω 4C4 R4 + 12ω 2C2 R2 ) G(ω) = 2 2 (ω 3C3 R3 − 7ωCR) + (2 − 5ω 2C2 R2 ) 164 4.4 Beispiele wird mit ω = x · ωm bzw. x = ω ωm normiert zu g(x) = G(x · ωm ) q 2 2 (−x5 − 3x3 + 4x) + (3x4 + 12x2 ) = 2 2 (x3 − 7x) + (2 − 5x2 ) 11 12 g ( x ) : = s q r t (( − x ** 5−3 * x ** 3+4 * x ) * * 2 + ( 3 * x ** 4+12 * x * * 2 ) * * 2 ) / ( ( x ** 3−7 * x ) ** 2+(2 −5 * x * * 2 ) * * 2 ) ; • Die Funktion f (x) = g(x) − Gg wird eingegeben. 13 f ( x ) : = g ( x)−Gg ; 165 4 Maxima Abbildung 4.33: Screenshot 5 • Die Grenz-Kreisfrequenzen können aus den Nullstellen xg,u und xg,o mit den Formeln ωg,u = xg,u · ωm und ωg,o = xg,o · ωm berechnet werden. Für die der unteren bzw. oberen Grenzfrequenz entsprechenden Nullstellen muss gelten: 0 < xg,u < 1 1 < xg,o Diese beiden Nullstellen werden numerisch gesucht, dabei wird jeweils eine linke und eine rechte Grenze für den Suchbereich vorgegeben. 14 15 find_root ( f (x) , x , 0 , 1); find_root ( f (x ) , x , 1 , 1000); Die Ausgaben %o14 und %o15 zeigen die gefundenen Nullstellen. √ • Zur Probe wird nochmals 1/3 2 berechnet und mit den Werten g(xg,u ) und g(xg,o ) verglichen. 16 17 18 166 1 / ( 3 * s q r t ( 2 ) ) , numer ; a t ( aG , w= 0 . 3 0 2 7 7 5 6 3 7 7 3 1 9 9 *wm) , numer ; a t ( aG , w= 3 . 3 0 2 7 7 5 6 3 7 7 3 1 9 9 6 *wm) , numer ; 4.4 Beispiele Somit gilt für diesen Bandpass: ωm = fm = 1 RC 1 2πRC ωg,u = 0,303 RC ωg,o = 3,303 RC fg,u = 0,303 2πRC fg,o = 3,303 2πRC Mit der Datei bp.wxm können die Berechnungen nachvollzogen werden: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 p a r a ( a , b ) : = ( a * b ) / ( a+b ) ; ZC : 1 . 0 / ( % i *w*C ) ; G: ( p a r a ( ZC , ZC+R ) ) * ( R ) / ( ( R+ p a r a ( ZC , ZC+R ) ) * ( R+ZC ) ) ; aG : a b s ( r a t s i m p (G ) ) ; daG : r a t s i m p ( d i f f ( aG , w ) ) ; gl01 : daG = 0 ; s o l v e ( gl01 , w ) ; wm: 1 / ( R*C ) ; Gm: a t ( aG , w=wm) ; Gg : Gm/ s q r t ( 2 ) ; g ( x ) : = s q r t (( − x ** 5−3 * x ** 3+4 * x ) * * 2 + ( 3 * x ** 4+12 * x * * 2 ) * * 2 ) / ( ( x ** 3−7 * x ) ** 2+(2 −5 * x * * 2 ) * * 2 ) ; f ( x ) : = g ( x)−Gg ; find_root ( f (x) , x , 0 , 1); find_root ( f (x ) , x , 1 , 1000); 1 / ( 3 * s q r t ( 2 ) ) , numer ; a t ( aG , w= 0 . 3 0 2 7 7 5 6 3 7 7 3 1 9 9 *wm) , numer ; a t ( aG , w= 3 . 3 0 2 7 7 5 6 3 7 7 3 1 9 9 6 *wm) , numer ; log10 ( x ):= log ( x ) / log ( 1 0 . 0 ) ; p l o t 2 d (20* log10 ( g ( x ) ) , [ x , 0.001 , 1000] , [ gnuplot_preamble , " s e t l o g s c a l e x ; " ] , [ xlabel , " f / f_g " ] , [ y l a b e l , " | G( f ) | / dB " ] ); Die plot2d-Anweisung erfordert, dass GnuPlot installiert und die Umgebungsvariable PATH entsprechend gesetzt ist. Ist GnuPlot nicht vorhanden, muss die plot2dAnweisung (die letzten 5 Zeilen) entfernt werden. 167 4 Maxima Abbildung 4.34: Bodediagramm 168 A Anhang A.1 PDF-Attachments abspeichern Um Dateianlagen aus PDF-Dateien abzuspeichern, gehen Sie folgendermaßen vor: • Klicken Sie am linken Rand des Adobe-Reader-Fensters auf den Reiter „Anlagen“ • Markieren Sie die gewünschte Datei. Mit einem Klick auf die rechte Maustaste gelangen Sie in das Kontextmenü, hier wählen Sie „Anlage speichern. . . “. 169 A Anhang 170 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.1: Kontextmenü Eigenschaften A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Markieren Sie das Verzeichnis C:\Cygwin (auf meinem PC habe ich die Installation nach C:\P\Cygwin vorgenommen), klicken Sie mit der rechten Maustaste und wählen Sie im Kontextmenü „Eigenschaften“, siehe Abb. A.1. 171 A Anhang Abbildung A.2: Spezielle Berechtigungen bearbeiten In der Liste „Gruppen oder Benutzernamen“ markieren Sie „Benutzer“, um die Berechtigungen anzuzeigen, die jeder beliebige Nutzer hat, der auf Ihrem PC eingerichtet ist. Zusätzlich zu den akzeptablen Lese- und Ausführungsrechten sind für diesen Nutzerkreis „spezielle Berechtigungen“ vorgesehen (Abb. A.2). Diese können mit dem Button „Erweitert“ bearbeitet werden. 172 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.3: Erben deaktivieren Um die geerbten Berechtigungen ändern zu können, muss zunächst einmal das Erben deaktiviert werden, siehe Abb. A.3. 173 A Anhang Abbildung A.4: Kopie der bisher geerbten Berechtigungen verwenden Als Basis für neue Berechtigungen werden zunächst einmal die bisher ererbten Berechtigungen verwendet, siehe Abb. A.4. Die bisher geerbten Berechtigungen werden zum aktuellen Verzeichnis kopiert. 174 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.5: Berechtigungen löschen Die speziellen Berechtigungen der Gruppe „Benutzer“ können angezeigt werden, indem ein Doppelklick auf den Listeneintrag ausgeführt wird. Dies ist hier nicht dargestellt. Zum Löschen wird der Listeneintrag markiert und der Button „Entfernen“ verwendet, siehe Abb. A.5. 175 A Anhang Abbildung A.6: Bearbeitete Berechtigungen bestätigen Die geänderten Berechtigungen werden mit „OK“ bestätigt, siehe Abb. A.6. 176 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.7: Vollzugriff für Administratoren und System Für „Administrator“, „Administratoren“ und „SYSTEM“ wird überprüft, dass Vollzugriff möglich ist. Falls noch nicht vorhanden, wird Vollzugriff eingestellt, siehe Abb. A.7. Die Berechtigungen werden mit „OK“ bestätigt. 177 A Anhang Abbildung A.8: Berechtigungen auf tmp bearbeiten Nun müssen noch die Berechtigungen auf C:\Cygwin\tmp gesetzt werden, siehe Abb. A.8. Hinweis: Falls Sie alleiniger Nutzer Ihres PC sind, setzen Sie hier die Berechtigung für Nutzer „INTERAKTIV“ auf Vollzugriff um das Verfahren abzukürzen. Andernfalls sind die nachfolgenden Schritte erforderlich. Markieren Sie das Verzeichnis C:\Cygwin\tmp, aus dem Kontextmenü (rechte Maustaste) wählen Sie „Eigenschaften“, siehe Abb. A.8. 178 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.9: Weitere Berechtigungen hinzufügen Mit dem Button „Hinzufügen“ können Sie weitere Berechtigungen erstellen, siehe Abb. A.9. 179 A Anhang Abbildung A.10: Namen „INTERAKTIV“ eingeben Abbildung A.11: NT-Rolle „INTERAKTIV“ auswählen Geben Sie den Namen ein, für den neue Berechtigungen hinzugefügt werden sollen („INTERAKTIV“), siehe Abb. A.10. Möglicherweise sind mehrere Benutzer, Gruppen oder Rollen auf dem PC vorhanden, die „INTERAKTIV“ im Namen haben. In diesem Fall erscheint ein Auswahlfenster, siehe Abb. A.11. Hier doppelklicken Sie „INTERAKTIV“. 180 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.12: Berechtigungen zum Lesen und Ausführen erteilen Für den Benutzer „INTERAKTIV“ werden zunächst Berechtigungen zum Lesen und Ausführen eingerichtet, diese werden mit dem Button „Übernehmen“ aktiviert, siehe Abb. A.12. 181 A Anhang Abbildung A.13: Zusätzliche spezielle Berechtigungen einrichten Mit dem Button „Erweitert“ werden spezielle Berechtigungen eingerichtet, siehe Abb. A.13. 182 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.14: Weitere Berechtigungen erteilen Mit dem Button „Hinzufügen“ können weitere Berechtigungen erteilt werden, siehe Abb. A.14. Zunächst wird wieder gefragt, für welchen Nutzer Zugriffsrechte festgelegt werden sollen, hier wird „INTERAKTIV“ eingegeben. In der Auswahlliste wird „INTERAKTIV“ mit Doppelklick ausgewählt, siehe Abb. A.10 auf Seite 180 und A.11 auf Seite 180. 183 A Anhang Abbildung A.15: Berechtigungen auswählen In der Auswahlliste der Berechtigungen werden „Dateien erstellen / Daten schreiben“ und „Ordner erstellen / Daten anhängen“ markiert und mit „OK“ übernommen, siehe Abb. A.15. 184 A.2 Zugriffsrechte auf C:\Cygwin unter Windows setzen Abbildung A.16: Berechtigungen einmal bestätigen. . . Zurück in der Auflistung aller Berechtigungen bestätigen Sie die Änderungen nochmals mit „OK“, siehe Abb. A.16. 185 A Anhang Abbildung A.17: . . . und noch einmal bestätigen In den Eigenschaften des tmp-Verzeichnisses ist nochmals eine Bestätigung mit „OK“ erforderlich, siehe Abb. A.17. 186