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

Documentos relacionados