Schmalkalden Elektrotechnik. Einführung in GnuPlot, Scilab und Maxima

Größe: px
Ab Seite anzeigen:

Download "Schmalkalden Elektrotechnik. Einführung in GnuPlot, Scilab und Maxima"

Transkript

1 FH Fak. Schmalkalden Elektrotechnik Einführung in GnuPlot, Scilab und Maxima

2

3 Inhaltsverzeichnis 1 Übersicht 11 2 GnuPlot Installation Installation unter Windows Installation unter Linux Installation unter Unix/Linux aus den Quellen Voraussetzungen Quellen downloaden Software erstellen und installieren Pfade setzen GnuPlot starten GnuPlot interaktiv benutzen GnuPlot interaktiv unter Windows nutzen GnuPlot interaktiv unter Unix/Linux nutzen Eine Datei verarbeiten Eine Datei unter Windows verarbeiten Eine Datei unter Unix/Linux verarbeiten Zahlen und Winkel Zahlendarstellung Winkeldarstellung Mathematische Ausdrücke Selbstdefinierte Funktionen in GnuPlot D-Plots xy-plots Einstellungen für 2D-Plots Druckbereich eingrenzen Achsen beschriften Kurvenbeschriftung deaktivieren Kurvenbeschriftung festlegen Kurvenbeschriftung platzieren Gitter hinterlegen Gitterabstände manuell festlegen Zusätzliche Text-Labels einfügen Verfügbare Linien- und Füllarten anzeigen Mehrere Kurven in einem Diagramm

4 Inhaltsverzeichnis Verwendung mehrerer Koordinatensysteme Logarithmische Skalenteilung Daten plotten Messpunkte Plot als Kurve Geglättete Kurven Berechnung aus den Messwerten Messwerte in GnuPlot-Datei Zusammengesetzte Kurven Parametrische Plots Plots in Polarkoordinaten D-Plots xyz-plots Einstellungen für 3D-Plots Versteckte Darstellung Anzahl der Stützstellen Niveaulinien Blickrichtung Eingefärbte Oberfläche Parametrische Plots Terminals Übersicht über Terminals Ausgabedatei erzeugen GnuPlot und LATEX cairolatex DIN cm-raster SciLab Installation Programmstart Scilab-Eingabedaten Anweisungen Echo ein/aus Lange Anweisungen Berechnungen Variablen Skalare Konstanten Winkel Vektoren und Matrizen Einfache Listen Typisierte Listen Datenstruktur struct

5 Inhaltsverzeichnis Operatoren Mathematische Operatoren Elementweise Operatoren für Vektoren und Matrizen Logische Operatoren Funktionen Grundlegendes zu Funktionen Variable Anzahl an Rückgabewerten oder Argumenten Formale und effektive Parameter Werte anzeigen Nullstellensuche Lin. GLS Nichtlin. GLS Numerische Integration Statistik Zusätzliche Pakete Installation über Modul-Manager Manuelle Installation Verzeichnis erstellen, Dateien kopieren lib-datei erstellen Automatisches Laden beim Programmstart für alle Nutzer. 106 Automatisches Laden beim Programmstart für einen Nutzer Plotten D-Plots D-Plots Datei-E/A Dateien öffnen und schließen Text schreiben Text lesen Beispiel Text-E/A Vektoren binär Matrizen binär Beispiel Vektoren und Matrizen Weitere Funktionen Programmierung if select while for break try Beispiele Einfache Berechnung Selbstdefinierte Funktion Maschenstromanalyse

6 Inhaltsverzeichnis Knotenspannungsanalyse Trigger Natural Splines Xcos Start Grundprinzipien Block-Symbole platzieren Verbindungen herstellen Daten- und Aktivierungsleitungen Einstellungen Simulationseinstellungen Simulation starten Kontext Hierarchie Vektoren Implizite Signale Ausgewählte Blöcke aus den Paletten Signal-Quellen Quellen für Aktivierungs-Signale Einstellungen Hierarchie Mathematische Operationen Systeme Diskontinuitäten Signal-Fluss Anzeige Elektrisch Benutzerdefiniert DGL Beispiele Differentialgleichung DGL-System Ausgangssignal eines durch Zustandsraummodell gegebenen Systems wxmaxima Einleitung Installation Installation unter Windows Software-Installation Firewall DEP GnuPlot Installation unter Linux

7 Inhaltsverzeichnis 4.3 Programmstart Sitzung, Zellen, Dateien Eingabezellen Struktur der Eingabezelle Zahlen Operatoren Ausdrücke, Variable und Zuweisungen Variable Ausdruck auswerten Wert berechnen Listen / Felder Liste anlegen Auf Listenelement zugreifen Vektoren und Matrizen Vektoren eingeben Matrizen eingeben Zugriff auf Elemente Operationen mit Matrizen und Vektoren Skalar und Matrix Elementeweise Operationen Matrizenmultiplikation Inverse Matrix Eigenwerte Funktionen Definieren mit define Textersetzung Auflisten Löschen Packages Startup-Datei evflag / evfun Ausdrücke umformen Ausmultiplizieren Faktorzerlegung und Ausklammern Partialbruchzerlegung Rational vereinfachen Potenzen und Logarithmen vereinfachen Winkelfunktionen umformen Operation auf Teilausdrücke anwenden Ausdrücke verändern Substituieren Differenzieren / Integrieren Gleichungssysteme Gleichungssysteme mit eindeutiger Lösung

8 Inhaltsverzeichnis Gleichungssysteme mit unendlich vielen Lösungen Eliminierung von Variablen Differentialgleichungen Numerische Lösungen Nullstellenbestimmung Integration Eigenwerte Fitten Programmierung Sequentielle Abarbeitung Block if for while D-Plotten plot2d Druckbereich Mehrere Kurven Achsen Keine Legende Legende Legende platzieren Gitter Gitterabstände Text-Label Titel Stile Logarithmisch Datenpunkte Parametrisch D-Plotten plot3d Höhenbereich Stützstellen Nicht einfärben Farbpalette Beispiele Schaltungsanalyse mit Ersatzschaltbildern Gleichungssystem - Maschenstromanalyse Gleichungssystem - Knotenspannungsanalyse Differentialgleichung - Einschaltvorgang Manuelle Lösung Lösung mit Maxima

9 Inhaltsverzeichnis Analyse eines Bandpasses Aufgabenstellung Allgemeines Vorgehen Realisierung mit Maxima Zustandsraummodell Kombinierte Beispiele Trigger

10

11 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 Scilab kann mathematische Probleme numerisch 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 Programme vor. Dabei wird GnuPlot relativ ausführlich behandelt, für Scilab und Maxima wird eine Einführung anhand von Beispielen gegeben, die Anfängern erste Schritte ermöglicht. 11

12

13 2 GnuPlot 2.1 Installation Installation unter Windows Im Downloadbereich von finden Sie eine *-setup.exe-datei für Windows. Diese Datei muss heruntergeladen und ausgeführt werden. Anschließend muss der Pfad überprüft und ggf. korrigiert 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 prüfen den Wert. Er muss C:\Program Files (x86)\gnuplot\binary (aktuelle Windows- Versionen), C:\Program Files\GnuPlot\binary (32-Bit-Windows-Versionen) bzw. C:\Programme\GnuPlot\binary (altere Windows-Versionen, z. B. Windows XP) enthalten. Groß- und Kleinschreibung wird nicht unterschieden. Falls das Verzeichnis noch nicht in PATH enthalten ist, fügen Sie es ein. 13

14 2 GnuPlot 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 g rep g n u p l o t 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) 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 Software erstellen und installieren Nach Download und Entpacken gehen Sie in das beim Entpacken entstandene Verzeichnis und starten 1. / c o n f i g u r e 2 make 3 make i n s t a l l 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 14

15 2.2 GnuPlot starten 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.2 GnuPlot starten GnuPlot interaktiv benutzen 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 1 C:\Program Files (x86)\gnuplot\binary 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 q u i t ein um das Programm zu verlassen oder Sie benutzen den Menü-Eintrag File Exit. 1 Das Verzeichnis kann variieren, je nach Windows-Version und den von Ihnen während der GnuPlot- Installation vorgegebenen Einstellungen 15

16 2 GnuPlot GnuPlot interaktiv unter Unix/Linux nutzen Durch Eingabe von 1 g n u p l o t 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 q u i t ein. 16

17 2.2 GnuPlot starten Eine Datei verarbeiten Eine Datei unter Windows verarbeiten Geben Sie wgnuplot Dateiname ein, um eine Datei mit GnuPlot-Kommandos zu 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. 17

18 2 GnuPlot 2.3 Zahlen und Winkel 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, oder 4.56e3 für 4, 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 p r i n t 5 / 2 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. 18

19 2.3.2 Winkeldarstellung 2.3 Zahlen und Winkel Winkel können entweder in Radiant (Standard) oder in Grad angegeben werden. Zur Umstellung werden die Kommandos 1 s e t a n g l e s r a d i a n s (zur Umstellung in Radiant) bzw. 1 s e t a n g l e s d e g r e e s (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 s e t a n g l e s d e g r e e s vor 1 s e t polar angegeben werden, falls benötigt. In diesem Fall wird der Bereich für die unabhängige Variable automatisch mit auf [0:360] gesetzt. 19

20 2 GnuPlot 2.4 Mathematische Ausdrücke Mathematische Ausdrücke (engl.: expression) entstehen, wenn Operanden durch mathematische Operatoren und Funktionen verknüpft werden. Folgende Operatoren stehen zur Verfügung: Tabelle 2.1: Operatoren Operator Bedeutung -a unäres Minus (negativer Wert) +a unäres Plus (keine Auswirkung, daher keine sinnvolle Operation) a Einerkomplement von a!a Logische Negation der Bedingung a a! Fakultät von a $3 wählt drittes Element aus Datensatz beim Daten-Plotten a**b a*b a/b a%b a+b a-b a==b a!=b a<b a<=b a>b a>=b a&b aˆb a b a&&b a b (a?b:c) a b a b a b a mod b (Modulo-Division, nur für Integer-Zahlen) a + b a b a = b (Test auf Gleichheit) a b (Test auf Ungleichheit) a < b a b a > b a b Bitweise Und-Verknüpfung von Integer-Zahlen Bitweise Exklusiv-Oder-Verknüpfung von Integer-Zahlen Bitweise Oder-Verknüpfung von Integer-Zahlen Logische Und-Verknüpfung zweier Bedingungen Logische Oder-Verknüpfung zweier Bedingungen b falls Bedingung a erfüllt ist, ansonsten c Die Operatoren wurden hier nach Anzahl der Operanden sortiert. Die Priorität der Operatoren ist wie in der Programmiersprache C. Im Zweifelsfall sollten Klammern 20

21 2.4 Mathematische Ausdrücke gesetzt werden. Folgende Funktionen stehen vorgefertigt zur Verfügung: Tabelle 2.2: Eingebaute Funktionen Funktion abs(x) acos(x) acosh(x) arg(x) asin(x) asinh(x) atan(x) atan2(y,x) atanh(x) besj0(x) Bedeutung Absolutwert von x Arcus-Kosinus von x, entweder in Radiant oder Grad (siehe auf Seite 19) inverser hyperbolischer Kosinus von x, immer in Radiant Phase eines komplexen Wertes, in Radiant oder Grad Arcussinux, entweder in Radiant oder Grad Inverser hyperbolischer Sinus, immer in Radiant Arcustangens, entweder in Radiant oder in Grad Arcustanges, entweder in Radiant oder in Grad Inverser hyperbolischer Tangens, immer in Radiant Besselfunktion, Argument immer in Radiant besj1(x) Besselfunktion,... besy0(x) Besselfunktion,... besy1(x) Besselfunktion,... ceil(x) die nächste Ganzzahl, die nicht kleiner ist als x (bzw. R(x) für komplexe Zahlen) cos(x) Kosinus, Argument in Radiant oder Grad cosh(x) erf(x) erfc(x) exp(x) floor(x) gamma(x) ibeta(p,q,x) inverf(x) igamma(a,x) imag(x) invnorm(x) hyperbolischer Kosinus, Argument in Radiant e x Größte Integerzahl, die nicht größer als x (bzw. R(x) für komplexe Zahlen) ist Γ(x), bei komplexen Zahlen wird der Imaginärteil ignoriert Imaginärteil von x (I(x)) wird fortgesetzt 21

22 2 GnuPlot int(x) Ganzzahliger Teil, Abschneiden in Richtung 0 Fortsetzung lambertw(z) Lambert s W-Funktion (W(z) e W(z) = z z 1 e ) lgamma(x) log(x) ln ΓR(x) ln(x) (natürlicher Logarithmus) log10(x) lg(x) (Logarithmus zur Basis 10) norm(x) rand() real(x) sgn(x) sin(x) sqrt(x) tan(x) tanh(x) defined(x) tm_year(x) tm_mon(x) tm_mday(x) tm_hour(x) tm_min(x) tm_sec(x) tm_wday(x) tm_yday(x) berechnet Zufallszahlen mit Hilfe zweier Generatoren rand(0) berechnet Zufallswert im Bereich [0 : 1] rand(-1) setzt beide Generatoren auf Standardwert rand(x) setzt beide Generatoren auf x, wenn x > 0 rand(x,y) setzt die Generatoren auf x und y Realteil von x (R(x)) Vorzeichenfunktion (-1, 0 oder 1) je nach Vorzeichen von x (bzw. R(x) bei komplexen Zahlen) Sinusfunktion, Argument entweder in Radiant oder Grad Quadratwurzel Tangens, Argument in Radiant oder Grad Hyperbolischer Tangens, Argument immer in Radiant 1, wenn Variable X definiert, 0 ansonsten Zeitberechnung für Jahr, Monat, Tag im Monat, Stunde, Minute, Sekunde, Wochentag und Tag im Jahr. Das Argument gibt die Anzahl der Sekunden seit :00 Uhr an. 22

23 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 r p a r ( 5. 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. 23

24 2 GnuPlot 50 0 rpar(10.0,x) D-Plots xy-plots Abbildung 2.1: Erster Plot 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 R y = 10Ω, der andere Widerstand R x sei variabel. 1 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 p l o t r p a r ( , x ) 24

25 2.6 2D-Plots 5 rpar(10.0,x) Abbildung 2.2: Eingrenzungen für x- und y-bereich 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 für x und für y. 1 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t yrange [ 0. 0 : 5. 0 ] 4 p l o t r p a r ( , 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. 25

26 2 GnuPlot 7 6 rpar(10.0,x) Gesamtwiderstand Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 p l o t r p a r ( , x ) Verwenden Sie das Kommando 1 help s e t x l a b e l für ausführlichere Informationen. 26

27 2.6 2D-Plots 7 6 Gesamtwiderstand Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 p l o t r p a r ( , x ) n o t i t l e Verwenden Sie das Kommando 1 help p l o t für ausführlichere Informationen. 27

28 2 GnuPlot 7 6 R Gesamtwiderstand Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 p l o t r p a r ( , x ) t i t l e "R" Verwenden Sie das Kommando 1 help p l o t für ausführlichere Informationen. 28

29 2.6 2D-Plots 7 6 R Gesamtwiderstand Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 s e t key l e f t t o p 6 p l o t r p a r ( , x ) t i t l e "R" Verwenden Sie das Kommando 1 help s e t key für ausführlichere Informationen. 29

30 2 GnuPlot 7 6 Gesamtwiderstand Parallelwiderstand Abbildung 2.7: Gitter Gitter hinterlegen Mit set grid show grid wird ein Gitter mit Standardeinstellungen eingerichtet und gezeichnet. 1 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 s e t grid 6 show grid 7 p l o t r p a r ( , x ) n o t i t l e Das Kommando 1 help s e t g rid liefert weitere Informationen zur Einrichtung des Gitters (u.a. Linientyp, Farbe... ). 30

31 2.6 2D-Plots 8 Gesamtwiderstand Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 s e t grid 6 show grid 7 s e t x t i c s s e t y t i c s p l o t r p a r ( , x ) n o t i t l e Verwenden Sie das Kommando 1 help s e t g rid für ausführlichere Informationen. 31

32 2 GnuPlot 7 6 R Geringerer Anstieg Gesamtwiderstand Starker Anstieg Parallelwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 s e t key l e f t t o p 6 s e t l a b e l " S t a r k e r A n s t i e g " a t 2. 0, s e t l a b e l " G e r i n g e r e r A n s t i e g " a t , 6. 5 r i g h t 8 p l o t r p a r ( , x ) t i t l e "R" Verwenden Sie das Kommando 1 help s e t l a b e l für ausführlichere Informationen. 32

33 2.6 2D-Plots 7 6 R Geringerer Anstieg Gesamtwiderstand Starker Anstieg Parallelwiderstand Abbildung 2.10: Linientyp und Liniendicke geändert Verfügbare Linien- und Füllarten anzeigen Mit 1 t e s t t e r m i n a l ; 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 s e t xrange [ 0. 0 : ] 3 s e t x l a b e l " P a r a l l e l w i d e r s t a n d " 4 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 " 5 s e t key l e f t t o p 6 s e t l a b e l " S t a r k e r A n s t i e g " a t 2. 0, s e t l a b e l " G e r i n g e r e r A n s t i e g " a t , 6. 5 r i g h t 8 p l o t r p a r ( , x ) t i t l e "R" with l i n e s l t 4 lw 2 Verwenden Sie das Kommando 1 help with für ausführlichere Informationen. 33

34 2 GnuPlot parallel in Reihe Gesamtwiderstand Testwiderstand 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 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 r s e r ( ra, rb )= r a + rb 3 s e t xrange [ 0. 0 : ] 4 s e t x l a b e l " T e s t w i d e r s t a n d " 5 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 " 6 s e t key l e f t t o p 7 p l o t r p a r ( , x ) t i t l e " p a r a l l e l ", r s e r ( , x ) t i t l e " i n Reihe " 34

35 2.6 2D-Plots Gesamtwiderstand R R P Testwiderstand Gesamtleistung P 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 = R ges I 2 = R a R b R a + R b I 2 1 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 pwr ( ra, rb, i )= r p a r ( ra, rb ) * ( i **2) 3 s e t xrange [ 0. 0 : ] 4 s e t x l a b e l " T e s t w i d e r s t a n d " 5 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" 6 s e t y 2 l a b e l " G e s a m t l e i s t u n g P" 7 s e t y2range [ 0. 0 : ] 8 s e t y 2 t i c s s e t key l e f t t o p 10 p l o t r p a r ( , x ) t i t l e "R", \ 11 pwr ( , x, e 3) t i t l e "P" axes 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. 35

36 2 GnuPlot 7 6 R P Gesamtwiderstand R Gesamtleistung P Testwiderstand 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 vorgegeben, bei einer Teilschrittweite von 1.0 erhält man 7 Teilschritte. Die rechte y-achse deckt den Bereich ab. Bei einer Teilschrittweite von erhält man ebenfalls 7 Teilschritte. 1 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 2 pwr ( ra, rb, i )= r p a r ( ra, rb ) * ( i **2) 3 s e t xrange [ 0. 0 : ] 4 s e t x l a b e l " T e s t w i d e r s t a n d " 5 s e t yrange [ 0 : 7. 0 ] 6 s e t y t i c s 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" 8 s e t y 2 l a b e l " G e s a m t l e i s t u n g P" 9 s e t y2range [ 0. 0 : ] 10 s e t y 2 t i c s s e t key l e f t t o p 12 p l o t r p a r ( , x ) t i t l e "R", \ 13 pwr ( , x, e 3) t i t l e "P" axes 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 ). 36

37 2.6 2D-Plots Kennlinie 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 betragsmäßig dargestellt. G( f ) = j f f G 1 f ( x ) = 1. 0 / ( { 0. 0, 1. 0 } * x ) 2 s e t xrange [ : ] 3 s e t yrange [ : 0. 0 ] 4 s e t l o g s c a l e x 5 s e t key l e f t bottom 6 p l o t 20* l o g ( abs ( f ( x ) ) ) t i t l e " K e n n l i n i e " Verwenden Sie das Kommando 1 help s e t l o g s c a l e für ausführlichere Informationen. 37

38 2 GnuPlot Daten plotten Messpunkte Bei der Aufnahme einer Strom-Spannungs-Kennlinie wurden Werte entsprechend Tabelle 2.3 ermittelt. Tabelle 2.3: Beispiel-Messwerte Spannung in V Strom in A Diese Daten werden in eine Datei gosp0015.dat geschrieben:

39 2.6 2D-Plots Kennlinie Strom Spannung Abbildung 2.15: Messwerte-Plot Mit 1 s e t xrange [ 0. 0 : ] 2 s e t yrange [ 0. 0 : ] 3 s e t x l a b e l " Spannung " 4 s e t y l a b e l " Strom " 5 s e t key l e f t t o p 6 p l o t gosp0015. d a t t i t l e " K e n n l i n i e " werden die Daten geplottet. 39

40 2 GnuPlot Kennlinie Strom Spannung Abbildung 2.16: Messkurve Plot als Kurve Mit der zusätzichen Option with lines werden die Punkte durch Kurven (Linienzüge) miteinander verbunden. 1 s e t xrange [ 0. 0 : ] 2 s e t yrange [ 0. 0 : ] 3 s e t x l a b e l " Spannung " 4 s e t y l a b e l " Strom " 5 s e t key l e f t t o p 6 p l o t gosp0015. d a t 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. 40

41 2.6 2D-Plots Kennlinie Strom Spannung 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 s e t xrange [ 0. 0 : ] 2 s e t yrange [ 0. 0 : ] 3 s e t x l a b e l " Spannung " 4 s e t y l a b e l " Strom " 5 s e t key l e f t t o p 6 p l o t gosp0015. d a t t i t l e " K e n n l i n i e " \ 7 with l i n e s smooth s b e z i e r 41

42 2 GnuPlot Kennlinie Strom Spannung Abbildung 2.18: csplines - Polynomstücken dritten Grades 1 s e t xrange [ 0. 0 : ] 2 s e t yrange [ 0. 0 : ] 3 s e t x l a b e l " Spannung " 4 s e t y l a b e l " Strom " 5 s e t key l e f t t o p 6 p l o t gosp0015. d a t t i t l e " K e n n l i n i e " \ 7 with l i n e s smooth c s p l i n e s Verwenden Sie das Kommando 1 help smooth für ausführlichere Informationen zur Kurvenglättung. Abb auf Seite 48 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). 42

43 2.6 2D-Plots Widerstand Spannung 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 s e t xrange [ 0. 0 : ] 2 s e t x l a b e l " Spannung " 3 s e t y l a b e l " W i d e r s t a n d " 4 s e t key l e f t t o p 5 p l o t gosp0015. d a t using 1 : ( $1 / $2 ) n o t i t l e \ 6 with l i n e s smooth s b e z i e r 43

44 2 GnuPlot Verwenden Sie das Kommando 1 help using für ausführlichere Informationen über die using -Option. 44

45 Messwerte in GnuPlot-Datei 2.6 2D-Plots 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 s e t xrange [ 0. 0 : ] 2 s e t x l a b e l " Spannung " 3 s e t y l a b e l " W i d e r s t a n d " 4 s e t key l e f t t o p 5 p l o t using 1 : ( $1 / $2 ) n o t i t l e with l i n e s smooth s b e z i e r e 45

46 2 GnuPlot Widerstand Spannung 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. 46

47 2.6 2D-Plots 1 s e t xrange [ 0. 0 : ] 2 s e t x l a b e l " Spannung " 3 s e t y l a b e l " W i d e r s t a n d " 4 s e t key l e f t t o p 5 p l o t using 1 : ( $1 / $2 ) n o t i t l e with l i n e s smooth s b e z i e r, \ 6 using 1 : ( $1 / $2 ) n o t i t l e with l i n e s smoot b e z i e r e e 47

48 2 GnuPlot dots bezier csplines acsplines Widerstand Abbildung 2.21: Verschiedene Glättungsverfahren Abb zeigt Kurven für identische Datensätze mit verschiedenen Glättungsverfahren. 1 s e t key l e f t t o p 2 p l o t t i t l e " d o t s ", \ 3 t i t l e " b e z i e r " with l i n e s smooth b e z i e r, \ 4 t i t l e " c s p l i n e s " with l i n e s smooth c s p l i n e s e

49 2.6 2D-Plots e e 49

50 2 GnuPlot 1.5 Hysteresekurve B H Abbildung 2.22: Hysteresekurve als Beispiel für zusammengesetzte Kurve 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. 50

51 2.6 2D-Plots 1 s e t x l a b e l "H" 2 s e t y l a b e l "B" 3 s e t xrange [ 20000:20000] 4 s e t yrange [ 1. 6 : 1. 6 ] 5 s e t key l e f t t o p 6 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 " \ 7 l t 0 with l i n e s, \ 8 smooth b e z i e r n o t i t l e l t 0 with l i n e s e e 51

52 2 GnuPlot Kurve Parametrische Plots Abbildung 2.23: Parametrischer Plot Parametrische Plots sind Plots, bei denen ein Parameter t ein vorgegebenes Intervall 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 plot-anweisung angegeben werden. Im Beispiel wird die Kurve k : x = 1 2 t2 t + 2 y = 4 3 t 3 1 t 5 gezeichnet. Wie man sieht, werden x-funktion und y-funktion durch Komma voneinander getrennt angegeben. 1 s e t parametric 2 s e t trange [ 1. 0 : 5. 0 ] 3 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 s e t parametric 2 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. 52

53 2.6 2D-Plots a α b Abbildung 2.24: Flächeninhalt eines Parallelogrammes 15 3*5*abs(sin(t)) Abbildung 2.25: Flächeninhalt in Abhängigkeit vom Winkel 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 1 s e t polar A = a b sinα 53

54 2 GnuPlot 2 s e t trange [ 0 : 2. 0 * p i ] 3 p l o t 3*5* abs ( s i n ( t ) ) n o t i t l e Standardmäßig geht GnuPlot davon aus, dass die Winkelvariable t in Radiant angegeben wird. Dies kann mit 1 s e t a n g l e s d e g r e e s auf Grad umgestellt werden, mit 1 s e t a n g l e s r a d i a n s 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! 54

55 2.7 3D-Plots Abbildung 2.26: Funktionsgebirge 2.7 3D-Plots 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. R ges = R 1 R 2 R 1 + R 2 1 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 2 s e t xrange [ 0. 0 : ] 3 s e t yrange [ 0. 0 : ] 4 s p l o t r p a r ( x, y ) n o t i t l e Verwenden Sie das Kommando 1 help s p l o t für ausführlichere Informationen. 55

56 2 GnuPlot Abbildung 2.27: Verdeckte Elemente 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 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 2 s e t xrange [ 0. 0 : ] 3 s e t yrange [ 0. 0 : ] 4 s e t hidden3d 5 s p l o t r p a r ( x, y ) n o t i t l e Verwenden Sie das Kommando 1 help s e t hidden3d für ausführlichere Informationen. 56

57 2.7 3D-Plots 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 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 2 s e t xrange [ 0. 0 : ] 3 s e t yrange [ 0. 0 : ] 4 s e t hidden3d 5 s e t i s o s a m p l e s 30,30 6 s p l o t r p a r ( x, y ) n o t i t l e Verwenden Sie das Kommando 1 help s e t i s o s a m p l e s für ausführlichere Informationen. 57

58 2 GnuPlot 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 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 2 s e t xrange [ 0. 0 : ] 3 s e t yrange [ 0. 0 : ] 4 s e t hidden3d 5 s e t i s o s a m p l e s 30,30 6 s e t contour both 7 s e t cntrparam c u b i c s p l i n e 8 s e t key l e f t t o p 9 s p l o t r p a r ( x, y ) n o t i t l e 58

59 2.7 3D-Plots Verwenden Sie die Kommandos 1 help s e t contour 2 help s e t cntrparam für ausführlichere Informationen. 59

60 2 GnuPlot 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,s z kann die Blickrichtung festgelegt werden. Standardmäßig ist α = 60, β = 30, s = 1 und s z = 1 eingestellt. Die Werte haben folgende Auswirkungen: Zunächst ist die Blickrichtung so festgelegt, dass man von oben auf die x,y- Ebene 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 s z kann optional benutzt werden, um eine gesonderte Skalierung für die z-achse vorzunehmen. Das Beispiel in Abb auf der nächsten Seite zeigt dieselbe Funktion aus verschiedenen Blickrichtungen betrachtet. Verwenden Sie das Kommando 1 help s e t view für ausführlichere Informationen. 60

61 2.7 3D-Plots 30,30,1 60,30, ,30,1 60,45, ,30, ,60, ,30, ,100, Abbildung 2.30: Verschiedene Blickpunkte 61

62 2 GnuPlot Abbildung 2.31: Eingefärbte Oberfläche Eingefärbte Oberfläche Eine Einfärbung kann mit der splot-option 1 with pm3d erreicht werden. 1 s e t t e r m i n a l png i n t e r l a c e t r u e c o l o r s i z e 1024,768 2 # s e t term p d f c a i r o f o n t " A r i a l, 6 " 3 s e t o u t p u t " gosp0054. png " 4 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 5 s e t x range [ 0. 0 : ] 6 s e t y range [ 0. 0 : ] 7 s e t hidden3d 8 s e t view 50,50,1 9 s e t i s o s a m p l e s 100, s p l o t r p a r ( x, y ) with pm3d n o t i t l e 62

63 2.7 3D-Plots u,cos(u),sin(u) z x 0.5 y 1 Abbildung 2.32: Schraubenförmige Kurve 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 s e t parametric 2 s e t urange [ 0 : 6 * p i ] 3 s e t vrange [ 1 : 1 ] 4 s e t x l a b e l " x " 5 s e t y l a b e l " y " 6 s e t z l a b e l " z " 7 s e t y t i c s 1,0.5,1 8 s e t z t i c s 1,0.5,1 9 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. 63

64 2 GnuPlot 3D-Plot z x y Abbildung 2.33: Torus Im Beispiel wird ein Torus dargestellt. Hierzu wird die Kreisfläche à : y = 5 + 2cosv z = 2sinv entlang der kreisförmigen Kurve k : x = 5cosu z = 5sinu rotiert. Es ergibt sich x = (5 + 2cosv)cosu y = (5 + 2cosu)sinu z = 2sinv 1 s e t parametric 2 s e t x l a b e l " x " 3 s e t y l a b e l " y " 4 s e t z l a b e l " z " 5 A=5 6 B=2 7 s e t urange [ 0 : 2. 0 * p i ] 8 s e t vrange [ 0 : 2. 0 * p i ] 9 s e t i s o s a m p l e s 50,50 10 s e t hidden3d 11 s e t y t i c s 8,4,8 12 s e t z t i c s 2,1,2 13 s p l o t (A+B* cos ( v ) ) * cos ( u ), (A+B* cos ( v ) ) * s i n ( u ),B* s i n ( v ) \ 14 t i t l e " 3D P l o t " 64

65 2.8 Terminals 2.8 Terminals - Die Ausgabetreiber Ü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 einige Ausgabetreiber auf. Tabelle 2.4: Terminals Name Ausgabe windows Ausgabe in ein Windows-Fenster cairolatex Dateikombination *.tex/*.pdf oder *.tex/*.eps canvas HTML-5-Canvas-Element cgm *.cgm-datei context Metafun-Source für Benutzung mit ConTeXt corel Corel-Draw-Datei dumb Text-Terminal dxf *.dxf-datei (für Import nach AutoCad) eepic LATEX picture-umgebung für Nutzung mit eepic-paket. emf *.emf-datei (Windows Metafile) emtex LATEX-Text epscairo EPS-Datei (Nutzung der Cairo/Pango-Bibliotheken) epslatex LATEX-Quelle fig *.fig-datei (für XFig, jfig und WinFig) gif *.gif-datei 2 gpic GPIC-Graphik für groff hp2623a Ausgabe auf HP2623-Drucker hp2648 Ausabe auf HP2648-Drucker hpgl *.hpgl-datei (z.b. für HP7575A-Plotter) imagen Imagen-Laserdrucker jpeg *.jpg-datei latex LATEX-Quelle wird fortgesetzt 2 aus Lizenzgründen erzeugen manche GnuPlot-Versionen PNG-Dateien anstelle von GIF-Dateien 65

66 2 GnuPlot Fortsetzung lua Weitere Ausgaben via lua script mf MetaFont-Datei mif *.mif-datei (für Frame Maker) mp MetaPost-Datei pcl5 Ausgabe für Drucker pdfcairo PDF-Datei (Nutzung der Cairo/Pango-Bibliotheken) png *.png-datei pngcairo PNG-Datei (Nutzung der Cairo/Pango-Bibliotheken) postscript *.ps-datei (PostScript) pslatex LATEX-Quelle mit PS-Specials pstex TEX-Quelle mit PS-Specials pstricks PSTricks-Datei für LATEX qms QMS/QUIC-Laserdrucker regis Ausgabe in Graphik-Sprache REGIS svg *.svg-datei (für Batik, Inkscape... ) tek40xx Ausgabe für Tektronix 4010 und andere Terminals tek410x Ausgabe für Tektronis 410x und 420x-Terminals texdraw LATEX-texdraw-Umgebung tgif *.obj-dateien für das Zeichenprogramm tgif tikz Ausgabe für das TikZ-Paket für LATEX tkcanvas Zeichenbefehle für Tcl/TK bzw. Perl/Tk-Canvas tpic LATEX picture-umgebung mit tpic-specials vttek Ausgabe für VT-ähnliche Terminals wxt Ausgabe in Fenster der wxwidgets-bibliothek x11 Ausgabe in X11-Fenster xlib X11-Befehle in Datei abspeichern xterm Ausgabe in Terminal 66

67 2.8 Terminals Abbildung 2.34: PNG-Datei 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. 67

68 2 GnuPlot 1 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 2 s e t output " o u t p u t. png " 3 r p a r ( a, b ) = ( ( a > 0. 0 )? ( ( b > 0. 0 )? ( ( a *b ) / ( a+b ) ) : 0. 0 ) : 0. 0 ) 4 s e t xrange [ 0. 0 : ] 5 s e t yrange [ 0. 0 : ] 6 s e t hidden3d 7 s e t i s o s a m p l e s 30,30 8 s e t contour both 9 s e t cntrparam c u b i c s p l i n e 10 s e t key l e f t t o p 11 s p l o t r p a r ( x, y ) n o t i t l e Verwenden Sie das Kommando 1 help s e t term 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. 68

69 2.9 GnuPlot und LATEX 2.9 GnuPlot und L A TEX Die Terminals cairolatex und tikz Für die Benutzung von GnuPlot mit LATEX kommen verschiedene Terminals in Betracht. Hier im Buch werden cairolatex und tikz vorgestellt. Beide Terminals produzieren eine *.tex-datei, die mit \input{image.tex} in ein LATEX-Dokument eingebunden werden kann. Das cairolatex-terminal erzeugt zwei Ausgabedateien, je nachdem, für welchen Zweck die Ausgabedateien verwendet werden sollen: Eine *.pdf- und eine *.tex-datei, wenn mit pdflatex gearbeitet wird oder eine *.eps- und eine *.tex-datei, wenn mit LATEX/dvips gearbeitet wird. Die *.pdf- bzw. *.eps-datei enthält die Graphikelemente mit Ausnahme der Textlabels. Die *.tex-datei bindet die *.pdf- bzw. *.eps-datei ein und setzt die Textlabels. Das tikz-terminal erzeugt nur eine Ausgabedatei, diese enthält sowohl die Graphikelemente als auch die Textlabels, beide realisiert durch LATEX-Anweisungen. Vorteil des cairolatex-terminals ist, dass die Graphikelemente bereits im PDF-Format (bzw. EPS-Format) vorliegen. Beim Lauf von pdflatex kann die PDF-Datei nahezu unverändert übernommen werden, es müssen lediglich Objektnummern und Referenzen auf Objektnummern geändert werden. Beim Lauf von LATEX muss nur die BoundingBox der EPS-Datei extrahiert werden. LATEX bzw. pdflatex muss nur die Textlabels verarbeiten. Damit ist das Verfahren recht schnell, insbesondere bei mehreren Durchläufen. Vorteil des tikz-terminals ist, dass auch die Diagrammgröße festgelegt werden kann. Damit kann das Gitter z. B. auf ein cm-raster angepasst werden. Nachteilig ist, dass auch die Graphikelemente von pdflatex bzw. LATEX verarbeitet werden müssen. Bei mehreren Durchläufen geschieht dies bei jedem Durchlauf erneut. Damit kann dieses Verfahren länger dauern als die Verwendung des cairolatex-terminals. Beiden Terminals ist gemeinsam, dass in Textlabels auch LATEX-Anweisungen benutzt werden können. Dabei müssen Zeichen, die in GnuPlot eine Bedeutung haben, einen Backslash vorangestellt bekommen. Soll beispielsweise in der *.tex-datei in einem Textlabel ein Backslash erscheinen, müssen an der entsprechenden Stelle der GnuPlot-Datei zwei Backslashes stehen. Empfohlen wird allgemein das cairolatex-terminal. Das tikz-terminal sollte zum Einsatz kommen, wenn die Diagrammgröße festgelegt werden muss. Für die GnuPlot-Graphiken in diesem Buch mit Ausnahme des tikz-beispieles wurde das cairolatex-terminal verwendet. 69

70 2 GnuPlot Das LATEX-Dokument bindet die *.tex-datei mit 1 \ i n p u t { image. t e x } ein. Eine typische Anwendung sieht folgendermaßen aus: 1 \ b e g i n { f i g u r e }% 2 { \ c e n t e r i n g% 3 \ i n p u t { image. t e x } \ c a p t i o n {Mein B i l d } \ l a b e l { f i g : image}% 4 }% 5 \ end { f i g u r e } Die Befehle \resizebox oder \scalebox können verwendet werden, um das Bild zu skalieren, z. B.: 1 \ r e s i z e b o x {8cm } {! } { \ i n p u t { image. t e x }} 2 \ r e s i z e b o x { \ l i n e w i d t h } {! } { \ i n p u t { image. t e x }} 3 \ s c a l e b o x { 0. 5 } { \ i n p u t { image. t e x }} Das cairolatex-terminal hat eine Reihe von Optionen. Abb. 2.1 auf Seite 24 wurde mit folgenden Befehlen erzeugt: Listing 2.1: Beispiel-Datei 1 s e t t e r m i n a l c a i r o l a t e x pdf i n p u t c o l o r c o l o r t e x t \ 2 s i z e 5. 0 in, 3. 0 i n 3 s e t o u t p u t " gosp0002. t e x " 4 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 5 p l o t r p a r ( , x ) Die Ausgabe von GnuPlot soll mit pdflatex verwendet werden (pdf). Die Ausgabe ist kein eigenständiges Bild, sondern wird in ein LATEX-Dokument eingebunden (input). Sowohl für Nicht-Text-Elemente (color) als auch für Texte (colortext) wird die Benutzung von Farben erlaubt. Das Bild wird 5 Zoll breit und 3 Zoll hoch (size 5.0in,3.0in). Die *.tex-datei heißt gosp0002.tex, der Name der *.pdf-datei wird daraus automatisch gebildet ( gosp0002.pdf ). 70

71 2.9 GnuPlot und LATEX 5 R ges 4 R Ω R 1 Ω Abbildung 2.35: Arbeitsdiagramm Diagramme entsprechend DIN 461 DIN 461 gibt vor, wie Diagramme zu zeichnen sind. Die DIN beschreibt verschiedene Diagrammarten, davon sind Arbeitsdiagramme mit GnuPlot realisierbar. Speziell für Qualifikationsnachweise im Rahmen einer Ausbildung (z. B. Bachelor-, Diplom- und Masterarbeiten) sollte diese DIN berücksichtigt werden. Neben der Achsenbeschriftung ist ein Pfeil zu zeichnen, dieser gibt an, in welche Richtung die jeweilige Größe wächst. Hierzu können die LATEX-Befehle \rightarrow bzw. \uparrow verwendet werden. Der Befehl \overset setzt den Pfeil nach oben über den Text. Die Achsenbeschriftung für die y-achse wird normalerweise von GnuPlot um 90 gedreht. Für ein DIN-gerechtes Diagramm muss diese Beschriftung aufrecht stehen. Dafür sorgt der Zusatz rotate by 0 in der Angabe des ylabel. Die Achsenbeschriftung wird als Bruch Größe Einheit angegeben. Enthalten Text-Labels LATEX-Anweisungen, ist eine Sonderbehandlung der Backslashes erforderlich: Für jeden Backslash, der in die *.tex-datei geschrieben werden soll, müssen zwei Backslashes in der GnuPlot-Datei stehen (siehe Beispiel auf der nächsten Seite). 71

72 2 GnuPlot Für das Beispiel wurde die nachfolgende Datei verwendet. 1 s e t t e r m i n a l c a i r o l a t e x pdf i n p u t c o l o r c o l o r t e x t \ 2 s i z e 5. 0 in, 3. 0 i n 3 s e t output " gosp0052. t e x " 4 s e t x l a b e l " \ \ ( \ \ f r a c {R_1 } { \ \ Omega } \ \ r i g h t a r r o w \ \ ) " 5 s e t y l a b e l \ 6 " \ \ ( \ \ o v e r s e t { \ \ uparrow \ \ vspace {. 3 em } } { \ \ f r a c {R } { \ \ Omega } } \ \ ) " \ 7 r o t a t e by 0 8 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 9 s e t xrange [ 0. 0 : ] 10 s e t yrange [ 0. 0 : 5. 0 ] 11 s e t x t i c s 0,2,20 12 s e t y t i c s 0, 1, 5 13 s e t key t o p l e f t 14 s e t grid 15 show grid 16 p l o t r p a r ( , x ) t i t l e " \ \ ( R_ { \ \ t e x t { ges } } \ \ ) " 72

73 2.9 GnuPlot und LATEX R ges R Ω R 1 Ω Abbildung 2.36: Gitter im cm-raster Diagramme mit cm-raster Bei der Verwendung des tikz-terminals kann mit der Option plotsize die Größe des eigentlichen Diagrammes angegeben werden. Mit einer geeigneten Bildgröße und passenden Gitterabständen kann ein Gitter im cm-raster erzeugt werden. In der Dokumenten-Präambel muss 1 \ u s e p a c k a g e { t i k z } 2 \ u s e p a c k a g e { g n u p l o t lua t i k z } verwendet werden. gnuplot-lua-tikz.sty und zugehörige Dateien befinden sich im Verzeichnis $GNUPLOTPREFIX/share/texmf/tex/latex/gnuplot. Dieses Verzeichnis muss in den texmf-tree integriert werden. 73

74 2 GnuPlot Im Beispiel werden Breite und Höhe des Diagrammes auf 10 cm gesetzt. 1 s e t t e r m i n a l t i k z l a t e x c o l o r s o l i d c l i p \ 2 p l o t s i z e cm, cm 3 s e t output " gosp0056. t e x " 4 s e t x l a b e l " \ \ ( \ \ f r a c {R_1 } { \ \ Omega } \ \ r i g h t a r r o w \ \ ) " 5 s e t y l a b e l \ 6 " \ \ ( \ \ o v e r s e t { \ \ uparrow \ \ vspace {. 3 em } } { \ \ f r a c {R } { \ \ Omega } } \ \ ) " \ 7 r o t a t e by 0 8 r p a r ( ra, rb ) = ( r a * rb ) / ( r a + rb ) 9 s e t xrange [ 0. 0 : ] 10 s e t yrange [ 0. 0 : 5. 0 ] 11 s e t x t i c s 0,1,10 12 s e t y t i c s 0, 0. 5, 5 13 s e t key t o p l e f t 14 s e t grid 15 show grid 16 p l o t r p a r ( , x ) t i t l e " \ \ ( R_ { \ \ t e x t { ges } } \ \ ) " 74

75 3 Erste Schritte mit Scilab Dieser Text gibt einen Einstieg in Scilab anhand ausgewählter Beispiele. Eine ausführliche oder gar vollständige Beschreibung ist nicht das Ziel dieses Textes, hierfür kann die Scilab-Homepage konsultiert werden. Dokumentationen finden Sie unter tutorials. 3.1 Installation Die Installationsdateien für Windows und Linux können von org/ bezogen werden. 3.2 Programmstart Unter Windows können Sie das Programm über das Startmenü starten, unter Linux geben Sie in einem Terminalfenster 1 s c i l a b & ein. Das Hauptfenster erscheint. 75

76 3 SciLab Abbildung 3.1: Scilab-Hauptfenster 76

77 3.2 Programmstart Abbildung 3.2: Menüpunkt Applications / SciNotes Kommandos können direkt im Scilab-Hauptfenster eingegeben werden. Dies ist allerdings nur für kleinere Probleme empfehlenswert. Sollen Kommandos wiederholt genutzt werden, wird die Kommandofolge in einer *.sce-datei gespeichert. Zum Anlegen einer Datei wählen Sie im Menü Applications SciNotes. Ein Texteditor wird geöffnet, hier können Sie eine Kommandofolge eingeben, diese als Datei speichern und anschließend mit dem Menüpunkt Anwenden... file with no echo oder Anwenden... file with echo ausführen lassen, siehe Abb. 3.3 auf der nächsten Seite. Die Ausgabe der Kommandos erscheint im Hauptfenster, siehe Abb. 3.4 auf Seite

78 3 SciLab Abbildung 3.3: Scilab-Texteditor 78

79 3.2 Programmstart Abbildung 3.4: Abarbeitung der Kommandos, Ausgabe in Hauptfenster 79

80 3 SciLab 3.3 Scilab-Eingabedaten Anweisungen Echo - Ergebnis anzeigen oder nicht Die Eingabe für Scilab besteht aus einer Folge von Anweisungen. Wird eine Anweisung nicht mit einem Semikolon abgeschlossen, wird das Ergebnis der Anweisung sofort angezeigt. Ein Semikolon unterdrückt die Anzeige, dies ist beispielsweise bei der Berechnung von Zwischenergebnissen sinnvoll. Lange Anweisungen Ist eine Anweisung zu lang für eine Zeile, wird eine Zeile mit... beendet und die Anweisung in der nächsten Zeile fortgesetzt Berechnungen Eine Berechnung wird vorgenommen, indem der Term (manchmal auch mathematischer Ausdruck genannt) als Anweisung in eine Zeile geschrieben wird, z. B Wird der Ausdruck mit einem Semikolon abgeschlossen, wird das Ergebnis nicht angezeigt, sondern nur in der Variable ans abgespeichert. Ohne Semikolon wird der Wert gespeichert und angezeigt. In einem Term werden Zahlen, Konstanten, Variable und Funktionsaufrufe durch Operatoren sinnvoll verknüpft. Die im Beispiel vorhandenen Leerzeichen zwischen den Zahlen und dem Operator sind nicht erforderlich, erhöhen aber die Lesbarkeit. Anstelle eines Leerzeichens kann auch eine Folge von Leerzeichen und Tabulaboren (Whitespaces) stehen. 80

81 3.3.3 Variablen 3.3 Scilab-Eingabedaten Wie in anderen Programmiersprachen auch beginnen Variablennamen mit einem Buchstaben oder Unterstrich, daran schließt sich eine beliebig lange Kombination von Buchstaben, Zahlen und Unterstrich an. Wird eine Variable in einer Berechnung verwendet, wird der zugewiesene Wert an der Stelle der Variablen eingesetzt. Bevor eine Variable verwendet werden kann, muss ihr ein Wert zugewiesen worden sein. Eine Zuweisung hat die Form Variablenname=Term Variablen können Skalare (Zahlenwerte), Vektoren oder Matrizen speichern. Mit who werden alle Variablen und Konstanten angezeigt, sowohl die selbst definierten als auch die vordefinierte. Mit clear Variable wird eine selbstdefinierte Variable gelöscht. Mit clear werden alle selbst definierten Variablen gelöscht Skalare Zahlenwerte für reelle und komplexe Zahlen werden in wissenschaftlicher Schreibweise (scientific notation) angegeben, wie dies auch in anderen Programmiersprachen üblich ist. Beispiele Scilab-Notation Bedeutung 5 Ganzzahliger Wert e4 1, (reelle Zahl) *%i 1, ,6 j (komplexe Zahl) Scilab speichert alle Zahlenwerte intern als double (64-Bit-Gleitkommazahlen) ab. Auf die Angabe von.0 nach ganzzahligen Werten kann verzichtet werden (im Gegensatz zu GnuPlot). 81

82 3 SciLab Konstanten Konstanten für reelle und komplexe Zahlen Scilab-Notation Bedeutung %pi π %e e (Eulersche Zahl) %i i (Imaginäre Einheit, in der Elektrotechnik Formelzeichen j) Boolesche Konstanten Scilab-Notation Bedeutung %T true, auch %t %F false, auch %f Weitere Werte: Scilab-Notation Bedeutung %inf %nan not a number (undefiniert, z. B. 0 0) Winkel Winkelangaben erfolgen in Radiant. 82

83 3.3 Scilab-Eingabedaten Abbildung 3.5: Eingabe einer Matrix Vektoren und Matrizen Eine Matrix bzw. ein Vektor wird durch [ und ] begrenzt. Die Elemente einer Matrixzeile werden durch Leerzeichen bzw. Leerzeichenfolgen voneinander getrennt. Mit einem Zeilenwechsel oder einem Semikolon wird eine Matrixzeile abgeschlossen. Im Beispiel wird zweimal dieselbe Matrix auf unterschiedliche Weise eingegeben. 1 M = [ ] 4 N = [ ; ; ] Lange Matrixzeilen können in mehreren Eingabetext-Zeilen geschrieben werden, dabei markieren drei Punkte... am Zeilenende, dass die Matrixzeile in der nächsten Textzeile fortgesetzt wird. 83

84 3 SciLab Vektoren sind Sonderfälle von Matrizen (nur eine Zeile bzw. eine Spalte) und werden genauso wie Matrizen eingegeben, Zeilenvektoren (im Beispiel Z) als Matrizen mit nur einer Zeile, Spaltenvektoren (im Beispiel S) als Matrix mit nur einer Spalte. Ein Spaltenvektor kann auch als transponierter Zeilenvektor eingegeben werden (Zeile 3 im Beispiel). 1 Z = [ ] 2 S = [ 1 ; 2 ; 3 ] 3 S = [ ] Weitere Formen zum Anlegen von Vektoren sind für [Startwert:Maximalwert] [Startwert:Inkrement:Maximalwert] linspace(startwert, Endwert, Anzahl) logspace(startbasis, Endbasis, Anzahl) Vektoren, die an einem Startwert beginnen, jeder Folgewert ist um Inkrement erhöht, dabei wird aber der Maximalwert nicht überschritten. Vektoren, deren Werte linear steigend oder fallend eine bestimmte Anzahl Werte in einem angegebenen Bereich annehmen. Vektoren, die in einem Wertebereich 10 Startbasis...10 Endbasis eine vorgegebene Anzahl Werte in logarithmischer Teilung einnehmen. Die letzten drei Formen werden häufig genutzt, um x-vektoren zum Plotten zu erzeugen. Skalare werden von Scilab intern ebenfalls als Sonderform einer Matrix gespeichert mit einer Zeile und einer Spalte. Die Verwendung von Matrizen für alle Zahlenwerte bzw. Variablen ermöglicht es, mit einfachen Scilab-Befehlen komplexe Verarbeitungen wie Matrixmultiplikationen oder Kreuzprodukt-Berechnungen auszuführen. 84

85 3.3 Scilab-Eingabedaten Mit zeros(zeilen, Spalten) zeros(matrix) ones(zeilen, Spalten) ones(matrix) kann eine Matrix bzw. ein Vektor angelegt werden, in dem alle Elemente 0 bzw. 1 sind. Dies ist besonders für zwei Anwendungsfälle sinnvoll: Große schwach besetzte Matrizen. Hier kann Schreibarbeit reduziert werden, indem mit zeros() eine Matrix mit Nullen initialisiert wird anstatt alle Nullen einzeln zu schreiben. Beim Anlegen der Matrix ist die Größe bereits bekann, die Elemente müssen aber erst noch berechnet werden. Wird eine Matrix im Lauf einer Berechnung nach und nach um Zeilen oder Spalten erweitert, so wird bei jedem Erweiterungsschritt eine neue größere Datenstruktur angelegt und der Inhalt der vorhandenen Datenstruktur in die neue Struktur kopiert. Effizienter ist es, bereits zu Beginn einmalig eine Datenstruktur in ausreichender Größe anzulegen und mit Nullen zu initialisieren. Mit eye(zeilen, Spalten) eye(matrix) wird eine neue Matrix derselben Größe angelegt. In der neuen Matrix sind die Elemente der Hauptdiagonale auf 1 gesetzt, alle anderen Elemente auf 0 (Einheitsmatrix). Mit diag(vektor) diag(matrix) wird mit der Hauptdiagonale einer Matrix operiert. Der erste Aufruf erzeugt eine Matrix, bei der nur die Hauptdiagonale besetzt ist, die Werte werden dem Vektor entnommen. Der zweite Aufruf erzeugt einen Spaltenvektor, der die Elemente aus der Hauptdiagonale der Matrix enthält. 85

86 3 SciLab Der Zugriff auf Elemente eines Vektors oder einer Matrix erfolgt mit Vektor(Index) Matrix(Zeile,Spalte) Der Index beginnt bei 1. Die Größe von Vektoren und Matrizen kann mit Größe = length(vektor) [Zeilen,Spalten] = size(matrix) Zeilen = size(matrix, r ) Spalten = size(matrix, c ) ermittelt werden. Hinweis: Die Funktion length() kann zum Ermitteln der Größe nur eingesetzt werden, wenn die Vektoren bzw. Matrizen keine Text-Strings enthalten! Sind Zeichenketten enthalten, gibt length() einen Vektor bzw. eine Matrix zurück mit der Länge der Zeichenketten. Um die Größe von Vektoren und Matrizen zu bestimmen, sollte bevorzugt size() verwendet werden. 86

87 3.3 Scilab-Eingabedaten Einfache Listen Listen sind eine Aufzählung von Elementen, auf die Elemente kann über die Angabe eines Index zugegriffen werden, ähnlich wie auf Vektor-Elemente. Mit list(element, Element... ) wird eine Liste erstellt. Eine Liste kann nicht nur Skalare enthalten, sondern beliebige Scilab-Objekte (z. B. Vektoren, Matrizen, Zeichenketten... ). Wert-Extraktion Operation Einfügen am Listenanfang Anhängen an das Listenende Element löschen Tabelle 3.1: Listenoperationen Schreibweise [Variable,...] = L(Vektor) Variable = L(Index) L(0) = Element L($+1) = Element L(Index) = null() Listen verketten L3 = lstcat(l1, L2) Größe ermitteln (Elementeanzahl) Variable = size(l) Variable = length(l) 87

88 3 SciLab Typisierte Listen Typisierte Listen können ähnlich verwendet werden wie strukturierte Datentypen anderer Programmiersprachen. Die Liste beginnt mit einem Vektor aus Zeichenketten, daran schließen sich die Datenelemente an. Im Beispiel 1 johnny = t l i s t ( [ " P e rson ", " A l t e r ", " K o n t o s t a n d " ], 45, ) ; 2 a r b e i t s j a h r e = johnny. A l t e r ; wird eine Variable johnny vom Typ Person angelegt. Die Variable enthält die Komponenten Alter und Kontostand, die Werte folgen dann in dieser Reihenfolge auf den String-Vektor. Die zweite Anweisung zeigt, wie auf Komponenten der Variable über Angabe des Namens zugegriffen werden kann. Die Komponenten können nicht nur Skalare sein wie im Beispiel, sondern auch Vektoren, Matrizen, Listen oder Strings... Mit typeof(tlist) wird der Typname einer typisierten Liste ermittelt. Die Funktion fieldnames(tlist) gibt eine Liste mit den Komponentennamen zurück. 88

89 Datenstruktur struct Mit struct(komponente, Wert... ); 3.3 Scilab-Eingabedaten wird eine Datenstruktur angelegt. Die Argumente von struct sind Paare, jeweils bestehend aus dem Komponentennamen (Zeichenkette) und Wert (beliebiger Datentyp). Beispiel: 1 johnny = s t r u c t ( A l t e r, 45, Kontostand, ) ; 2 a r b e i t s j a h r e = johnny. A l t e r ; 89

90 3 SciLab Operatoren Mathematische Operatoren Es stehen die Operatoren +, -, *, / und ^ für Addition, Subtraktion, Multiplikation, Division und Potenzieren zur Verfügung. Zum Potenzieren kann auch ** benutzt werden. Wird * auf Matrizen und Vektoren angewandt, findet eine Matrixmultiplikation statt. Der Operator \ veranlasst eine linksseite Division, d. h. M\x = M 1 x. Elementweise Operatoren für Vektoren und Matrizen Die Operatoren.* und./ bewirken eine elementweise Multiplikation und Division von Matrizen und Vektoren. Dabei müssen beide Operanden gleiche Größen haben..^ bewirkt ein elementweises Potenzieren..\ bewirkt eine elementweise linksseitige Division. Hinweis: Nach dem Operator sollte ein Leerzeichen stehen, insbesondere wenn auf den Operator eine Gleitkommazahl folgt, um eine versehentliche Verwendung des Operators.\. zu vermeiden. Für elementweise Berechnungen von Vektor- oder Matrixelementen sollten nach möglichweit die elementweisen Operatoren bevorzugt werden, anstatt mit verschachtelten Schleifen in der Scilab-Eingabe manuell alle Elemente einzeln zu berechnen. Logische Operatoren Die Operatoren &, und ~ dienen zur Verknüpfung logischer Werte (Und-Verknüpfung, Oder-Verknüpfung, Negation). 90

91 3.3 Scilab-Eingabedaten Funktionen Abbildung 3.6: Funktionsdefinition und Verwendung Grundlegendes zu Funktionen Funktionen werden mit function Rückgabevariable = Funktionsname(Argument(e)) Funktionskörper endfunction oder besser function [Rückgabevariable(n)] = Funktionsname(Argument(e)) Funktionskörper endfunction Die Rückgabevariablen müssen im Funktionskörper auf den Wert gesetzt werden, der als Ergebnis der Funktion zurückgegeben werden soll. 91

92 3 SciLab Soll die Funktion mehrere Werte als Liste zurückgeben, so werden die einzelnen Rückgabevariablen durch Kommata getrennt in eckigen Klammern geschrieben. Das Ergebnis der Funktion muss bzw. kann in diesem Fall einer Liste von Variablen zugewiesen werden. Ist die Variablenliste auf der linken Seite der Zuweisung kürzer als die Ergebnisliste der Funktion werden die überzähligen Elemente der Ergebnisliste ignoriert. Die Verwendung eckiger Klammern wird auch bei Verwendung nur einer Rückgabevariable empfohlen. Im Beispiel wird eine Funktion kugelvolumen() definiert und anschließend das Volumen von Kugeln mit dem Radius 1,0 bzw 2,0 berechnet. Die Funktion kugeldaten() gibt ein Feld mit zwei Elementen zurück: Kugelvolumen und Kugeloberfläche. 1 f u n c t i o n y = kugelvolumen ( r ) 2 y = 4. 0 * %p i * r ^3 / 3. 0 ; 3 e n d f u n c t i o n 4 V = kugelvolumen ( 1. 0 ) 5 V = kugelvolumen ( 2. 0 ) 6 7 f u n c t i o n [ volumen, f l a e c h e ] = k u g e l d a t e n ( r ) 8 volumen = 4. 0 * %p i * r ^ 3 / 3. 0 ; 9 f l a e c h e = 4. 0 * %p i * r ^ 2 ; 10 e n d f u n c t i o n 11 [V, A] = k u g e l d a t e n ( 1. 0 ) 12 [V, A] = k u g e l d a t e n ( 2. 0 ) 92

93 3.3 Scilab-Eingabedaten Es ist auch möglich, Matrizen und Vektoren als Funktionsargumente zu verwenden. Für Funktionen, die normalerweise einen Skalar verarbeiten, wird bei Vektoren und Matrizen als Argument empfohlen, eine Ergebnismatrix bzw. einen Ergebnisvektor zurückzugeben. Die skalare Funktion wird dabei auf jedes Matrix- bzw. Vektorelement angewandt. Im ersten noch nicht performance-optimierten Beispiel für die Realisierung wird hier auf lokale Variable und auf die for-schleife vorgegriffen. Dabei werden zunächst die Abmessungen des Arguments (Zeilen z und Spalten s) ermittelt. Anschließend werden die Ergebnismatrizen für Volumen und Fläche angelegt. In zwei ineinander verschachtelten for-schleifen durchläuft die Variable i alle Zeilen und die Variable j jeweils alle Spalten, um für alle Elemente der Argumentematrix x die entsprechenden Elemente der Ergebnismatrizen zu ermitteln. 1 f u n c t i o n [ volumen, f l a e c h e ] = k u g e l d a t e n ( x ) 2 [ z, s ] = s i z e ( x ) ; 3 volumen = z e r o s ( z, s ) ; 4 f l a e c h e = z e r o s ( z, s ) ; 5 f o r i = 1 : z 6 f o r j = 1 : s 7 volumen ( i, j ) = 4. 0 * %p i * x ( i, j )**3 / 3. 0 ; 8 f l a e c h e ( i, j ) = 4. 0 * %p i * x ( i, j ) * * 2 ; 9 end 10 end 11 e n d f u n c t i o n Aus Performance-Gründen ist es besser, die elementweisen Berechnungen mit den dafür vorgesehenen Scilab-Operatoren vorzunehmen anstatt mit verschachtelten Schleifen. Damit wird die Funktion auch übersichtlicher: 1 f u n c t i o n [ volumen, f l a e c h e ] = k u g e l d a t e n ( x ) 2 f l a e c h e = 4 * %p i * ( x. ^ 2 ) ; 3 volumen = ( f l a e c h e. * x ) / 3 ; 4 e n d f u n c t i o n Der Ausdruck x.^ 2 führt zum elementweisen Quadrieren von x. Ist x ein Skalar, so ist das Ergebnis des Ausdruckes wiederum ein Skalar (x 2 ). Ist x ein Vektor oder eine Matrix, so ist das Ergebnis ein Vektor oder eine Matrix mit genau denselben Abmessungen, alle Elemente sind Quadrate der entsprechenden Elemente von x. Die weitere Multiplikation dieses Vektors bzw. der Matrix mit Skalaren (4, bzw. π) ergibt dann wiederum einen Vektor bzw. eine Matrix gleicher Abmessungen. 93

94 3 SciLab Soll z. B. eine Funktion 1 f u n c t i o n [ y ] = f (m, x ) e n d f u n c t i o n geschrieben werden, um m x zu berechnen, so sollte die Funktion als 1 f u n c t i o n [ y ] = f (m, x, n ) 2 y = m. * x ; 3 e n d f u n c t i o n implementiert werden, nicht mit y =m * n. Dann können m und x entweder beide skalar, beide gleich große Vektoren oder beide gleich große Matrizen sein. Das Ergebnis ist nun auch entweder ein Skalar, ein Vektor oder eine Matrix der gleichen Abmessungen wie die Argumente. Da jedes Element des Ergebnisvektors bzw. der Ergebnismatrix durch Verknüpfung der entsprechenden Elemente der Argumentvektoren bzw. Argumentmatrizen gebildet werden soll, müssen die elementweisen Operatoren verwendet werden. Ansonsten würde, falls m und x Matrizen sind, eine Matrizenmultiplikation stattfinden. Eine große Anzahl von Funktionen ist in Scilab vordefiniert. In der Hilfe zu Scilab finden Sie ein Kapitel Elementary Function, hier sind diese Funktionen aufgelistet und dokumentiert. Funktionen können auch in *.sci-dateien gespeichert werden. Diese Dateien werden mit exec( Dateiname ) eingelesen. Der Dateiname sollte möglichst als vollständiger Dateiname angegeben werden. 94

95 Variable Anzahl an Rückgabewerten oder Argumenten Mit [lhs, rhs] = argn(auswahl) 3.3 Scilab-Eingabedaten kann innerhalb einer Funktion die Anzahl der Rückgabewerte und Aufrufargumente ermittelt werden. Damit sind Funktionsaufrufe mit variabler Anzahl an Rückgabewerten oder Argumenten möglich. Im Beispiel wird die Flächenberechnung nur für solche Funktionsaufrufe vorgenommen, die mehr als einen Rückgabewert erfordern. Damit können unnötige Berechnungen vermieden werden. 1 f u n c t i o n [ volumen, f l a e c h e ] = k u g e l d a t e n ( x ) 2 [ l h s, r h s ] = a rgn ( 0 ) 3 i f ( l h s > 0) t h e n 4 d i s p ( " Volumenberechnung " ) ; 5 volumen = ( ( x. * x. * x ) * 4 * %p i ) / 3 ; 6 i f ( l h s > 1) t h e n 7 d i s p ( " F l a e c h e n b e r e c h n u n g " ) ; 8 f l a e c h e = ( x. * x ) * 4 * %p i ; 9 end 10 end 11 e n d f u n c t i o n 12 [V, A] = k u g e l d a t e n ( 1. 0 ) ; 13 V = k u g e l d a t e n ( 2. 0 ) ; 95

96 3 SciLab Formale und effektive Parameter Bei Funktionsaufrufen kann die Zuordnung von Werten zu Funktionsargumenten nicht nur anhand der Reihenfolge der Argumente erfolgen sondern auch durch Angaben der Form Name=Wert. Mit exists(name, "local") kann getestet werden, ob innerhalb einer Funktion ein vorgegebener Name bereits definiert ist z. B. als lokale Variable oder Funktionsargument. Im Beispiel ist das Argument anfangsbetrag erforderlich, die Argumente zinssatz und zeit sind optional. Die Funktion prüft, dass mindestens ein Argument angegeben wurde. Wenn der Zinssatz oder der Zeitraum nicht definiert sind, wurden keine entsprechenden Argumente beim Aufruf der Funktion angegeben. In diesen Fällen werden Standardwerte benutzt. Die Funktion wird im Beispiel dreimal aufgerufen: einmal auf herkömmlichen Wege mit Zuordnung der aktuellen Argumente zu den formalen Parametern anhand der Reihenfolge und dreimal mit Angabe, welcher Parameter mit einem Wert belegt werden soll. 1 f u n c t i o n [ y ] = v e r z i n s u n g ( a n f a n g s b e t r a g, z i n s s a t z, z e i t ) 2 y = 0. 0 ; 3 [ l h s, r h s ] = a rgn ( ) ; 4 i f ( r h s > 0) & ( r h s < 4) t h e n 5 i f ~ e x i s t s ( " z i n s s a t z ", " l o c a l " ) t h e n 6 z i n s s a t z = ; 7 end 8 i f ~ e x i s t s ( " z e i t ", " l o c a l " ) t h e n 9 z e i t = ; 10 end 11 y = a n f a n g s b e t r a g * exp ( z e i t * l o g ( z i n s s a t z / ) ) ; 12 e l s e 13 e r r o r ( " Parameter Anzahl f e h l e r h a f t! " ) ; 14 end 15 e n d f u n c t i o n a = v e r z i n s u n g ( , 2. 5, 20) 18 b = v e r z i n s u n g ( , z e i t =5) 19 c = v e r z i n s u n g ( , z i n s s a t z = 5. 0 ) 20 d = v e r z i n s u n g ( , z e i t =25, z i n s s a t z = 3. 0 ) 96

97 3.4 Werte anzeigen 3.4 Werte anzeigen Wird eine Berechnung nicht mit Semikolon angeschlossen, wird das Ergebnis im Scilab-Hauptfenster angezeigt. Eine Berechnung kann auch die Angabe einer Variablen sein, dann wird der Wert der Variablen angezeigt. Mit disp(variable... ) werden die angegebenen Variablen im Hauptfenster angezeigt. Mit mprintf(format[, Argument... ]) werden Daten in das Hauptfenster von Scilab geschrieben. Format ist ein String, der konstanten Text und Platzhalter für einzusetzende variable Argumente enthält. Platzhalter sind wie in der Programmiersprace C üblich folgendermaßen aufgebaut: Prozentzeichen (kennzeichnet den Beginn eines Platzhalters). Optional ein oder mehrere Optionen, folgende Optionen sind möglich: - Text im verfügbaren Raum linksbündig einsetzen + Immer Vorzeichen angeben, auch wenn Wert positiv ist Leerzeichen Nichtnegativen Werten ein Leerzeichen voranstellen # Alternative Form der Ausgabe. 0 Führende Nullen hinzufügen. Optionale Angabe zu Textbreite und Genauigkeit: Dezimalzahl zur Angabe der Feldbreite. Optional, durch Komma abgetrennt, die Genauigkeit. Kennbuchstabe für den Datentyp: % Ausgabe eines Prozentzeichens d Dezimalwert, auch i. u vorzeichenloser Dezimalwert. o vorzeichenloser Dezimalwert in Oktal-Darstellung. x vorzeichenloser Dezimalwert in Hexadezimal-Darstellung, auch X. f Gleitkommazahl (float, double) ohne Exponentendarstellung. e Gleitkommazahl, mit Exponentendarstellung, auch E. g Gleitkommazahl, Exponentendarstellung nur falls nötig, auch G. c Einzelner Buchstabe. s Text-String. 97

98 3 SciLab 3.5 Nullstellensuche Die Funktion [x-variable, Wert, info] = fsolve(startwert, Funktion) kann zur Suche nach Nullstellen einer Funktion verwendet werden. Dabei wird ausgehend vom Startwert nach einer Nullstelle der Funktion gesucht. Im Ergebnis werden die gefundene Nullstelle, der zugehörige Funktionswert und ein Informationscode gespeichert. Nur wenn der Informationscode 1 ist, war die Nullstellensuche erfolgreich. Im Beispiel wird die Gleichung e x +2x = 7 gelöst, indem die Nullstelle von f (x) = e x +2x 7 ausgehend vom Startwert x = 1 gesucht wird. 1 f u n c t i o n y = f ( x ) 2 y = exp ( x ) * x 7. 0 ; 3 e n d f u n c t i o n 4 5 [ x, v, i n f o ] = f s o l v e ( 1. 0, f ) ; 6 i f ( i n f o == 1) 7 p r i n t f ( N u l l s t e l l e gefunden. \ nx = %g \ n, x ) ; 8 e l s e 9 p r i n t f ( Keine N u l l s t e l l e gefunden! \ n ) ; 10 end Zur Optimierung der Suche kann auch die erste Ableitung der Funktion mit angegeben werden. 1 f u n c t i o n y = f ( x ) 2 y = exp ( x ) * x 7. 0 ; 3 e n d f u n c t i o n 4 5 f u n c t i o n y = dfdx ( x ) 6 y = exp ( x ) ; 7 e n d f u n c t i o n 8 9 [ x, v, i n f o ] = f s o l v e ( 1. 0, f, dfdx ) ; 10 i f ( i n f o == 1) 11 p r i n t f ( N u l l s t e l l e gefunden. \ nx = %g \ n, x ) ; 12 e l s e 13 p r i n t f ( Keine N u l l s t e l l e gefunden! \ n ) ; 14 end Die Funktion fsolve() kann auch genutzt werden, um nichtlineare Gleichungssysteme numerisch zu lösen, dies wird später noch gezeigt. 98

99 3.6 Lin. GLS 3.6 Lineare Gleichungssysteme Lineare Gleichungssysteme können in Matrixschreibweise als M x = y geschrieben werden, dabei sind M und y gegeben. x kann mit x = M 1 y berechnet werden, wenn M 1 existiert (inverse Matrix von M), d. h. wenn das Gleichungssystem genau eine Lösung hat. Die inverse Matrix wird mit dem Befehl inv(matrix) berechnet. Im Beispiel wird das Gleichungssystem x 1 + 2x 2 = 17 3x 1 + 4x 2 = 39 gelöst, dieses kann in Matrixschreibweise geschrieben werden: 1 M = [ ] ; 3 y = [ ] ; 5 x = i n v (M) * y ; ( ) ( x1 x 2 ) = ( p r i n t f ( x_1 = %g x_2 = %g \ n, x ( 1 ), x ( 2 ) ) ; ) 99

100 3 SciLab f 1 f 2 f Abbildung 3.7: 3 Funktionen als Gebirge über x-y-ebene 3.7 Nichtlineare Gleichungssysteme Mit [Lösung, Abweichung, info] = fsolve(startpunkt, Funktion, JMF) wird nach Nullstllen von 0 = y = f ( x ) gesucht. Dabei ist x ein Positionsvektor der Dimension n, die Funktion f berechnet als Ergebnis einen Vektor der Dimension m. Die Funktion JMF zur Berechnung der Jacobi-Matrix ist optional, die Jacobi-Matrix enthält die Ableitungen aller Ergebniskomponenten nach allen Argumentekomponenten. J = dy 1 dx 1 dy 1 dx 2... dy 2 dx 1 dy 2 dx dy m dx 1.. dy m dx 2... Im Beispiel soll der Schnittpunkt der drei Flächen dy 1 x n dy 2 x n. dy m x n f 1 (x,y) = 10 x + y f 2 (x,y) = x y f 3 (x,y) = x y gesucht werden. Es gilt also f 1 (x,y) = f 2 (x,y) = f 3 (x,y). 100

101 3.7 Nichtlin. GLS Daraus ergibt sich ein Gleichungssystem Mit f 1 (x,y) f 2 (x,y) = 0 f 1 (x,y) f 3 (x,y) = 0 muss also das Gleichungssystem F 1 (x,y) = f 1 (x,y) f 2 (x,y) = 10 x x y F 2 (x,y) = f 1 (x,y) f 3 (x,y) = 10 x + y x y 0 = F 1 (x,y) = 10 x + y 1 10 x y 0 = F 2 (x,y) = 10 x + y x y gelöst werden. Für die Lösung mit Scilab müssen wir das Problem in Scilab-Notation darstellen Original-Problem Scilab-Notation x x 1 y x 2 F 1 (x,y) y 1 F 2 (x,y) y 2 ( d ) d dx F 1 (x,y) dy F 1 (x,y) J = d dx F d JMF = 2(x,y) dy F 2 (x,y) ( dy1 dy 1 dx 1 dx 2 dy 2 dy 2 dx 1 dx 2 ) Mit der Beispieldatei wird die Lösung gefunden. x = 0, y = 2,5 z = 3,

102 3 SciLab 1 / / F u n k t i o n e n i n N o t a t i o n des O r i g i n a l Problems 2 3 f u n c t i o n r e s u l t = f1 ( x, y ) 4 r e s u l t = / ( x+y ) ; 5 e n d f u n c t i o n 6 7 f u n c t i o n r e s u l t = f2 ( x, y ) 8 r e s u l t = s q r t ( x y ) ; 9 e n d f u n c t i o n f u n c t i o n r e s u l t = f3 ( x, y ) 12 r e s u l t = / ( x y ) ; 13 e n d f u n c t i o n f u n c t i o n r e s u l t = F1 ( x, y ) 16 r e s u l t = f1 ( x, y ) f2 ( x, y ) ; 17 e n d f u n c t i o n f u n c t i o n r e s u l t = F2 ( x, y ) 20 r e s u l t = f1 ( x, y ) f3 ( x, y ) ; 21 e n d f u n c t i o n / / F u n k t i o n e n i n N o t a t i o n f u e r f s o l v e f u n c t i o n y = f ( x ) 26 y = z e r o s ( 2, 1 ) ; 27 y ( 1 ) = F1 ( x ( 1 ), x ( 2 ) ) ; 28 y ( 2 ) = F2 ( x ( 1 ), x ( 2 ) ) ; 29 e n d f u n c t i o n f u n c t i o n y = JFM ( x ) 32 y = z e r o s ( 2, 2 ) ; 33 y ( 1, 1 ) = 1. 0 / ( 2. 0 * s q r t (10.0 x (1) x ( 2 ) ) ) / ( x ( 1 ) + x ( 2 ) ) ^ 2 ; 34 y ( 1, 2 ) = 1. 0 / ( 2. 0 * s q r t (10 x (1) x ( 2 ) ) ) 1 0 / ( x ( 1 ) + x ( 2 ) ) ^ 2 ; 35 y ( 2, 1 ) = / ( x (1) x ( 2 ) ) ^ / ( x ( 1 ) + x ( 2 ) ) ^ 2 ; 36 y ( 2, 2 ) = / ( x ( 1 ) + x ( 2 ) ) ^ / ( x (1) x ( 2 ) ) ^ 2 ; 37 e n d f u n c t i o n / / L o e s u n g s v e r s u c h 40 [ x, v, i n f o ] = f s o l v e ( [ 0. 5 ; 2. 0 ], f, JFM ) ; 41 i f ( i n f o == 1) 42 p r i n t f ( Loesung \ nx = %g \ ny = %g \ nf1 = %g \ nf2 = %g \ nf3 = %g \ n ", x ( 1 ), x ( 2 ), f1 ( x ( 1 ), x ( 2 ) ), f2 ( x ( 1 ), x ( 2 ) ), f3 ( x ( 1 ), x ( 2 ) ) ) ; 49 e l s e 50 p r i n t f ( L e i d e r k e i n e Loesung gefunden. \ n ) ; 51 end 102

103 3.8 Numerische Integration 3.8 Numerische Integration Mit intg(startwert, Endwert, Funktion) kann ein bestimmtes Integral einer angegebenen Funktion innerhalb der vorgegebenen Grenzen numerisch angenähert werden. Der zweite Aufruf im Beispiel zeigt die Nutzung zusätzlicher Parameter (geforderte absolute Genauigkeit und geforderte relative Genauigkeit) und die Übergabe einer Ergebnisliste bestehend aus dem Ergebnis und dem berechneten absoluten Fehler des Ergebnisses. 1 f u n c t i o n [ y ] = f ( x ) 2 y = 3. 0 * x ** * x ; 3 e n d f u n c t i o n 4 5 i n t g ( 1. 0, , f ) 6 [ e r g e b n i s, f e h l e r ] = i n t g ( 1. 0, , f, 1. 0 e 16, 1. 0 e 13) 103

104 3 SciLab 3.9 Statistik Mit den Funktionen mean(vektor) mean(matrix) st_deviation(vektor) st_deviation(matrix) werden der Durchschnittswert bzw. die Standardabweichung aller Elemente eines Vektors bzw. einer Matrix berechnet. Mittelwert: x = 1 n Standardabweichung: σ = N x i i=1 1 N 1 N i=1 (x i x) 2 104

105 3.10 Zusätzliche Pakete installieren Installation über Modul-Manager 3.10 Zusätzliche Pakete Mit dem Menüeintrag Applications Module Manager ATOMS wird der Modulmanager geöffnet. Dieser zeigt Module geordnet nach Kategorien an, verbunden mit einer Kurzbeschreibung und einem Button Installieren Manuelle Installation Die manuelle Installation zusätzlicher Pakete wird hier am Beispiel des nsplines - Paketes für die Natural-Spline-Interpolation demonstriert. Das Paket kann von http: //sourceforge.net/projects/nsplines bezogen werden. Nach dem Auspacken des Archives ist ein Verzeichnis nsplines-x.y.z zur Verfügung, x.y.z bezeichnet die Versionsnummer. Im Unterverzeichnis sci liegen die *.sci-dateien, die zum Scilab- Paket gehören. Verzeichnis erstellen, Dateien kopieren Die Verzeichnisstruktur für Scilab-Module sieht vor, dass diese *.sci-dateien in das Verzeichnis C:\Program Files\scilab-Version\modules\Paket\macros kopiert werden. Unter Linux: /... /scilab-version/modules/paket/macros. Dabei muss Version an die installierte Scilab-Version angepasst werden, Paket an den Paketnamen. Für unser Beispiel legen wir die Verzeichnisse C:\Program Files\scilab-5.3.3\modules\nsplines und C:\Program Files\scilab \modules\nsplines\macros an und kopieren die *.sci-dateien in das macros- Verzeichnis. Die Rolle Jeder oder INTERAKTIV bzw. die Gruppe Benutzer benötigt Berechtigungen zum Lesen und Durchsuchen der beiden neuen Verzeichnisse und Leserechte auf die *.sci-dateien. Unter Linux müssen die Dateirechte für die beiden Verzeichnisse auf 755 und die Rechte für die Dateien auf 644 gesetzt werden. Da unter Windows die Berechtigungen von den übergeordneten Verzeichnissen geerbt werden, sollten diese Berechtigungen nach dem Anlegen automatisch vorhanden sein. Eine Kontrolle schadet aber nicht. 105

106 3 SciLab lib-datei erstellen Nun muss die Bibliotheksdatei lib erzeugt werden. Dazu wird Scilab als Administrator bzw. unter Linux als root gestartet. Hierzu unter Windows den Menüeintrag für den Scilab-Start mit der rechten Maustaste anklicken und im Kontextmenü Als Administrator ausführen verwenden. Im Scilab-Hauptfenster wird nun das Kommando 1 g e n l i b ( n s p l i n e s, SCI / modules / n s p l i n e s / macros ) ; ausgeführt. Mit 1 l o a d ( SCI / modules / n s p l i n e s / macros / l i b ) ; wird die Bibliothek geladen, dies sollte nun sowohl für den Administrator als auch für normale Benutzer möglich sein. Automatisches Laden beim Programmstart für alle Nutzer Soll das Paket immer beim Programmstart geladen werden, wird an die Startup-Datei C:\Program Files\scilab-Version\etc\scilab.start die Zeile 1 l o a d ( SCI / modules / n s p l i n e s / macros / l i b ) ; eingefügt. Falls am Dateiende eine Zeile 1 c l e a r ans steht, sollte die load()-zeile unmittelbar vor der clear-zeile eingetragen werden. Auch die Änderung der Datei scilab.start muss als Administrator bzw. root erfolgen. Automatisches Laden beim Programmstart für einen Nutzer Soll das Paket nur für bestimmte Nutzer automatisch beim Programmstart geladen werden, muss die load()-zeile in die Datei.scilab im Homeverzeichnis des Benutzers bzw. im aktuellen Verzeichnis eingetragen werden. 106

107 3.11 Plotten 3.11 Plotten D-Plots Beim Plotten mit Scilab müssen die Plot-Daten in Form von Vektoren bzw. Matrizen bereitgestellt werden. Mit plot2d([logflag,][x,] y [,Key=Value... ]) wird ein 2D-Plot erzeugt. Das logflag ist ein String: nn, nl, ln oder ll und gibt an, welche Achse normal und welche linear geteilt wird. Die Daten für den Plot liegen in x und y, welche beide Vektoren oder Matrizen sein können: Ist sowohl x als auch y ein Vektor, so wird eine Kurve gezeichnet. Ist x ein Vektor und y eine Matrix, werden mehrere Kurven gezeichnet. Jede Matrix-Spalte enthält die aufeinanderfolgenden y-werte für eine Kurve. Die Zeilenanzahl der y-matrix muss der Länge des x-vektors entsprechen. Sind x und y zwei gleich große Matrizen, so enthält jede Spalte der y-matrix die y-werte für eine Kurve. Die zugehörigen x-werte werden der korrespondierenden Spalte aus der x-matrix entnommen. Wurde x nicht angegeben, wird automatisch ein Vektor mit ganzzahligen Werten von 1... n verwendet (Zeilenanzahl von y). Die Key=Value-Paare dienen zur Konfiguration und können folgende Keys enthalten: logflag Einstellung von normaler oder logarithmischer Skalenteilung, siehe oben. style Kurvenstil, ein Vektor mit sovielen Elementen, wie Kurven zu zeichnen sind. Die Elemente sind Integer-Werte. Positive Werte zeichnen die Kurve als Linie, der Wert wählt eine Farbe aus. Negative Werte zeichnen die Kurve als Punkte, der Betrag des Wertes wählt die Punktform. 107

108 3 SciLab strf Ein String mit drei Zahlen: Die erste Zahl konfiguriert Überschriften: 0 Keine Überschriften anzeigen 1 Überschriften anzeigen, Texte in Argument leg Die zweite Zahl konfiguriert die automatische Bereichs-Berechnung: 0 Keine Neuberechnung, Wiederverwendung bereits eingestellter Werte 1 Bereiche aus dem rect -Argument 2 Aus Minima und Maxima der x- und y-daten 3 Isometrischer Plot entsprechend dem recht -Argument 4 Isometrischer Plot, angepasst an x/y-daten. 5 Daten aus rect Argument mit Achsenerweiterung für gute Darstellung 6 Angepasst an x/y-daten, erweitert für gute Darstellung 7 wie 1, vorhandene Plots werden mit neuer Skale neu gezeichnet 8 wie 2, vorhandene Plots werden mit neuer Skale neu gezeichent Die dritte Zahl konfiguriert Informationen im Frame um den Plot: 0 Nichts wird um den Plot gezeichnet 1 Achsen, y-achse links 2 Box ohne Skalenteilung 3 Achsen, y-achse rechts 4 Achsen in der Mitte 5 Achsen durch den Punkt (0;0). leg String mit den Kurvenbezeichnungen. Alle Bezeichnungen kommen in einen String, voneinander getrennt. rect Minimalabmessungen des Plots, Vektor aus vier Werten x min, x max, y min und y max. Dieses Argument bestimmt in Kombination mit frameflag, wie die Abmessungen berechnet werden. nax Vektor zur Einstellung der Skalenstriche, enthält vier Elemente: nx, Nx, ny und Ny. Nx gibt die Anzahl der Skalenstriche nicht der Intervalle an, nx die Anzahl der Unterstriche. Ny und ny analog. 108

109 3.11 Plotten frameflag steuert die Berechnung der Bereiche aus den Minimumwerten: 0 Keine Neuberechnung, letzte Werte beibehalten 1 Werte aus rect -Angabe verwenden 2 Werte aus x/y-minima/maxima bestimmen 3 Werte aus rect erweitert, um isometische Skalen zu erhalten 4 Werte aus x/y-minima/maxima, erweitert, um isometrische Skalen zu erhalten 5 Werte aus rect, erweitert für gute Darstellung 6 x/y-daten, erweitert für gute Darstellung 7 wie 1, vorhandene Plots werden angepasst neugezeichnet 8 wie 2, vorhandene Plots werden angepasst neugezeichnet 9 wie 8, erweitert für gute Darstellung axesflag Steuerung, wie Achsen gezeichnet werden: 0 Keine Achsen 1 Achsen, y-achse links 2 Box ohne Skalenstriche 3 Achsen, y-achse rechts 4 Achsen in der Mitte, keine Box 5 Achsen in der Mitte, mit Box 9 Achsen, y-achse links 109

110 3 SciLab Abbildung 3.8: Beispiel für 2D-Plot Im Beispiel werden sin(x) und sin(2x) gezeichnet. Zunächst wird ein Spaltenvektor für die x-werte angelegt, dieser deckt den Bereich 0 x 2π mit 1000 Intervallen ab. Im wplot2d()-befehl werden mit den Befehlen sin(x) und sin(2*x) zwei Spaltenvektoren erzeugt mit den Funktionswerten. Diese werden mit [... ] nebeneinander angeordnet, also zu einer Matrix vereinigt. Die erste Spalte der Matrix enthält die sin(x)-werte für die erste Kurve, die zweite Spalte die sin(2x)-werte für die zweite Kurve. Mit strf wird eingestellt, dass keine Legende dargestellt wird (0), die Skalen passend zu den x/y-werten mit Erweiterung für gute Darstellung gewählt werden (6) und Skalen angezeigt werden mit y-skale links (1). 1 x = [ 0. 0 : ( 2 * % p i ) / : 2 * % p i ] ; 2 p l o t 2 d ( x, [ s i n ( x ) s i n (2* x ) ], s t r f = ) ; 110

111 D-Plots Der Befehl plot3d(x, y, z[, Key=Value]... ) plot3d(xf, yf, zf [, Key=Value]... ) 3.11 Plotten dient zum 3D-Plotten. Die Zeilenvektoren x mit n x Elementen und y mit n y Elementen enthalten die x- und y-koordinaten der Punkte. Die Matrix z enthält die zugehörigen Funktionswerte (die Höhe über den Koordinaten). Sie hat n x Zeilen und n y Spalten. Mit dem zweiten Befehl wird eine Folge von Polygonen in 3D gezeichnet, xf, yf und zf sind Matrizen mit den Polygondaten. Jede Matrixspalte entspricht einem Polygonzug. Die Polygonpunkte stehen innerhalb der Spalte untereinander. Mit den optionalen Key=Value-Paaren kann der Plot konfiguriert werden: Der Beobachtungspunkt wird mit den Winkeln theta und alpha festgelegt. Dabei ist theta der Winkel in der xy-ebene. Mit einem Winkel 0 schaut man von der positiven x-achse in Richtung Koordinatenursprung. Mit negativen Winkeln bis zu 90 nähert man sich einer Position im negativen Bereich der y-achse mit Blick zum Koordinatenursprung. Der alpha-wert gibt den Winkel zwischen z-achse und Beobachtungspunkt an. Mit 0 schaut man von oben senkrecht herunter, mit Annäherung an 90 wird der Blick immer waagerechter. Die Achsenbeschriftungen werden mit dem Parameter leg festgelegt. Die Achsennamen werden getrennt, z. B. Mit flag wird der Zeichenstil beeinflusst. Dieser Vektor besteht aus drei Komponenten: mode wählt Farbe und Linienstil aus. Positive Werte wählen eine Farbe für die Oberfläche. 0 zeichnet nur das Netz. Negative Werte wählen eine Farbe für die Oberfläche, die Polygonzüge für Facets werden nicht gezeichnet. type legt die Skalierung fest: 0 aktuelle Skalierung beibehalten, keine Neuberechnung 1 Verwendung von ebox, Neuskalierung nur im Notfall 2 Verwendung der x/y/z-daten, Neuskalierung im Notfall 3 Verwendung von ebox, isometrische Darstellung 4 Verwendung der x/y/z-daten, isometrische Darstellung 5 Verwendung von ebox, erweiterte isometrische Darstellung 6 Verwendung der x/y/z-daten, erweiterte isometrische Darstellung 111

112 3 SciLab box legt die Umrandung fest: 0 Keine Umrandung 1 Nicht implementiert, wie 0 2 Nur Achsen an der Oberfläche 3 Box um die Oberfläche und Beschrifungen 4 Box um die Oberfläche, Beschriftung und Skalen Das Feld ebox konfiguriert 6 Werte: x min, x max, y min, y max, z main und z max. Diese Werte werden benutzt, wenn type auf 1, 3 oder 5 gesetzt ist. 112

113 3.11 Plotten Z Y X Abbildung 3.9: Beispiel für 3D-Plot Im Beispiel wird die Funktion zur Berechnung der Parallelschaltung zweier Widerstände so variiert, dass sie als Parameter zwei Zeilenvektoren verarbeitet und als Ergebnis eine Matrix erzeugt. 1 f u n c t i o n [ y ] = p a r a l l e l ( a, b ) 2 [ za, sa ] = s i z e ( a ) ; 3 [ zb, sb ] = s i z e ( b ) ; 4 y = z e r o s ( sa, sb ) ; 5 f o r i = [ 1 : 1 : sa ] do 6 f o r j = [ 1 : 1 : sb ] do 7 i f a ( i ) > 0. 0 t h e n 8 i f b ( j ) > 0. 0 t h e n 9 y ( i, j ) = ( a ( i ) * b ( j ) ) / ( a ( i ) + b ( j ) ) ; 10 end 11 end 12 end 13 end 14 e n d f u n c t i o n x = [ 0 : 0. 2 : 1 0 ] ; 17 y = [ 0 : 0. 2 : 1 0 ] ; 18 c l f ( ) ; 19 p l o t 3 d ( x, y, p a r a l l e l ( x, y ), t h e t a = 60, a l p h a =60, f l a g =[2 2 4 ] ) ; 113

114 3 SciLab 3.12 Ein- und Ausgabe aus bzw. in Dateien Dateien öffnen und schließen Die Funktion mopen(dateiname, Zugriff ) öffnet eine Datei. Der Zugriffsmode ist ein String r zum Lesen, w zum Schreiben, a zum Anhängen an eine existierende Datei. Soll sowohl gelesen als auch geschrieben werden, wird ein + angehangen. Der Zugriffsmode kann optional ein b enthalten, um die Datei im Binärmode zu öffnen. Dabei wird die normalerweise unter Windows für Textdateien übliche automatische Umwandlung von Newline zu Carriage Return+Newline-Kombinationen abgeschaltet. Die Funktion gibt eine Liste zurück, die einen Filedeskriptor (bei Erfolg ein positiver Integer-Wert) und einen Fehlercode enthält. Mit mclose(fd) wird eine geöffnete Datei geschlossen. Als Filedeskriptor fd wird der von mopen() erhaltene Filedeskriptor angegeben oder der String all, um alle offenen Dateien zu schließen. Wird nur ein Filedeskriptor geschlossen, gibt die Funktion einen Fehlercode zurück. 114

115 Text schreiben Mit mfprintf(fd, Format [, Argument(e) ]) 3.12 Datei-E/A werden Daten in Textform geschrieben. Diese Funktion ist ein Interface zur C-Funktion fprintf(). Der Format-String besteht aus konstantem Text und Platzhaltern für den als Argument(e) angegebenen variablen Inhalt. Siehe Abschnitt 3.4 auf Seite 97 für Details zu Platzhaltern Text lesen Mit der Funktion mfscanf([anzahl,]fd, Format) werden Daten aus einer Textdatei gelesen. Zurückgegeben wird eine Liste, die als erstes Element die Anzahl der erfolgreich verarbeiteten Platzhalter aus dem Format-String angibt. Daran schließen sich die gelesenen Werte an. 115

116 3 SciLab Beispiel zum Schreiben und Lesen von Text Das Beispiel greift vor auf die if -then-else-konstruktion vor, um zu testen, ob Fehler auftraten bzw. wieviele Werte erfolgreich eingelesen wurden. 1 [ fd, ec ] = mopen ( c : \ temp \ t e s t. dat, w ) ; 2 i f fd > 0 t h e n 3 m f p r i n t f ( fd, %g \ t %010.3g \ n, %pi, %p i ) ; 4 mclose ( fd ) ; 5 e l s e 6 m p r i n t f ( D a t e i kann n i c h t g e s c h r i e b e n werden. \ n ) ; 7 m p r i n t f ( F e h l e r c o d e = %d. \ n, ec ) ; 8 end 9 10 [ fd, ec ] = mopen ( c : \ temp \ t e s t. dat, r ) ; 11 i f fd > 0 t h e n 12 [ n, v1, v2 ] = mfscanf ( fd, %e %e ) ; 13 i f n == 2 t h e n 14 m p r i n t f ( 2 Werte g e l e s e n : %e %e \ n, v1, v2 ) ; 15 e l s e 16 i f n == 1 t h e n 17 m p r i n t f ( 1 Wert g e l e s e n : %e \ n, v1 ) ; 18 e l s e 19 m p r i n t f ( Kein Wert g e l e s e n! \ n ) ; 20 e n d i f 21 end 22 mclose ( fd ) ; 23 e l s e 24 m p r i n t f ( D a t e i kann n i c h t g e l e s e n werden. \ n ) ; 25 m p r i n t f ( F e h l e r c o d e = %d. \ n, ec ) ; 26 end 116

117 Vektoren binär schreiben und lesen Mit mput(werte, Typ, fd) 3.12 Datei-E/A wird ein Vektor von Gleitkomma- oder Integerwerten in die Datei fd geschrieben. Der Typ (Standard: l ) wird durch einen der folgenden Strings beschrieben: l long (langer Integerwert) i int (Integerwert) s short (kurzer Integerwert) ul unsigned long (vorzeichenloser langer Integerwert) ui vorzeichenloser Integerwert us vorzeichenloser kurzer Integerwert d double (Gleitkommazahl mit doppelter Genauigkeit) f float (Gleitkommazahl mit einfacher Genauigkeit) c char (vorzeichenbehaftetes Byte) uc unsigned char (vorzeichenloses Byte) Standardmäßig werden die Werte in Little-Endian-Byteorder gespeichert, um portable Binärdateien zu erzeugen. Durch Anhängen eines l oder b kann little-endian oder big-endian gezielt angefordert werden. Mit mget(anzahl, Typ, fd) mgeti(anzahl, Typ, fd) wird ein Vektor von Gleitkommawerten (mget()) oder Integerwerten (mgeti()) mit der vorgegebenen Anzahl an Werten eingelesen. Die Funktion gibt den eingelesenen Vektor als Ergebnis zurück. Mit einer Anzahl von 1 werden einzelne Werte geschrieben und gelesen. 117

118 3 SciLab Matrizen binär schreiben und lesen Mit fprintfmat(dateiname, Matrix, Format, Text) wird eine Matrix in die angegebene Datei geschrieben. Das Format ist optional (Standard %lf ). Es muss die Form %Weite.GenauigkeitTyp %Typ haben. Der Typ ist lf, lg, d, i, e, f oder g. Der Text ist ebenfalls optional. Hierbei handelt es sich um eine Matrix aus Textstrings, die die Inhalte der Matrix beschreiben. Mit fscanfmat(dateiname, Format) wird eine mit fprintfmat() geschriebene Matrix wieder eingelesen. Wurde beim Schreiben der Matrix keine Text-Matrix mit angegeben, gibt fscanfmat() eine Matrix zurück. Wurde Text mit gespeichert, gibt fscanfmat() eine Liste zurück, die eine Werte-Matrix und eine Text-Matrix enthält. 118

119 3.12 Datei-E/A Beispiel Vektoren und Matrizen 1 Vektor = [ ] ; 2 3 Matrix = [ ] ; 6 7 / / Daten s p e i c h e r n 8 9 [ fd, e r r ] = mopen ( c : \ temp \ t e s t. dat, wb ) ; 10 i f fd > 0 t h e n 11 mput ( Vektor, d, fd ) ; 12 mclose ( fd ) ; 13 e l s e 14 m p r i n t f ( F e h l e r : D a t e i kann n i c h t g e s c h r i e b e n werden! \ n ) ; 15 end f p r i n t f M a t ( c : \ temp \ t e s t 2. dat, Matrix, %lg ) ; / / Daten l e s e n [ fd, e r r ] = mopen ( c : \ temp \ t e s t. dat, rb ) ; 22 i f fd > 0 t h e n 23 V2 = mget ( 3, d, fd ) ; 24 mclose ( fd ) ; 25 e l s e 26 m p r i n t f ( F e h l e r : D a t e i kann n i c h t g e l e s e n werden! \ n ) ; 27 end [M2, T2 ] = f s c a n f M a t ( c : \ temp \ t e s t 2. dat, %lg ) ; Weitere Funktionen Eine ganze Reihe weiterer Funktionen ist für Datei-Ein/Ausgabe verfügbar, diese werden m Abschnitt Files: Input/Output functions der Scilab-Online-Hilfe beschrieben. 119

120 3 SciLab 3.13 Programmierung Scilab verfügt über Konstrukte für die Programmierung. Eines dieser Konstrukte Funktionen wurden bereits in Abschnitt auf Seite 91 behandelt Die if-anweisung Mit if Bedingung then Anweisungsblock1 else Anweisungsblock2 end wird der erste Anweisungsblock ausgeführt, wenn die angegebene Bedingung erfüllt ist, ansonsten der zweite Anweisungsblock. Wird nur der erste Anweisungsblock benötigt, entfallen das else und der zweite Anweisungsblock. Mit if Bedingung1 then Anweisungsblock1 elseif Bedingung2 then Anweisungsblock2 else Anweisungsblock3 end kann eine Reihe von Bedingungen mit mehreren elseif durchaus mehr als zwei abgefragt werden, die am höchsten priorisierte Bedingung zuerst. 120

121 3.13 Programmierung Die select-anweisung Mit select Ausdruck, case Ausdruck1 then Anweisungsblock1, case Ausdruck2 then Anweisungsblock2,. case Ausdruckn then Anweisungsblockn, else Anweisungsblocko, end wird geprüft, ob der angegebene Ausdruck den gleichen Wert hat wie einer der Ausdrücke Ausdruck1... Ausdruckn. Falls ja, wird der entsprechende Anweisungsblock ausgeführt. Falls es keine Übereinstimmung mit einem der Ausdrücke gibt, wird Anweisungsblocko ausgeführt. Der else-zweig ist optional Die while-anweisung Eine abweisende Schleife wird mit while Bedingung do Anweisungsblock end realisiert. Der Anwendungsblock wird erneut durchlaufen, wenn die Bedingung erfüllt ist. Die Online-Hilfe zeigt weitere Varianten der while-schleife. Von der Verwendung des else-zweiges wird abgeraten, der entsprechende Anweisungsblock kann auch einfach hinter die Schleife geschrieben werden Die for-anweisung Mit for Variable = Ausdruck do Anweisungsblock end wird der Anweisungsblock mehrfach durchlaufen. In den verschiedenen Durchläufen nimmt die Variable die Werte des Ausdruckes an. Der Ausdruck ist üblicherweise ein Zeilenvektor oder eine einfache Liste. Ist der Ausdruck eine Matrix, wird der Variablen für jeden Durchlauf ein Spaltenvektor der Matrix zugewiesen. Im Ausdruck kann als Spezialfall der Doppelpunkt eingesetzt werden, um mit Start:Schritt:Ende Zeilenvektoren mit gleichmäßigen Abstand zu erzeugen. 121

122 3 SciLab Die break-anweisung Mit der break-anweisung wird die innerste bearbeitete for- oder while-schleife verlassen, die Verarbeitung wird mit der ersten Anweisung nach der end-anweisung der Schleife fortgesetzt Die try-catch-anweisung Treten in einer Anweisungsfolge Fehler auf, so wird standardmäßig die Abarbeitung beendet. Mit try Anweisungsblock1 catch Anweisungsblock2 end werden die Anweisungen aus Anweisungsblock1 ausgeführt. Tritt dabei ein Fehler auf, wird die Bearbeitung von Anweisungsblock1 abgebrochen, Anweisungsblock2 ausgeführt und nach der try-catch-end-anweisung fortgesetzt. Der letzte aufgetretene Fehler kann mit der Funktion lasterror(option) ermittelt werden. Die Option ist ein boolscher Wert, der angibt, ob die Fehlerbedingung gelöscht wird. Standardwert: %t. Die Funktion existiert in drei Ausprägungen: String = lasterror(option) [String, Code] = lasterror(option) [String, Code, Zeilennummer, Funktion] = lasterror(option) String ist ein Vektor mit Fehlertexten oder eine leere Matrix. Code ist ein Integerwert für den Fehlercode. Zeilennummer ist die Zeilennummer, in der der Fehler auftrat. Funktion ist der Name der Funktion, in der der Fehler auftrat. 122

123 3.14 Beispiele R 1 U q R 2 U Beispiele Abbildung 3.10: Spannungsteiler Einfache Berechnung Gegeben ist eine Schaltung entsprechend Abb mit folgenden Werten: U q = 10V R 1 = 4,7kΩ R 2 = 10kΩ Zu berechnen ist die Spannung U 2, die über dem Widerstand R 2 abfällt. Die Berechnung kann nach der Formel U 2 = R 2 R 1 + R 2 U q erfolgen, wie im Beispiel gezeigt. 1 Uq = ; 2 R1 = 4. 7 e3 ; 3 R2 = e3 ; 4 U2 = Uq * R2 / ( R1 + R2 ) ; 5 p r i n t f ( U2 = %g \ n, U2 ) ; 123

124 3 SciLab R 1 I 3 U q R 2 R 3 Abbildung 3.11: Schaltung Selbstdefinierte Funktion Gegeben sei eine Schaltung entsprechend Abb mit U q = 10V R 1 = 4,7kΩ R 2 = 10kΩ R 3 = 47kΩ Zu berechnen ist der Strom I 3 durch R 3. Die Funktion para() berechnet den Gesamtwiderstand zweier parallel geschalteter Widerstände. 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. 1 / / F u n k t i o n s d e f i n i t i o n 2 / / P a r a l l e l s c h a l t u n g z w e i e r W i d e r s t a e n d e 3 f u n c t i o n [ y ] = p a r a ( a, b ) 4 y = 0. 0 ; 5 i f ( a > 0. 0 ) 6 i f ( b > 0. 0 ) 7 y = a * b / ( a + b ) ; 8 end 9 end 10 e n d f u n c t i o n 11 / / Gegebene Groessen 12 Uq = ; 13 R1 = 4. 7 e3 ; 14 R2 = e3 ; 15 R3 = e3 ; 16 / / Berechnung 17 Rges = R1 + p a r a ( R2, R3 ) ; 18 I g e s = Uq / Rges ; 19 I3 = I g e s * R2 / ( R2 + R3 ) ; 20 / / Ausgabe 21 p r i n t f ( I3 = %g \ n, I3 ) ; 124

125 3.14 Beispiele R 1 R 3 U q R 2 R4 R 5 I A I B I C Abbildung 3.12: Beispielschaltung für Maschenstromanalyse Lin. Gleichungssystem (1) - Maschenstromanalyse Für die Schaltung entsprechend Abb mit U q = 5V R 1 = 4,7kΩ R 2 = 10kΩ R 3 = 4,7kΩ R 4 = 10kΩ R 5 = 7,2kΩ ist der Strom I 4 gesucht. Die Maschenstromanalyse ergibt ein Gleichungssystem in Matrizenschreibweise: R 1 + R 2 R 2 0 I A U q R 2 R 2 + R 3 + R 4 R 4 I B = 0 0 R 4 R 4 + R 5 I C 0 Dieses Gleichungssystem kann mit Scilab gelöst werden: 1 Uq = 5. 0 ; 2 R1 = 4. 7 e3 ; R2 = e3 ; R3 = 4. 7 e3 ; R4 = e3 ; R5 = 7. 2 e3 ; 3 M = [ R1+R2 R2 0 4 R2 R2+R3+R4 R4 5 0 R4 R4+R5 ] ; 6 y = [ Uq ] ; 9 x = i n v (M) * y ; 10 IB = x ( 2 ) ; 11 IC = x ( 3 ) ; 12 I 4 = IB IC ; 13 p r i n t f ( I4 = %g \ n, I4 ) ; 125

126 3 SciLab C A B I q1 R 1 U q1 R 2 D Abbildung 3.13: Kleines Beispiel für die Knotenspannungsanalyse Lin. Gleichungssystem (2) - Knotenspannungsanalyse Bei der Knotenspannungsanalyse wird ein Knoten der Schaltung als Bezugspunkt (Masse, Punkt 0) ausgewählt. Die Knotenspannungen der verbleibenden Knoten sind die Spannungen vom jeweiligen Knoten zum Bezugspunkt. Bedingung für die Anwendung des Knotenspannungsverfahren ist, dass keine Spannungsquelle ohne Widerstand in einem Zweig zwischen zwei Knoten steht. Jede Spannungsquelle muss mit einem Widerstand kombiniert sein, so dass die Kombination in eine Stromquelle mit Parallel-Leitwert überführbar ist. Für jeden Knoten werden Gleichungen aufgestellt, dass die Summe aller aus dem Knoten herausfließenden Ströme 0 ist. Das Aufstellen der Gleichungen wird zunächst an einem kleinen Beispiel mit einer Schaltung entsprechend Abb verdeutlicht. Für Knoten A gilt: (U A U B U q1 )G 1 + (U A U D )G 2 = I q1 Für die Matrixschreibweise des Gleichungssystems müssen wir so umstellen, dass wir Koeffizienten für die gesuchten Knotenspannungen erhalten und alle Terme ohne Knotenspannung auf die Ergebnisseite bringen: U A G 1 U B G 1 U q1 G 1 +U A G 2 U D G 2 = I q1 (G 1 + G 2 )U A G 1 U B G 2 U D = I q1 +U q1 G 1 Beim Aufstellen des Gleichungssystemes stehen im x-vektor nacheinander die gesuchten Spannungen U A, U B.... Jede Zeile der Koeffizientenmatrix bzw. des x- und des Ergebnisvektors repräsentiert die Gleichung für einen Knoten, für jeden Knoten i wird folgendermaßen vorgegangen: 126

127 3.14 Beispiele Das Element m i,i auf der Hauptdiagonale wird auf die Summe aller Leitwerte vom Knoten i zu allen seinen Nachbarknoten gesetzt. Für jeden Nachbarknoten j wird der Leitwert zwischen den Knoten i und j mit negativem Vorzeichen versehen als m i, j und m j,i eingetragen. In den Knoten i hineinfließende Ströme von Stromquellen erscheinen im Ergebnisvektor mit positiven Vorzeichen, herausfließende Ströme mit negativen Vorzeichen. Spannungsquellen in Zweigen zu Nachbarknoten erscheinen im Ergebnisvektor mit dem Zweig-Leitwert multipliziert. Das Vorzeichen ist positiv für Quellen, deren äußerer Spannungsabfall vom Knoten weg zeigt (die Spannungsquelle treibt einen Strom in den Knoten hinein). Quellen, deren äußerer Spannungsabfall zum Knoten hin zeigt, erscheinen mit negativen Vorzeichen. Nachdem die Daten aller Knoten eingegeben wurden, erhalten die noch freien Stellen der Koeffizientenmatrix und des Ergebnisvektors den Wert

128 3 SciLab U q2 R 1 R I q1 I q2 R 2 6 R 6 7 R 10 I 10 U R10 U q1 R 3 R 4 R 8 R 9 4 R 5 5 R 11 U q3 0 Abbildung 3.14: Beispielschaltung für die Knotenspannungsanalyse In der Beispielschaltung entsprechend Abb mit R 1 = 50Ω R 2 = 1,0kΩ R 3 = 0,5kΩ R 4 = 1,0kΩ R 5 = 1,5kΩ R 6 = 2,0kΩ R 7 = 1,5kΩ R 8 = 2,0kΩ R 9 = 2,5kΩ R 10 = 3,0kΩ R 11 = 2,5kΩ I q1 = 2,0mA U q1 = 1,5V U q2 = 3,0V U q3 = 4,5V I q2 = 4,0mA U mess = 0 wird der Strom I 10 durch den Widerstand R 10 gesucht. Zunächst werden Knotennummern vergeben wie in der Abbildung bereits eingetragen. Wird nur an einem Bauelement eine Größe gesucht, sollte man den Bezugspunkt geschickt wählen. Im Beispiel ist der Strom durch R 10 gesucht, dafür werden die Knotenspannungen ober- und unterhalb des Widerstandes benötigt. Wird der Bezugspunkt unterhalb des Widerstandes gelegt, muss nur eine Knotenspannung berechnet werden. Die rot gekennzeichneten Punkte werden bei der Knotenspannungsanalyse nicht mit berücksichtigt, da hierbei Zweige mit nur Spannungsquellen als Element entstehen würden. Aufgrund der hohen Knoten-Anzahl ist das Gleichungssystem in Matrizenschreibweise zu lang, um hier dargestellt zu werden. 128

129 3.14 Beispiele Im Beispiel werden zunächst Variablen mit den Werten angelegt und die Leitwerte G i = 1 R i berechnet. Die Koeffizientenmatrix und der Ergebnisvektor werden mit dem zeros()-befehl in der passenden Größe aufgebaut und mit Nullen gefüllt. Anschließend werden an den besetzten Stellen die entsprechenden Werte eingetragen. Durch Multiplikation der inversen Koeffizientenmatrix mit dem Ergebnisvektor wird der x-vektor mit den Knotenspannungen berechnet. Die Knotenspannung U 1 wird anschließend mit dem Leitwert G 10 multipliziert, um den Strom I 10 zu bestimmen. 129

130 3 SciLab 1 R1 = ; R2 = 1. 0 e3 ; R3 = 0. 5 e3 ; 2 R4 = 1. 0 e3 ; R5 = 1. 5 e3 ; R6 = 2. 0 e3 ; 3 R7 = 1. 5 e3 ; R8 = 2. 0 e3 ; R9 = 2. 5 e3 ; 4 R10 = 3. 0 e3 ; R11 = 2. 5 e3 ; 5 Uq1 = 1. 5 ; Uq2 = 3. 0 ; Uq3 = 4. 5 ; 6 Iq1 = 2. 0 e 3; Iq2 = 4. 0 e 3; 7 8 G1 = 1. 0 / R1 ; G2 = 1. 0 / R2 ; G3 = 1. 0 / R3 ; 9 G4 = 1. 0 / R4 ; G5 = 1. 0 / R5 ; G6 = 1. 0 / R6 ; 10 G7 = 1. 0 / R7 ; G8 = 1. 0 / R8 ; G9 = 1. 0 / R9 ; 11 G10 = 1. 0 / R10 ; G11 = 1. 0 / R11 ; m = z e r o s ( 7, 7 ) ; 14 y = [ ] ; m( 1, 1 ) = G7+G10 ; m( 1, 2 ) = G7 ; m( 2, 2 ) = G1+G6+G7 ; 17 m( 2, 1 ) = G7 ; m( 2, 3 ) = G1 ; m( 2, 5 ) = G6 ; 18 m( 3, 3 ) = G1+G2 ; m( 3, 2 ) = G1 ; m( 3, 4 ) = G2 ; 19 m( 4, 4 ) = G2+G3+G5 ; m( 4, 3 ) = G2 ; m( 4, 5 ) = G5 ; 20 m( 4, 6 ) = G3 ; 21 m( 5, 5 ) = G4+G5+G6+G8+G11 ; 22 m( 5, 2 ) = G6 ; m( 5, 4 ) = G5 ; m( 5, 6 ) = G4 ; 23 m( 5, 7 ) = G8 24 m( 6, 6 ) = G3+G4 ; m( 6, 4 ) = G3 ; m( 6, 5 ) = G4 ; 25 m( 7, 7 ) = G8+G9 ; m( 7, 5 ) = G8 ; 26 y ( 2 ) = Iq2 Uq2*G1 ; 27 y ( 3 ) = Uq2*G1+Iq1 Uq1*G2 ; 28 y ( 4 ) = Uq1*G2 ; 29 y ( 5 ) = Uq3*G11 ; 30 y ( 6 ) = Iq1 ; 31 y ( 7 ) = Iq2 ; 32 x = i n v (m) * y ; 33 I10 = x ( 1 ) * G10 ; 34 p r i n t f ( I = %g \ n ", I10 ) ; 130

131 3.14 Beispiele u e u a U Ref R 1 R 2 Abbildung 3.15: Trigger Nichtlineares Gleichungssystem am Beispiel Trigger Für den in der Abb gezeigten Trigger mit den gegebenen Größen û e Amplitude des angelegten sinusförmigen Eingangssignales U a,max maximale Ausgangsspannung des OV (nahezu +U B ) U a,min minimale Ausgangsspannung des OV (nahezu U B ) U Ref angelegte Referenzspannung (Gleichspannung) R 1, R 2 Widerstandswerte sind die Formeln zur Berechnung des Tastverhältnisses K und der Phasenverschiebung ϕ bekannt: U S,max = U a,maxr 1 +U Ref R 2 R 1 + R 2 U S,min = U a,minr 1 +U Ref R 2 R 1 + R 2 K = ( arcsin 2π ( US,max û e ϕ = 180 ( 1 1 π arcsin ( US,min û e obere Schaltschwelle untere Schaltschwelle ) ( )) US,min + arcsin )) Für gegebene bzw. geforderte Werte (Sollwerte) U a,max = 14,32V U a,min = 12,92V R 1 = 4,71kΩ K S = 0,73 ϕ S = 172 sollen die erforderlichen Werte für R 2 und U Ref ermittelt werden. û e 131

132 3 SciLab Es handelt sich um ein nichtlineares Gleichungssystem, wir suchen eine numerische Lösung. Der x -Vektor mit den gesuchten Größen beinhaltet x = ( x1 x 2 ) = ( R2 U Ref Der Zielgrößenvektor y beinhaltet die auf 0 zu setzenden Größen Die Lösung y = ( y1 y 2 ) ) ( ) K KS = ϕ ϕ S R 2 = 7.24kΩ U Ref = 11,39V finden wir mit der Scilab-Eingabedatei trigger-suche1.sce: 1 Uamax = ; 2 Uamin = ; 3 R1 = e3 ; 4 Ue = 1 3 ; 5 Ks = ; 6 p h i s = ; f u n c t i o n y = t r i g g e r ( x ) 10 Usmax = ( R1 * Uamax + x ( 1 ) * x ( 2 ) ) / ( R1 + x ( 1 ) ) ; 11 Usmin = ( R1 * Uamin + x ( 1 ) * x ( 2 ) ) / ( R1 + x ( 1 ) ) ; 12 y = [ ( a s i n ( Usmax / Ue)+ a s i n ( Usmin / Ue ) ) / ( 2 * % p i ) Ks * (1 a s i n ( Usmin / Ue)/% p i ) p h i s ] ; 14 e n d f u n c t i o n [ x, v, i n f o ] = f s o l v e ( [ 9. 0 e3 ; 1 0 ], t r i g g e r ) ; 17 i f (1 == i n f o ) 18 p r i n t f ( Loesung \ nr2 = %g \ nuref = %g \ n, x ( 1 ), x ( 2 ) ) ; 19 e l s e 20 p r i n t f ( " L e i d e r k e i n e Loesung gefunden! \ n " ) ; 21 end Wichtig ist hier die Wahl eines geeigneten Anfangspunktes, da Scilab abbricht, wenn während der Iteration einer der Werte im Ergebnisvektor komplex ist. Ungeeignet wären z. B. zu kleine Werte für û e, da dann die arcsin-argumente zu groß werden. 132

133 3.14 Beispiele Abbildung 3.16: B-H-Kennlinie Kurveninterpolation mit Natural Splines Dieses Beispiel verwendet das in Abschnitt 3.10 auf Seite 105 installierte nsplines - Paket und setzt voraus, dass dieses bereits geladen wurde. Gegeben sei die B-H-Kennlinie eines permanentmagnetischen Materiales in Form von Messdaten (siehe Tabelle 3.2). Tabelle 3.2: Beispiel-Messdaten H/Acm B/T , , , , ,22 0 1,30 Gewünscht wird eine Interpolation, um folgende Berechnungen durchführen zu können: Welcher magnetische Fluss stellt sich bei einer Feldstärke H = 250Acm 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? 133

134 3 SciLab Ist eine Kurve durch n Messpunkte gegeben, so kann die Kurve durch eine Folge von n 1 Teilstücken dargestellt werden. Die Teilstücke sind dabei kubische Spline- Segmente, also Funktionen dritten Grades: y i (x) = a i (x x i ) 3 + b i (x x i ) 2 + c i (x x i ) + d i x i x < x i+1 bzw. mit vereinfachten Polynomen y i (x) = p i x 3 + q i x 2 + r i x + s i x i x < x i+1 Beide Schreibweisen sind ineinander überführbar. Für jedes Teilstück i werden vier Koeffizienten a i, b i, c i und d i bzw. p i, q i, r i und s i verwendet. Die insgesamt 4(n 1) Koeffizienten werden so gewählt, dass eine Reihe von Bedingungen erfüllt ist: An den inneren Punkten ist der Wert des linken und des rechten Polynomstücks gegeben. Die erste und die zweite Ableitung des linken und rechten Polynoms müssen im Messpunkt gleich sein. An den äußeren Punkten ist der Polynomwert gegeben. Die zweite Ableitung des Polynoms soll 0 sein, d. h. die Kurve setzt sich nach außen linear fort. Diese Bedingungen führen zu 4(n 1) Gleichungen, so dass im Normalfall die Koeffizienten eindeutig bestimmt werden können. Das nsplines-paket erzeugt und verwendet mit den nssp_xxx()-funktionen Matrizen der Form x 1 x 2 p 1 q 1 r 1 s 1 x 2 x 3 p 2 q 2 r 2 s x n 1 x n p n 1 q n 1 r n 1 s n 1 Um einen y-wert zu berechnen wird zunächst das passende Intervall der Matrix gesucht, anschließend werden die gefundenen Koeffizienten für die Berechnung verwendet. 134

135 3.14 Beispiele Im Beispiel wird in den Zeilen eine Matrix mit den Messwerten angelegt, die x-werte (H) stehen in der ersten Spalte, die y-werte (B) in der zweiten. In Zeile 10 wird mit nssp_create() eine Natural-Spline-Matrix für die Messwerte erzeugt, in Zeile 9 wird vereinbart, dass die Variable M1 für diese Matrix eine globale Variable sein soll. Das erste Problem die Berechnung von B für H = 250Acm 1 wird in Zeile 32 gelöst, hier wird mit nssp_value() der y-wert für ein vorgegebenes x bestimmt. Für das zweite Problem ist eine Nullstellenbestimmung erforderlich. Die Suche nach einem x für f (x) = y 0 bzw. die Suche nach einem H für f (H) = B 0 wird umgeformt zu einer Nullstellenbestimmung der Funktion g(x) = f (x) y 0 bzw. g(h) = f (H) B 0. Eine entsprechende Funktion g(), die vom Kennlinienwert 0,8 T abzieht, ist in den Zeilen definiert. In den Zeilen wird sie benutzt, um Problem 2 zu lösen. Als Startpunkt für die Iteration wurde die Mitte des durch die Messpunkte vorgegebenen H-Bereiches gewählt. Problem 3 erfordert eine weitere Natural-Splines-Matrix. Die Suche nach dem Optimum für BH (bzw. xy) erfordert, dass Setzt man die Polynomgleichung 0 = d dx xy ein, so ergibt sich y i = p i x 3 + q i x 2 + r i x + s i 0 = 4p i x 3 + 3q i x 2 + 2r i x + s i Die Funktion h() ist ebenfalls mit einer Natural-Spline-Matrix M2 realisiert. Diese wird aus M1 gewonnen, indem alle p-werte mit 4, alle q-werte mit 3 und alle r- Werte mit 2 multipliziert werden. Die Funktion h zur Berechnung von d(bh) dh in den Zeilen verwendet diese Matrix. In den Zeilen wird die Nullstelle dieser Funktion gesucht und die gefundenen Werte ausgegeben. 135

136 3 SciLab 1 mw = [ ] ; 8 9 g l o b a l M1; 10 M1 = n s s p _ c r e a t e (mw) ; 11 g l o b a l M2; 12 M2 = M1; [ r, c ] = s i z e (M2 ) ; 15 f o r i =1: r 16 M2( i, 3 ) = 4. 0 *M2( i, 3 ) ; 17 M2( i, 4 ) = 3. 0 *M2( i, 4 ) ; 18 M2( i, 5 ) = 2. 0 *M2( i, 5 ) ; 19 end f u n c t i o n [ back ] = g (H) 22 g l o b a l M1; 23 back = n s s p _ v a l u e (M1, H) 0. 8 ; 24 e n d f u n c t i o n f u n c t i o n [ back ] = h (H) 27 g l o b a l M2; 28 back = n s s p _ v a l u e (M2, H ) ; 29 e n d f u n c t i o n p r i n t f ( Problem 1 : \ nh = \ n ) ; 32 p r i n t f ( B = %g \ n, n s s p _ v a l u e (M1, ) ) ; [H, v, i n f o ] = f s o l v e ( [ / 2. 0 ], g ) ; 35 i f ( i n f o == 1) 36 p r i n t f ( Problem 2 : \ nh = %g \ n, H ) ; 37 p r i n t f ( B = %g \ n, n s s p _ v a l u e (M1, H ) ) ; 38 e l s e 39 p r i n t f ( Das Problem 2 k o n n te n i c h t g e l o e s t werden! \ n ) ; 40 end [H, v, i n f o ] = f s o l v e ( [ / 2. 0 ], h ) ; 43 i f ( i n f o == 1) 44 p r i n t f ( Problem 3 : \ nh = %g \ n, H ) ; 45 p r i n t f ( B = %g \ n, n s s p _ v a l u e (M1, H ) ) ; 46 p r i n t f ( BH = %g \ n, abs (H* n s s p _ v a l u e (M1,H ) ) ) ; 47 e l s e 48 p r i n t f ( Das Problem 3 k o n n te n i c h t g e l o e s t werden! \ n ) ; 49 end 136

137 3.15 Xcos Abbildung 3.17: Paletten-Browser 3.15 Xcos Mit Xcos ehemals Scicos können dynamische Systeme modelliert und simuliert werden, sowohl kontinuierliche als auch zeitdiskrete Systeme. Die Eingabe erfolgt dabei GUI-basiert, der gesamte Vorgang ähnelt der Simulation elektrischer Schaltungen. Die Theorie dynamischer Systeme wird hier nicht behandelt, hierzu sei auf entsprechende Vorlesungen (Regelungstechnik, Signale und Systeme) bzw. auf die Fachliteratur verwiesen, z. B. [Lun06] Xcos starten Xcos wird entweder über den Menübefehl Applications Xcos oder durch Eingabe des Kommandos 1 xcos ( ) ; gestartet. Zwei Fenster werden geöffnet: Ein Fenster für das zu simulierende System (im Moment noch mit dem Titel Unbenannt ) und der Paletten-Browser. 137

138 3 SciLab Abbildung 3.18: Leeres Hauptfenster 138

139 3.15 Xcos Abbildung 3.19: Palette Quellen mit markiertem Element Einführungsbeispiel, Grundprinzipien Um das Konzept vorzustellen, wird hier ein Signalgenerator simuliert, der mit einem Oszilloskop verbunden ist. Block-Symbole platzieren In der Palette Quellen wählen wir das Element GENSIN_f, dieses Element ist ein Generator für eine Sinusfunktion, siehe Abb

140 3 SciLab Abbildung 3.20: Block-Symbol wurde platziert Dieses Element ziehen wir in den Arbeitsbereich für unser zu modellierendes System, siehe Abb

141 3.15 Xcos Abbildung 3.21: Bereit zum Verbindung-Ziehen In analoger Weise fügen wir aus der Palette Senke ein Element CSCOPE und aus der Palette Ereignisbehandlung ein Element CLOCK_c hinzu. Verbindungen herstellen Wir wollen nun den Ausgang des Signalgenerators mit dem Eingang des Oszilloskopes verbinden. Der Signalgenerator-Ausgang wird durch die aus dem Block herauszeigende Pfeilspitze am rechten Rand symbolisiert, der Dateneingang des Oszilloskopes durch die in den Block hineinzeigende Pfeilspitze am linken Rand. Bewegen wir den Mauszeiger über den Ausgang, wird der Ausgang grün umrandet, siehe Abb Dies zeigt an, dass wir eine Verbindung von diesem Anschluss aus herstellen können. 141

142 3 SciLab Abbildung 3.22: Ziehen der Verbindungslinie Wir klicken mit der Maus und ziehen die Maus etwas nach rechts. Durch das Ziehen mit der Maus wird eine Verbindungslinie erzeugt, siehe Abb

143 3.15 Xcos Abbildung 3.23: Verbindung kann beendet werden Die Maustaste kann nun losgelassen werden, das Ziehen der Verbindungslinie wird fortgesetzt. Bewegen wir die Maus nun über einen möglichen Anschlusspunkt, so wird wiederum durch eine Umrandung angezeigt, dass hier das Ziehen der Verbindung beendet werden kann, siehe Abb

144 3 SciLab Abbildung 3.24: Verbindung gezogen Mit einem Mausklick wird die Verbindung fertiggestellt, siehe Abb Mausklicks auf Punkte, die keine möglichen Endpunkte sind, erzeugen Knickpunkte. Auf die gleiche Art und Weise verbinden wir den unteren Aktivierungsausgang des CLOCK_c mit dem oberen Aktivierungseingang des CSCOPE. 144

145 3.15 Xcos Abbildung 3.25: Daten- und Aktivierungsleitungen Daten- und Aktivierungsleitungen In Abb sehen wir zwei verschiedene Typen von Verbindungen: Datenverbindung (regular signal) Normale Signale werden standardmäßíg in blauer Farbe dargestellt, die Einund Ausgänge (Pfeilspitzen in schwarzer Farbe) befinden sich links und rechts an den Blocksymbolen. Aktivierungsleitung (activation signal) Aktivierungssignale werden in roter Farbe dargestellt, die Ein- und Ausgänge (Pfeilspitzen in roter Farbe) befinden sich oben und unten an den Blocksymbolen. Über die Aktivierungssignale werden Events (Ereignisse) übertragen, das Eintreffen eines Events löst eine Reaktion beim Empfänger aus. Beim CSCOPE beispielsweise wird für jedes eintreffende Event ein Wertepaar aus Zeitpunkt und Eingangssignalwert gespeichert und in die graphische Darstellung aufgenommen. 145

146 3 SciLab Einstellungen Wir müssen nun noch Konfigurationseinstellungen an den Block-Symbolen vornehmen. Ein Doppelklick auf ein Block-Symbol öffnet die Dialogbox für die Einstellungen. Wir nehmen folgende Einstellungen vor: GENSIN_f: Magnitude: Amplitudenwert, die voreingestellte 1 wird beibehalten. Frequency (rad/s): Die Kreisfrequenz. Wir tragen 2*%pi*1.0e3 ein, um mit einer Frequenz von 1 khz zu arbeiten. Phase (rad): Phasenverschiebung, wir behalten die voreingestellte 0 bei. CLOCK_c: Period: Der Zeitabstand für Events. Wir arbeiten mit einer Frequenz von 1 khz und wollen pro Periode 100 Messwerte aufnehmen lassen. Daher tragen wir hier 1.0e-5 ein. Initialisation Time: Die Startverzögerung. Wir wollen zum Zeitpunkt 0 mit der Datenaufnahme beginnen, daher tragen wir eine 0 ein. CSCOPE: Ymin/Ymax: Der Anzeige-Wertebereich wird auf gesetzt. Refresh period: Um 5 Perioden darzustellen, wird die Zeitauslenkung auf 5e-3 (5 ms) eingestellt. Die restlichen Einstellungen bleiben auf den Standardwerten. Simulationseinstellungen Mit dem Menüpunkt Simulation Einstellungen werden Einstellungen für die Simulation vorgenommen: Finale Integrationszeit: Das Ende des Simulationszeitraumes wird auf 5.0e-3 (5 ms) gesetzt. Die restlichen Einstellungen bleiben auf den Standardwerten. 146

147 3.15 Xcos Abbildung 3.26: Simulationsergebnis Simulation starten Mit dem Menüeintrag Simulation Starten bzw. dem Toolbar-Button Start wird die Simulation gestartet. Die Simulation endet automatisch, wenn die finale Integrationszeit erreicht wurde. Sie kann manuell mit dem Stopp -Button aus der Toolbar abgebrochen werden. Im Ergebnis der Simulation wird die vom Oszilloskop erzeugte Kurve angezeigt, siehe Abb

148 3 SciLab Abbildung 3.27: Variablenname ampl eintragen Konfigurationseinstellungen aus dem Kontext Im Scilab-Hauptfenster führen wir die Anweisung 1 ampl = 0. 8 ; aus, um die Variable ampl anzulegen. Wir doppelklicken das Sinusgenerator-Symbol, um es neu zu konfigurieren. Als Magnitude tragen wir ampl ein, siehe Abb Eine Simulation zeigt, dass jetzt der jeweilige Wert von ampl als Amplitude verwendet wird. Eine Änderung von ampl und erneute Simulation zeigen, dass beim Start jeder Simulation erneut der jeweilige Wert von ampl eingelesen wird. 148

149 3.15 Xcos Abbildung 3.28: Simulations-Kontext festlegen Mit dem Menüpunkt Simulation Kontext setzen wird eine Dialogbox geöffnet, um den Simulationskontext zu beeinflussen. Wir tragen hier 1 ampl = 0. 6 ; ein. Eine Simulation zeigt, dass jetzt dieser Wert für ampl verwendet wird. Wenn wir jetzt im Scilab-Hauptfenster versuchen, die Variable ampl zu ändern, bleiben diese Änderungen für die Simulation wirkungslos. Werden in den Konfigurationseinstellungen Variablen verwendet, sucht Xcos nach diesen Variablen zunächst im Simulationskontext des aktuellen Arbeitsbereiches. Wird die Variable nicht gefunden, wird die Suche in den Kontexten der übergeordneten Arbeitsbereiche fortgesetzt, falls vorhanden, siehe Abschnitt auf der nächsten Seite. Wird die Variable auch hier nicht gefunden, wird der globale Kontext von Scilab benutzt. Mit Simulation Kontext setzen wird der Kontext modifiziert, nicht grundlegend neu aufgebaut. Alle von den Anweisungen in der Kontext-setzen-Dialogbox nicht betroffenen Variablen behalten ihre jeweiligen Werte bei, sie werden nicht gelöscht. 149

150 3 SciLab Hierarchische Struktur Systeme können hierarchisch aufgebaut sein. Dabei werden im Gesamtsystem bzw. in hierarchisch oben angesiedelten Teilsystemen Hierarchie-Block-Symbole eingesetzt, jedem dieser Block-Symbole ist dann wieder eine Schaltung hinterlegt, die in einem eigenen Arbeitsbereich geöffnet werden kann. Im Beispiel wollen wir einen Hierarchie-Block verwenden, der für ein gegebenes Eingangssignal x(t) zwei Ausgangssignale liefert: y 1 (t) = dx dt y 2 (t) = x(t) dx dt Dieser Hiearchieblock erhält sein Eingangssignal vom bereits vorhandenen Signalgenerator, die Ausgangssignale werden wieder auf dem Oszilloskop dargestellt. Wir platzieren zunächst den Signalgenerator GENSIN_f, ein Zweikanaloszilloskop CMSCOPE und einen Taktgenerator CLOCK_c für die Aktivierung des Oszilloskopes. Die Verbindung vom CLOCK_c zum Aktivierungseingang des CMSCOPE wird hergestellt. Aus der Palette Port & Subsystem wird ein Block-Symbol SUPER_f in den Arbeitsbereich gezogen. Dieses Symbol besitzt zu Beginn einen Dateneingang und einen Datenausgang. 150

151 3.15 Xcos Abbildung 3.29: Vorbereitetes System 151

152 3 SciLab Abbildung 3.30: Arbeitsbereich für SUPER_f-Symbol Mit einem Doppelklick auf das Symbol öffnen wir einen Arbeitsbereich, in dem wir dem SUPER_f-Symbol eine Schaltung hinterlegen können. Hier sehen wir zunächst zwei Symbole, einen Eingangsport vom Typ IN_f und einen Ausgangsport vom Typ OUT_f. Beide haben den Zahlenwert 1 eingetragen. 152

153 3.15 Xcos Abbildung 3.31: Teilsystem vollständig eingegeben Da unser hierarchischer Block zwei Ausgänge haben soll, ziehen wir ein weiteres OUT_f-Symbol in den Arbeitsbereich. Am Symbol blinkt ein Ausrufezeichen. Diese Warnung weist darauf hin, dass die Ausgangs-Portnummer 1 bei beiden OUT_F- Symbolen in der Schaltung verwendet wird. Daher doppelklicken wir auf das OUT_f- Symbol und konfigurieren den Eintrag Port number zu 2. Die Eigenschaft Port number gibt die Positionsnummer des Ports am SUPER_f-Symbol an, gezählt von oben nach unten. Wir fügen nun aus der Palette Zeitkontinuierliche Systeme ein Symbol DERIV für die Ableitung und aus der Palette Mathematische Operationen ein Symbol PROD_f für die Multiplikation hinzu. Anschließend werden die Verbindungen hergestellt. 153

154 3 SciLab Abbildung 3.32: Vollständiges System Wird der Arbeitsbereich für das Teilsystem geschlossen, wird im Hauptarbeitsbereich das Block-Symbol SUPER_f aktualisiert, es hat jetzt zwei Ausgangspins. Wir können nun die Verbindungen vervollständigen. Für das CMSCOPE stellen wir als Ymin vector und als Ymax vector ein. Die Vektoren enthalten jeweils an erster Stelle den entsprechenden Wert für Eingangsport 1, danach folgt der Wert für Eingangsport 2. Die Refresh period wird auf 5e-3 5e-3 gesetzt. Für eine Simulation über 5 ms erhalten wir Simulationsergebnisse wie in Abb auf der nächsten Seite. 154

155 3.15 Xcos Abbildung 3.33: Simulationsergebnisse 155

156 3 SciLab Abbildung 3.34: Verwendung von MUX und DEMUX Vektoren, MUX, DEMUX Signale können zu Vektoren zusammengefasst werden, dies entspricht dem Zusammenfassen von Leitungen zu Bussen in Elektronik-CAD-Programmen. Zur Demonstration erweitern wir das vorangegangene Beispiel um je ein MUX- und ein DEMUX- Symbol aus der Palette Signal-Routing, siehe Abb Die beiden Ausgänge unseres hierarchischen Blockes werden durch den MUX zu einem Vektor zusammengefasst. Durch den DEMUX wird der Vektor wieder in zwei einzelne Signale aufgesplittet, diese werden an das CMSCOPE-Symbol angeschlossen. MUX und DEMUX entsprechen in ihrer Funktion nicht den aus der digitalen Schaltungstechnik bekannten Multiplexer und Demultiplexer (deutlich sichtbar an den nicht vorhandenen Adresseingängen) sondern eher den aus Elektronik-CAD-Programmen bekannten Bus-Rippern zum Anschließen einzelner Signale an einen Bus. Die Anzahl an MUX-Eingängen bzw. DEMUX-Ausgängen ist konfigurierbar. 156

157 3.15 Xcos Abbildung 3.35: Vektor an CSCOPE angeschlossen Wir entfernen nun den DEMUX und verwenden ein CSCOPE anstelle des CMS- COPE. Der MUX-Ausgang wird direkt mit dem CSCOPE-Eingang verbunden, siehe Abb Nachdem am CSCOPE eine Refreshzeit von 5 ms und ein Wertebereich eingestellt wurde, ergibt die Simulation Ergebnisse wie in Abb auf der nächsten Seite. Wird ein Vektor an einen Oszilloskop-Eingang angeschlossen, werden alle Signale des Vektors im gleichen Diagramm gezeichnet. 157

158 3 SciLab Abbildung 3.36: Simulationsergebnis 158

159 3.15 Xcos Abbildung 3.37: Elektronische Schaltung Physikalische Größen als implizite Signale In den bisherigen Beispielen dieses Abschnittes waren alle Blockschaltbilder Strukturbilder im Sinne der Systemtheorie. Die Blöcke sind dabei rückwirkungsfrei, d. h. Vorgänge innerhalb eines Blockes ändern das Eingangssignal nicht. Xcos kann nicht nur mit Signalen umgehen, sondern auch mit physikalischen (z. B. elektrischen) Größen und Bauelementen. Bei diesen ist die Rückwirkungsfreiheit nicht gegeben. Beinhaltet beispielsweise eine Teilschaltung eine Spannungsquelle mit Innenwiderstand, so ist die Ausgangsspannung der Teilschaltung stark von den anderen an den Ausgang angeschlossenen Blöcken abhängig. Zur Abgrenzung von normalen Signalen werden derartige physikalische Größen, die als Signal interpretierbar sind, als implizite Signale bezeichnet. In Blockschaltbildern muss genau abgegrenzt werden, wo mit physikalischen Größen gearbeitet wird und wo Signale entsprechend der Systemtheorie verwendet werden. Aus diesem Grund sind die impliziten Ein- und Ausgänge von Block-Symbolen anders als die Ein- und Ausgänge für normale Signale gestaltet (quadratisch). Zur Umwandlung von Signalen und implizite Signale und umgekehrt sind spezielle Bauelemente vorgesehen (gesteuerte Spannungs- und Stromquellen sowie Spannungs- und Stromsensoren). Für die Schaltung entsprechend Abb wurden folgende Elemente aus der Pa- 159

160 3 SciLab Abbildung 3.38: Simulationsergebnis lette Elektrisch verwendet: CVS Ground Resistor VoltageSensor Spannungsgesteuerte Spannungsquelle Massesymbol Widerstand Rückwandlung des Spannungswertes in ein Signal Die Widerstände wurden mit dem R -Wert 1.0e3 auf 1 kω konfiguriert. Bei der Simulation erscheinen zunächst Informationsfenster, die darauf hinweisen, dass implizite Signale verwendet werden und deshalb das Blockschaltbild für Lösung mit impliziten Signalen compiliert wird. Abb zeigt das Ergebnis der Simulation. 160

161 3.15 Xcos Abbildung 3.39: Geänderte Schaltung In Abb fügen wir einen weiteren 1 kω-widerstand hinzu. Wie zu erwarten sinkt durch die Parallelschaltung die gemessene Spannung. 161

162 3 SciLab Abbildung 3.40: Simulationsergebnisse 162

163 Ausgewählte Blöcke aus den Paletten 3.15 Xcos Die verfügbaren Block-Symbole für Xcos sind in Paletten gruppiert. Nach Auswahl einer Palette können dann Block-Symbole per Drag-and-Drop in das zu modellierende System gezogen werden oder über Menü- bzw. Kontextmenü-Befehle. In diesem Abschnitt werden nicht alle Symbole behandelt, sondern nur einige ausgewählte Symbole vorgestellt. Die Block-Symbole in den Paletten sind mit einem Symbol und einem Namen versehen (z. B. CMSCOPE ). In der Scilab-Hilfe kann nach diesem Namen gesucht werden, um Informationen zum Block-Symbol und all seinen Konfigurationseinstellungen zu erhalten. Signal-Quellen CONST_m (Palette Quellen ) gibt am Ausgang einen Konstanten Wert bzw. eine Matrix konstanter Werte aus. TIME_f (Palette Quellen ) liefert den Zahlenwert der aktuellen Simulationszeit. GENSIN_f (Palette Quellen ) gibt ein Sinussignal aus. FROMWSB (Palette Quellen ) erstellt einen Signalverlauf aus Zeit-Wert-Paaren, die im Scilab-Workspace in Variablen gespeichert wurden. Verschiedene Methoden zur Interpolation zwischen den Stützstellen sind verfügbar. CURV_f (Palette Quellen ) erzeugt ein Signal aus einer Tabelle mit Zeit-Wert-Paaren. Zwischen den gegebenen Punkten wird linear interpoliert. Die Eingabe erfolgt in einem grafischen Editor. STEP_FUNCTION (Palette Quellen ) schaltet zum Zeitpunkt t 0 vom Startwert s 0 auf den Endwert s f um. SAWTOOTH_f (Palette Quellen ) erzeugt ein Sägezahn-Signal. Die Quelle wird über einen Aktivierungseingang gesteuert. Bei jedem Aktivierungs-Event wird das Ausgangssignal auf 0 gesetzt und steigt wieder mit dem Anstieg 1 s. Für die Gewinnung eines normalen Sägezahnsignales kann der Aktivierungseingang mit dem Ausgang eines CLOCK_c oder SampleCLK verbunden werden. GENSQR_f (Palette Quellen ) erzeugt ein Signal, dass bei jedem Aktivierungs-Event zwischen M und +M Konstante Simulationszeit Sinus Stützstellen aus Scilab- Variablen Stützstellen graphisch eingeben Sprung Sägezahn Rechteck 163

164 3 SciLab umschaltet. Für die Gewinnung eines Rechtecksignales kann der Aktivierungseingang mit dem Ausgang eines CLOCK_c oder SampleCLK verbunden werden. Rampe Takt Abtast- Takt NEGTOPOS_f, POSTONEG_f, GENERAL_f (Palette Erkennung eines Nulldurchgangs)) liefern Events auf dem Aktivierungsausgang, wenn das Eingangssignal die 0 steigend, fallend bzw. überhaupt durchschreitet 1. Nulldurchgangserkennung... für mehrere Signale Endzeitpunkt Breakpoint RAMP (Palette Quellen ) zeichnet eine Rampe. Diese hat bis zum Startzeitpunkt t 0 einen vorgegebenen Wert s 0 und steigt dann mit dem konstanten Anstieg k. Quellen für Aktivierungs-Signale CLOCK_c (Palette Quellen ) erzeugt eine periodische Folge von Aktivierungs-Events, Startzeit und Periodendauer können konfiguriert werden. SampleCLK (Palette Quellen ) erzeugt ebenfalls eine periodische Folge von Aktivierungs-Events, Startzeit und Periodendauer können konfiguriert werden. Der Unterschied zu CLOCK_c besteht darin, dass alle SampleCLK synchron arbeiten. ZCROSS_f (Palette ) liefert für mehrere Eingangssignale dann ein Event auf dem Aktivierungsausgang, wenn alle Eingangssignale die 0 durchschreiten. Simulationseinstellungen, Steuerung der Simulation ENDBLK (Palette Senken ) ist ein Block ohne Ein- oder Ausgänge. In den Konfigurationseinstellungen kann der Endzeitpunkt der Simulation festgelegt werden, dies überschreibt die Programm-Einstellungen. HALT_f (Palette Senken ) kann zum Anhalten der Simulation genutzt werden. Erhält das Symbol am Aktivierungseingang ein Event, wird die Simulation angehalten. Die Simulation kann dann entweder fortgesetzt oder abgebrochen werden. 1 für GENERAL_f ist diese Auskunft nicht gesichert, da unter Scilab die Online-Hilfe keine Beschreibung dieses Block-Symboles enthält 164

165 3.15 Xcos Hierchische Blockschaltbilder, Übersichtlichkeit SUPER_f (Palette Port & Subsystem ) symbolisiert ein Teil-Modell, das in einem eigenen Arbeitsbereich geöffnet werden kann. In diesem Arbeitsbereich werden dann die nachfolgenden Elemente IN_f, OUT_f, INIMPL_f, OUTIMPL_f, CLKINV_f und CLKOUT_f verwendet. IN_f, OUT_f (Palette Port & Subsystem ) sind Ein- und Ausgänge für normale (explizite) Signale. Die Ports sind mit Nummern versehen, diese Nummern geben die Position des entsprechenden Ports am SUPER_f-Symbol an (mit 1 beginnend von oben nach unten). INIMPL_f, OUTIMPL_f (Palette Port & Subsystem ) sind Ein- und Ausgänge für implizite Signale (z. B. elektrische Größen). Die entsprechenden Ports am SUPER_f-Blocksymbol sind quadratisch ausgeführt, um sie optisch von normalen (expliziten) Signalen zu unterscheiden. CLKINV_f, CLKOUTV_f (Palette Port & Subsystem ) sind Ein- und Ausgänge für Aktivierungssignale. MUX, DEMUX, EXTRACTOR (Palette Signal-Routing ) fassen mehrere Signale zu einem Vektor zusammen bzw. trennen einen Vektor wieder in mehrere einzelne Signale auf. Damit können Verbindungen für eine größere Anzahl von Signalen hergestellt werden, indem nur eine einzige Verbindungslinie gezogen wird. Mit einem EXTRACTOR kann ein einzelnes Signal aus dem Vektor abgegriffen werden. Wie man bereits an den fehlenden Adresseingängen sieht, handelt es sich hier nicht um Multiplexer und Demultiplexer, wie sie aus der digitalen Schaltungstechnik bekannt sind 2. Die Funktionalität ist vielmehr vergleichbar mit dem Vorgehen in Elektronik-CAD-Software, wo ebenfalls aus Gründen der Übersichtlichkeit mehrere Netze zu einem Bus zusammengefasst werden und einzelne Netze über Bus-Ripper mit jeweils einem bestimmten Netz des Busses verbunden werden können. Teilschaltung Ein- und Ausgänge... für implizite Signale... für Aktivierungs- Signale Signalvektoren 2 Hierfür gibt es M_SWITCH aus der Palette Signal-Routing. 165

166 3 SciLab Querverbinder... für implizite Signale... für Aktivierungs- Signale GOTO, FROM, GotoTagVisibility (Palette Signal-Routing ) stellen für normale (explizite) Signale Verbindungen zwischen weit entfernten Modellteilen her, ohne dass eine Verbindungslinie gezogen wird. Dies kann u. U. die Übersichtlichkeit erhöhen. Als Tag muss ein Name konfiguriert werden. Dieser gibt an, welches GOTO mit welchem FROM verbunden ist. Mehrere FROM-Blocksymbole können mit einem GOTO verbunden sein. Die Funktionalität ist vergleichbar mit der von Cross-Sheet-Connectoren in Schaltungssimulations- und Elektronik-CAD-Programmen. Der Sichtbarkeitsbereich eines GOTO kann durch ein GotoVisibilityTag festgelegt werden. Stehen in einem (Sub-)System ein GotoVisibilityTag und ein FROM auf denselben Tag-Namen konfiguriert, so sehen alle FROM-Blocksymbole in diesem System und allen Subsystemen mit dem selben Tag-Namen dieses FROM, jedoch keine gleichnamigen FROM in Hierarchie-Ebenen weiter oberhalb. GOTOMO, FROMMO, GotoTagVisibilityM (Palette Port & Subsystem ) stellen für implizite Signale Verbindungen zwischen weit voneinander entfernten Modellteilen her, ohne dass eine Verbindungslinie gezogen wird. Auch hier wird über ein Tag festgelegt, welches GOTOMO mit welchem FROMMO verbunden ist. Der Sichtbarkeitsbereich für ein GOTOMO kann über ein GotoTagVisibilityM festgelegt werden. CLKGOTO, CLKFROM, CLKGotoTagVisibility (Palette Ereignis-Behandlung ) stellen für Aktivierungssignale Verbindungen zwischen weit voneinander entfernten Modellteilen her, ohne dass eine Verbindungslinie gezogen wird. Der Sichtbarkeitsbereich für ein CLKGOTO kann über ein CLKGotoTagVisibility festgelegt werden. 166

167 3.15 Xcos Mathematische Operationen EXPRESSION (Palette Benutzerdefinierte Funktionen ) verwendet mathematische Ausdrücke (Berechnungsterme). Die Anzahl der Eingänge ist wählbar, die verschiedenen Eingangssignale gehen als u1, u2... in den Berechnungsterm (z. B. 3.0*u1^2+5.0*u2 ) ein. SUM_f (Palette Mathematische Operationen ) addiert zwei oder drei Signale. PROD_f (Palette Mathematische Operationen multipliziert zwei Signale. GAINBLK_f (Palette Mathematische Operationen ) multipliziert das Eingangssignal mit einer einstellbaren Konstante. INVBLK (Palette Mathematische Operationen ) bildet den Reziprokwert des Eingangssignales. ABS_VALUE (Palette Mathematische Operationen ) bildet den Betrag. SINBLK_f (Palette Mathematische Operationen ) bildet den Sinus des Signalwertes. COSBLK_f (Palette Mathematische Operationen ) bildet den Kosinus des Eingangssignalwertes. TANBLK_f (Palette Mathematische Operationen ) berechnet y = tan u. TRIGFUN (Palette Mathematische Operationen ) kann verschiedene trigonometrische Funktionen des Eingangssignales berechnen (Funktionsauwahl konfigurierbar). POWBLK_f (Palette Mathematische Operationen ) bildet den Wert u a für das Eingangssignal u. Der Exponent a ist konfigurierbar. EXPBLK_m (Palette Mathematische Operationen ) bildet den Wert a u für das Eingangssignal u. Die Konstante a ist konfigurierbar. LOGBLK_f (Palette Mathematische Operationen ) ermittelt den Logarithmus des Eingangssignales zu einer konfigurierbaren Basis. SQRT (Palette Mathematische Operationen ) berechnet die Quadratwurzel. Math. Ausdruck Addieren Multiplizieren Verstärkung Reziprok Betrag Sinus Kosinus Tangens Trigonometrische Funktionen Potenz u a Potenz a u Logarithmus Wurzel 167

168 3 SciLab Komplexe Zahlen Komplexe Zahlen Vorzeichen Ableitung Integration Verzögerung konstant Verzögerung variabel MATMAGPHI (Palette Mathematische Operationen ) wandelt komplexe Werte in Betrag und Amplitude bzw. zurück. MATZREIM (Palette Mathematische Operationen ) zerlegt komplexe Zahlen in Realteil und Imaginärteil bzw. erzeugt komplexe Zahlen aus Realteil und Imaginärteil. SIGNUM (Palette Mathematische Operationen ) bestimmt das Vorzeichen des Eingangssignales und gibt am Ausgang eine 1, 0 oder -1 aus. DERIV (Palette Zeitkontinuierliche Systeme ) bildet die zeitliche Ableitung des Eingangssignales. INTEGRAL_f, INTEGRAL_m (Palette Zeitkontinuierliche Systeme ) integriert den zeitlichen Verlauf des Eingangssignales. Die Integrationskonstante (Ausgangswert für t = 0) ist konfigurierbar. INTEGRAL_m verfügt über zusätzliche optionale Funktionen, z. B. Begrenzung des Ausgangssignales auf einen bestimmten Wertebereich. Weiterhin kann für INTEGRAL_m eine Option With re-initialization aktiviert werden. Damit erhält das Symbol einen Aktivierungseingang, über den der Integrierer durch Aktivierungs-Events wieder auf den Startwert zurückgesetzt werden kann. TIME_DELAY (Palette Zeitkontinuierliche Systeme ) gibt das Eingangssignal verzögert um eine konstante Zeit aus. VARIABLE_DELAY (Palette Zeitkontinuierliche Systeme ) gibt das erste Eingangssignal verzögert aus, die Verzögerung richtet sich nach dem zweiten Eingangssignal: y(t) = u(t τ(t)). 168

169 3.15 Xcos Zeitkontinuierliche Systeme PID (Palette Zeitkontinuierliche Systeme ) implementiert einen PID-Regler: PID- Regler u(t) = k p e(t) + k i Konfigurierbar sind k p, k i und k d. t 0 edτ + k d de dt CLSS (Palette Zeitkontinuierliche Systeme ) implementiert ein Zustandsraummodell für ein dynamisches System: x = A x + B u y = C x + D u Zustandsraummodell x 0 = x (0) Konfigurierbar sind A, B, C, D und x 0. TCLSS (Palette Zeitkontinuierliche Systeme ) implementiert ein dynamisches System mit Sprüngen. Gegenüber dem CLSS besitzt das TCLSS einen zusätzlichen Aktivierungseingang und einen zusätzlichen Dateneingang. Bei jedem am Aktivierungseingang eintreffenden Event wird x = u 2 gesetzt, d. h. das System springt in den am Dateneingang 2 angegebenen Zustand. CLR (Palette Zeitkontinuierliche Systeme ) implementiert ein dynamisches System, das mittels der Laplace-transformierten Differentialgleichung gegeben ist (rationale Übertragungsfunktion):... mit Sprüngen rationale Übertragungsfunktion d n y a n dt n + a d n 1 y n 1 dt n a d q u 0 y = b q dt q + b d q 1 u q 1 dt q b 0 u (a n p n + a n 1 p n a 0 )Y (p) = (b q p q + b q 1 p q b 0 )U(p) Y (p) = b qp q + b q 1 p q b 0 a n p n + a n 1 p n a 0 U(p) Eingegeben werden die Polynome für Zähler (Numerator) und Nenner (Denominator), dabei wird anstelle von p das im englischsprachigen Raum für diesen Zweck gebräuchliche s benutzt. Der Grad des Zählerpolynomes muss kleiner oder gleich dem Grad des Nennerpolynomes sein (q n). 169

170 3 SciLab Quantisierung Sättigung Begrenzung Anstiegs- Limit Hysterese Totbereich Getriebe mit Spiel Diskontinuitäten QUANT_f (Palette Diskontinuitäten ) quantisiert das Eingangssignal. SATURATION (Palette Diskontinuitäten ) begrenzt das Ausgangssignal auf einen bestimmten Wertebereich. Innerhalb dieses Wertebereiches folgt das Ausgangssignal dem Eingangssignal. RATELIMITER (Palette Diskontinuitäten ) gibt das Eingangssignal auf dem Ausgang wieder, dabei wird jedoch der Anstieg limitiert. Ändert sich das Eingangssignal zu schnell, so folgt das Ausgangssignal dem Eingangssignal mit der maximalen bzw. minimalen Anstiegsgeschwindigkeit, bis es das Eingangssignal wieder erreicht hat. Diese Operation ist vergleichbar mit der slew rate am Ausgang von Operationsverstärkern. HYSTERESIS (Palette Disontinuitäten ) verhält sich wie ein Ein-/Aus-Schalter mit Hysterse. Das Ausgangssignal schaltet um auf den Ein -Wert, wenn das Eingangssignal eine obere Schaltschwelle überschreitet und schaltet um auf den Aus -Wert, wenn das Eingangssignal eine untere Schaltschwelle unterschreitet. DEADBAND (Palette Diskontinuitäten ) implementiert einen Totbereich um den Nullpunkt. Außerhalb des Totbereiches folgt das Ausgangssignal den Änderungen des Eingangssignales. Liegt das Eingangssignal innerhalb des Totbereiches bleibt das Ausgangssignal konstant 0. BACKLASH (Palette Diskontinuitäten ) verhält sich ähnlich wie ein mechanisches Getriebe mit Spiel. Bewegt sich das Eingangssignal in eine Richtung, folgt das Ausgangssignal. Bei einem Richtungswechsel des Eingangssignales bleibt das Ausgangssignal konstant, bis der Richtungswechsel eine bestimmte Differenz (Gap) überschritten hat und folgt dann der Bewegung. 170

171 3.15 Xcos Signal-Fluss M_SWITCH (Palette Signal Routing ) arbeitet als Multiplexer. Der erste Eingang ist der Adresseingang. Der Wert legt fest, welcher der anderen Eingänge (Dateneingänge) zum Ausgang durchgeschalten wird. Konfigurierbar sind die Anzahl der Eingänge, Beginn der Zählung bei 0 oder 1 und die Rundungsregel, um aus dem Signalwert am Adresseingang einen ganzzahligen Wert zu erhalten. RELAY_f (Palette Signal Routing ) verhält sich ähnlich wie ein Relais. Es wird immer nur einer der Eingänge zum Ausgang durchgeroutet. Bei Events auf Aktivierungseingang i wird umgeschaltet, so dass ab dem Event-Zeitpunkt der Dateneingang i durchgeschalten ist. NRMSOM_f (Palette Signal Routing ) ist auf eine beliebige Anzahl Eingänge konfigurierbar. Zum Ausgang durchgeschalten ist immer der Eingang, an dem zuletzt eine Änderung auftrat. SWITCH_f (Palette Signal Routing ) schaltet jeweils einen seiner Eingänge zum Ausgang durch. Es muss konfiguriert werden, welcher Ausgang durchgeschalten wird. SWITCH2_m (Palette Signal Routing ) schaltet entweder den ersten oder dritten Eingang (Dateneingänge) auf den Ausgang durch, abhängig vom zweiten Eingang (Steuer- bzw. Adresseingang). Dabei wird der Eingangswert des Steuereingangs mit einem Schwellwert verglichen. Dabei kann eine der Bedingungen Signalwert größer als oder gleich dem Schwellwert, Signalwert größer als der Schwellwert oder Signalwert ungleich Schwellwert ausgewählt werden. Multiplexer Multi- Port- Relais letztes Ergebnis manueller Schalter Multiplexer mit Schwellwert 171

172 3 SciLab Oszilloskop Mehrkanal- Oszilloskop xy- Schreiber xyz- Schreiber xy- Oszilloskop xyz- Oszilloskop Zahlenwert- Anzeige Ausgabe und Anzeige CSCOPE (Palette Senken ) implementiert ein einkanaliges Oszilloskop. Für jedes am Aktivierungseingang auftretende Event wird ein Datensatz aus Zeitwert und Signalwert aufgenommen und zur Graphik hinzugefügt. Immer dann, wenn der erste Datenwert nach Vollendung einer Refresh period vorliegt, wird das bisherige Bild gelöscht und mit dem Zeichnen eines neuen Bildes begonnen. Im Normalfall wird der Aktivierungseingang mit dem Ausgang eines CLOCK_c oder SampleCLK verbunden, um eine periodische Datenaufnahme zu erreichen. CMSCOPE (Palette Senken ) verhält sich wie ein Mehrkanal-Oszilloskop. Die Anzahl der Eingänge wird durch die Anzahl an Einträgen im Feld Input ports sizes festgelegt. An jeden der Eingänge kann ein Vektor angeschlossen werden, der Wert in Input ports sizes legt die Größe des jeweiligen Vektors fest. Für jeden Eingang muss der Minimalwert, der Maximalwert und die Refresh- Zeit vorgegeben werden, daher sind Ymin vector, Ymax vector und Refresh period Zeilenvektoren mit derselben Länge wie Input ports sizes. CSCOPXY (Palette Senken ) verwendet die Signale an den Eingängen 1 und 2 als x-y-werte und erstellt eine Graphik. Die gesamte Zeichnung bleibt dauerhaft erhalten. CSCOPXY3D (Palette Senken ) verwendet die Signale an den Eingängen 1, 2 und 3 als Raumkoordinaten und erstellt eine Graphik. Die gesamte Zeichnung bleibt dauerhaft erhalten. CANIMXY (Palette Senken ) verwendet die Signale an den Eingängen 1 und 2 als x-y-wwerte und erstellt eine Graphik. Die Darstellung enthält nur die letzten n Datenpunkte (konfigurierbar unter Buffer size ). Dies kann für Animationen genutzt werden. CANIMXY3D (Palette Senken ) verwendet die Signale an den Eingängen 1, 2 und 3 als x-y-z-wwerte und erstellt eine Graphik. Die Darstellung enthält nur die letzten n Datenpunkte (konfigurierbar unter Buffer size ). Dies kann für Animationen genutzt werden. AFFICH_m (Palette Senken ) zeigt den als Eingangssignal vorliegenden Wert während der Simulation im Block-Symbol an. 172

173 3.15 Xcos TOWS_c (Palette Senken ) überträgt Werte des Eingangssignales in den Scilab-Workspace. Dort können Sie nach dem Ende der Simulation genutzt werden oder bei Unterbrechung abgefragt. WFILE_f (Palette Senken ) schreibt Daten in eine Datei. WRITEC_f (Palette Senken ) schreibt Binärdaten in eine Datei. Werte in Scilab- Variablen Datei schreiben Datei schreiben 173

174 3 SciLab Palette Elektrisch gesteuerte Spannungsquelle gesteuerte Stromquelle Konstantspannungsquelle Sinusspannung AC- Spannungsquelle variable AC- Spannungsquelle Masse Spannungssensor Stromsensor Potentialsensor CVS realisiert eine gesteuerte Spannungsquelle. Das Signal an Eingang 1 gibt den Spannungswert in Volt vor. Der Ausgang der Spannungsquelle ist der Minus- Pol, Eingang 2 kenntlich als impliziter Eingang ist der Plus-Pol. CCS ist eine gesteuerte Stromquelle. Das Signal an Eingang 1 gibt den Stromwert in Ampere vor. Der Strom fließt zum Ausgang der Quelle hinaus und am Eingang 2 kenntlich als implizierter Eingang wieder hinein. ConstantVoltage ist das Symbol für eine Konstantspannungsquelle. Der Eingang ist der Plus-Pol, der Ausgang der Minus-Pol. SineVoltage gibt eine sinusförmige Wechselspannung aus. Konfiguriert werden Amplitude, Phase, Frequenz, Spannungsoffset und Zeitversatz (Verzögerung). Diese Quelle ist für Signalspannungen gedacht. VsourceAC ist eine Wechselspannungsquelle. Amplitude und Frequenz können konfiguriert werden. Diese Quelle ist für Versorgungsspannungen gedacht. Zu beachten ist, dass bei Versorgungsspannungen normalerweise der Effektivwert angegeben wird (z. B. 220-V-Netz), hier aber die Amplitude konfiguriert werden muss. VVsourceAC realisiert eine variable Wechselspannungsquelle. Die Frequenz wird konfiguriert, die Amplitude wird über den Steuereingang gesteuert (der Signalwert gibt den Zahlenwert der Amplitude in Volt vor). Ground ist das Masse-Symbol. VoltageSensor wandelt ein implizites Signal (eine Spannung) zurück in ein explizites Signal. Der Wert des Ausgangssignales ist der Zahlenwert der gemessenen Spannnung. CurrentSensor wandelt einen Strom in ein explizites Signal. Der Ausgangssignal-Wert ist der Zahlenwert des in Ampere gemessenen Stromes. PotentialSensor misst die Spannung von einem Knoten der Schaltung zur Masse und gibt als Signalwert den Zahlenwert des gemessenen Potentials (in Volt) aus. 174

175 3.15 Xcos Capacitor Kondensator. Resistor Widerstand. Inductor Induktivität (Spule). Diode Diode. Gyrator Kondensator Widerstand Induktivität Diode Gyrator i 1 = G 2 u 2 i 2 = G 1 u 1 IdealTransformer Idealer Transformator. OpAmp Operationsverstärker. NPN, PNP npn- bzw. pnp-transistoren. NMOS, PMOS NMOS- bzw. PMOS-Feldeffekt-Transistoren. Switch Hat das Signal am expliziten Eingang einen positiven Wert, nimmt der Schalter den Widerstands-Wert für den EIN-Zustand an, ansonsten den Widerstandswert für den AUS-Zustand (beide Widerstandswerte sind konfigurierbar). VariableResistor Der Widerstandswert (in Ω) wird durch den Wert des expliziten Eingangssignales vorgegeben Transformator OPV Transistor FET Schalter Variabler Widerstand Auf Xcos sollte für die Simulation elektrischer/elektronischer Schaltungen nur zurückgegriffen werden, wenn es um die Einbettung einer elektronischen Schaltung in ein Gesamtsystem geht. 175

176 3 SciLab Aus mehreren Gründen sollte für eine reine Schaltungssimulation auf geeignete Elektronik-CAD-Software (im Normalfall PSPICE-basierend) zurückgegriffen werden: Der Simulator arbeitet von vornherein mit elektrischen Größen, es ist keine Trennung zwischen Teilen der Simulation mit expliziten Signalen und Teilen der Simulation mit impliziten Signalen erforderlich. In Xcos sind nur allgemeine Modelle für NPN, PNP, NMOS und PMOS verfügbar, an jedem Block-Symbol müssen daher etliche Details konfiguriert werden. CAD-Programme bzw. Programme zur Schaltungssimulation sind mit Bauelementebibliotheken ausgestattet, die nicht nur ein allgemeines Transistormodell enthalten sondern auch spezielle Modelle, die fertig konfiguriert sind und anhand der Transistorbezeichnung (z. B. BC550C ) ausgewählt werden können. Für NMOS und PMOS weicht das in Xcos verwendete Modell stark von dem in PSPICE verwendeten Modell ab, darüber hinaus berücksichtigen die Xcos- Modelle keine Kapazitäten. Da Bauelementehersteller meist PSPICE-Modelle für ihre Bauelemente veröffentlichen, müssten die erforderlichen Einstellungen in Xcos nicht nur eingegeben sondern zunächst erst einmal ermittelt werden. 176

177 3.15 Xcos Benutzerdefinierte Blöcke EXPRESSION (Palette Benutzerdefinierte Funktionen ) verwendet mathematische Ausdrücke (Berechnungsterme). Die Anzahl der Eingänge ist wählbar, die verschiedenen Eingangssignale gehen als u1, u2... in den Berechnungsterm (z. B. 3.0*u1^2+5.0*u2 ) ein. CBLOCK, c_block (Palette Benutzerdefinierte Funktionen ) kann benutzt werden, um in C geschriebene Funktionen zu verwenden. In der Online-Hilfe ist CBLOCK als neu markiert und sollte deshalb bevorzugt genutzt werden. fortran_block (Palette Benutzerdefinierte Funktionen ) bindet in Fortran geschriebene Funktionen ein. MBLOCK (Palette Benutzerdefinierte Funktionen ) modelliert einen Block durch ein Modelica-Programm. Math. Ausdruck C Fortran Modelica 177

178 3 SciLab f (x) dx dt x(t) Abbildung 3.41: Nichtlineare DGL... f ( d n 1 x dt n 1,..., dx dt,x )... d n x dt n d n 1 x dt n 1 dx dt x(t) Abbildung 3.42: DGL höherer Ordnung Nichtlineare DGL mit RB Graphische Darstellungen für nichtlineare Differentialgleichungen bzw. DGL höherer Ordnung mit Randbedingungen können mit Xcos erstellt werden. Dabei werden DGL erster Ordnung bzw. höherer Ordnung so umgestellt, dass man dx dt = f (x) bzw. d n ( x d n 1 ) dt n = f x,...,dx dtn 1 dt,x erhält. Diese Gleichungen werden durch Blockschaltbilder entsprechend den Abbildungen 3.41 und 3.42 dargestellt. Durch ein oder mehrere Integrierer in einer Kette werden aus der Ableitung höchster Ordnung die Ableitungen niederer Ordnung und das Signal x(t) erzeugt. Die Ableitung höchster Ordnung wird von einem Funktionsblock bereitgestellt, dieser erhält als Eingangssignale das Signal x(t) und ggf. die Ableitungen niederer Ordnung. Als Funktionsblock kommt häufig ein EXPRESSION-BLOCK oder ein SUPER_f-Block zum Einsatz. Für jeden Integrierer muss der Startwert (die Integrationskonstante) bekannt sein, d. h. es müssen ausreichend Randbedingungen bekannt sein. 178

179 3.15 Xcos Beispiele Abbildung 3.43: Blockschaltbild Nichtlineare Differentialgleichung Dieses Beispiel wurde aus [urn] entnommen. Für das Randwertproblem dx dt = x x2 x(0) = 1 2 ist der zeitliche Verlauf von x als graphische Darstellung gesucht. Im Blockschaltbild wird zunächst ein Integrator-Symbol platziert. Der Integrator erhält dx dt als Eingangssignal und gibt x als Ausgangssignal aus. Das Eingangssignal dx dt wird von einem SUPER_f-Block gebildet, dabei wird der aktuelle Wert von x verwendet. Der SUPER_f-Block realisiert die Berechnung von x x 2. Folgende Symbole werden im Blockschaltbild verwendet, siehe Abb. 3.43: INTEGRAL_f (Zeitkontinuierliche Systeme) für die Integration. Als Initial state wird 0.5 eingegeben, die Integrationskonstante. SUPER_f (Benutzerdefinierte Funktionen), um den Wert zu bilden. dx dt = x x 2 179

180 3 SciLab CSCOPE (Senken) als Oszilloskop. Konfiguriert wird ein Beobachtungsbereich 0 < 2 und eine Refresh period von 5. SampleCLK (Quellen) für die Ansteuerung des CSCOPE. Konfiguriert wird eine Sample time von 1e-3 für 1 ms. ENDBLK (Ereignis-Behandlung), um den Simulationszeitraum auf 5 s festzulegen. Im Blockschaltbild, das dem SUPER_f-Block hinterlegt ist, werden folgende Symbole verwendet, siehe Abb auf der nächsten Seite: IN_f, OUT_f wurden automatisch eingefügt, Eingang und Ausgang des Super- Blockes. PROD_f (Mathematische Operationen), um x 2 zu bilden. GAINBLK_f (Mathematische Operationen), um x 2 mit dem Faktor -1 zu multiplizieren. SUM_f (Mathematische Operationen), um die Summe aus x und x 2 zu bilden. CONST_m (Üblicherweise verwendete Blöcke), um den dritten Eingang des SUM_f mit einer konstanten 0 zu versehen. Bei der Simulation ergibt sich ein Ergebnis entsprechend Abb auf der nächsten Seite. 180

181 3.15 Xcos Abbildung 3.44: Inhalt des SUPER_f-Blockes Abbildung 3.45: Simulationsergebnis 181

182 3 SciLab Abbildung 3.46: Blockschaltbild für Differentialgleichungssystem Differentialgleichungssystem Gegeben ist das Differentialgleichungssystem mit Startbedingungen: f (x) = g (x) + sinx f (0) = 1 g (x) = f (x) cosx g (0) = 1 2 g(0) = 5 Gesucht ist die graphische Darstellung von f (x) und g(x) für 0 x

183 3.15 Xcos Da Xcos Simulationen für zeitliche Verläufe vornimmt, bringen wir das Problem mit folgenden Substitutionen in eine für Xcos geeignete Notation: Original-Problem f (x) = g (x) + sinx Xcos-Notation x t f (x) x 1 (t) g(x) x 2 (t) dx 1 dt = dx 2 dt + sint g (x) = f (x) cosx d 2 x 2 dt 2 = dx 1 cost dt f (0) = 1 x 1 (0) = 1 g(0) = 5 x 2 (0) = 5 g (0) = 1 dx 2 2 dt = 1 2 t=0 Sowohl dx 1 /dt als auch d 2 x 2 /dt 2 werden durch einen nutzerdefinierten Funktionsblock SUPER_f gebildet. mit einem Integrierer bzw. einer Kette von Integrierern werden daraus x 1 bzw. dx 2 /dt und x 2 gebildet. Da in die Formeln zur Berechnung von dx 1 /dt bzw. d 2 x 2 /dt die Größen dx 2 /dt bzw. dx 1 /dt eingehen, werden diese Größen auf die Eingänge der SUPER_f-Blöcke zurückgeführt. Da auch Funktionen von t in der Formel benutzt werden, wird der t-wert von einem TIME_f-Block bezogen und ebenfalls in die SUPER_f-Blöcke gegeben. Die Startbedingungen werden an den Integratoren eingestellt: Der obere Integrator erhält den Startwert 1 (x 1 (0)). Der linke untere Integrator erhält den Startwert 1 2 (ẋ 2 (0)). Der rechte untere Integrator erhält den Startwert 5 (x 2 (0)). Der ENDBLK-Block wird für einen Endzeitpunkt 5 konfiguriert. Die beiden Größen x 1 und x 2 werden zu einem Vektor zusammengefasst, um sie in einem Diagramm darzustellen. Am CSCOPE wird eine Refresh period von 5 eingestellt, die Aktivierungsquelle SampleCLK liefert aller einen Event. 183

184 3 SciLab Abbildung 3.47: SUPER_f-Block für dx 1 /dt Abb und 3.48 auf der nächsten Seite zeigen den Inhalt der SUPER_f-Blöcke, die die Berechnung von dx 1 /dt und d 2 x 2 /dt 2 realisieren. 184

185 3.15 Xcos Abbildung 3.48: SUPER_f-Block für d 2 x 2 /dt 2 185

186 3 SciLab Abbildung 3.49: Simulationsergebnis 186

187 3.15 Xcos Abbildung 3.50: Simulation eines Systems mit Zustandsraummodell Ausgangssignal eines durch Zustandsraummodell gegebenen Systems An ein System mit dem Zustandsraummodell ( ) ( ) d x ( x1 = dt x x 2 ( ) x1 y(t) = ( 1 5 ) ( x1 x 2 ) t=0 = ( 0 0 wird ein symmetrisches Rechtecksignal mit ) x 2 ) ( ) u(t) û = 1 T = 0,4ms angelegt. Gesucht ist der zeitliche Verlauf des Ausgangssignales y(t) für den Zeitraum bis t = 2ms. 187

188 3 SciLab Abbildung 3.51: Einstellungen für CLSS Zur Simulation wird das System mit einer Schaltung xcos0007.xcos entsprechend Abb auf der vorherigen Seite modelliert. Verwendet werden folgende Blocksymbole: GENSQR_f aus der Palette Quellen liefert das Rechtecksignal. Als Amplitude wird 1 eingestellt. Der steuernde SampleCLK aus der Palette Ereignis- Behandlung wird auf eine Sample time von 0,2 ms ( 0.2e-3 ) eingestellt. CLSS aus der Palette Zeitkontinuierliche Systeme repräsentiert unser System mit Zustandsraummodell. Die Einstellungen werden entsprechend Abb vorgenommen. MUX aus der Palette Signal Routing führt Ein- und Ausgangssignal in einen Vektor zusammen, um sie gemeinsam in einem Diagramm darzustellen. CSCOPE aus der Palette Senken stellt Ein- und Ausgangssignal graphisch dar. Der Wertebereich wurde auf 2 y 2 konfiguriert, die Refresh period auf 2 ms. Der steuernde SampleCLK liefert alle 0,1s ein Event. END aus der Palette Ereignis-Behandlung beendet die Simulation nach 2 ms. Abb auf der nächsten Seite zeigt die Ergebnisse der Simulation. 188

189 3.15 Xcos Abbildung 3.52: Simulationsergebnisse 189

190

191 4 Erste Schritte mit wxmaxima 4.1 Einleitung Maxima ist ein Computer-Algebra-System und kann mathematische Probleme analytisch (d. h. formelmäßig) lösen. Die Software besteht aus einem Kern (das eigentliche Maxima) und einem Frontend, entweder wxmaxima oder Xmaxima. Im Kern findet die eigentliche Arbeit statt, das Frontend stellt die graphische Nutzeroberfläche bereit. Die Kommunikation zwischen beiden Komponenten erfolgt entweder über Netzwerk-Funktionen oder andere Methoden zur Interprozesskommunikation. 4.2 Installation Installation unter Windows Software-Installation Die Installationsdatei kann von bezogen werden. Entweder den Download-Button anklicken oder gezielt die Datei maxima-x.y.z.exe downloaden. Firewall anpassen, falls nötig Nach der Installation bleiben Sie als Administrator angemeldet und starten wxmaxima einmal. Falls eine Abfrage der Windows-Firewall erscheint und fragt, ob das Programm weiterhin geblockt werden soll, lassen Sie Netzwerkverkehr für dieses Programm zu. Die graphische Nutzeroberfläche und die eigentliche Arbeit sind in zwei getrennten Programmen untergebracht, diese kommunizieren mittels Netzwerk-Funktionen miteinander. Die Firewall-Regel für Maxima kann über Systemsteuerung / Windows-Firewall so geändert werden, dass nur Zugriffe von der IP-Adresse also dem lokalen PC erlaubt sind. 191

192 4 wxmaxima Datenausführungsverhinderung anpassen, falls nötig Falls Sie die Datenausführungsverhinderung (DEP) auf Ihrem PC aktiviert haben, müssen Sie eine Ausnahme für Maxima in die entsprechende Liste eintragen. Zum Bearbeiten der Ausnahmeliste gelangen Sie über Systemsteuerung / System / Erweitert / Systemleistung / Reiter Datenausführungsverhinderung. In die Liste muss der volle Pfad zum Maxima-Kernprogramm C:\Program Files\Maxima-x.y.z\lib\maxima\x.y.z\binary-gcl\maxima.exe eingetragen werden. Auf 64-Bit-Systemen muss es natürlich Program Files (x86) heißen. GnuPlot Das Programm GnuPlot muss ebenfalls installiert werden (siehe Abschnitt 2.1 auf Seite 13), wxmaxima benutzt GnuPlot für graphische Darstellungen Installation unter Linux Unter Linux sollte wxmaxima über das Paketmanagement installiert werden, um ggf. weitere benötigte Software wie wxgtk gleich mit zu installieren. Installieren Sie auch gnuplot, falls nicht bereits vorhanden. 192

193 4.3 Programmstart Abbildung 4.1: wxmaxima-fenster nach dem Start 4.3 Programmstart Unter Windows können Sie das Programm über das Startmenü starten: Start Alle Programme Maxima wxmaxima. Unter Linux geben Sie in einem Terminalfenster 1 wxmaxima ein. Das wxmaxima-fenster wird geöffnet. 193

194 4 wxmaxima Abbildung 4.2: Eingabezelle 4.4 Sitzung, Zellen, Dateien Eine wxmaxima-sitzung bzw. ein wxmaxima-dokument besteht aus einer oder mehreren Zellen (Blöcken), folgende Zelltypen sind möglich: Eingabezellen Der Inhalt dieser Zellen wird durch Maxima verarbeitet. Text-, Titel-, Kapitel- und Unterkapitelzellen. Diese Zellen enthalten die Dokumentation und Beschreibung für Eingabezellen. Mit Hilfe der Titel-, Kapitelund Unterkapitelzellen kann ein strukturiertes Dokument erstellt werden. Mit dem Menüpunkt Zellen Neue Eingabezelle bzw. den nachfolgenden Menüpunkten wird eine neue Zelle erstellt. Der Cursor steht in der neuen Zelle, es kann mit der Texteingabe begonnen werden. Wird nach dem Programmstart bzw. wenn die schwarze Linie dargestellt wird Text eingegeben, wird automatisch eine neue Eingabezelle erstellt. Die Eingabezelle ist am roten Rand und am Prompt --> erkenntlich. Die Eingaben werden nicht sofort zeilenweise bearbetet, wenn eine Zeile mit Enter abgeschlossen wird. Es kann erst ein ganzer Block eingegeben und ggf. nochmals modifiziert werden. Erst mit SHIFT-Enter wird eine Eingabezelle verarbeitet. 194

195 4.4 Sitzung, Zellen, Dateien Die komplette Sitzung kann mit dem Menüpunkt Datei Speichern abgespeichert werden und mit Datei Öffnen... wieder geöffnet werden, die Dateiendung für wxmaxima-sitzungen ist.wxm. Obwohl diese Dateien Textdateien sind, sollten sie nicht mit einem Texteditor bearbeitet werden. Wollen Sie Batch-Dateien erstellen mit wxmaxima-kommandofolgen, so speichern Sie diese mit der Endung.mac. Mit dem Menüpunkt Datei Batch-Datei laden... können Sie derartige Dateien ausführen. 195

196 4 wxmaxima 4.5 Eingabezellen Abbildung 4.3: Eingabezelle nach der Auswertung Struktur der Eingabezelle Eine Eingabezelle besteht aus einer Folge von Maxima-Anweisungen. Jede Anweisung wird entweder durch ein Semikolon oder durch ein Dollarzeichen abgeschlossen. Anweisungen können sich über mehrere Zeilen erstrecken. Für Anweisungen, die mit Semikolon abgeschlossen wurden, wird das Ergebnis der Anweisung angezeigt. Für Anweisungen, die mit Dollarzeichen abgeschlossen wurden, erfolgt keine Ausgabe. Den Ein- und Ausgaben wird ein (%izahl) bzw. %ozahl) vorangestellt. 196

197 4.5.2 Zahlen Zahlenwerte unterschiedlicher Typen können in Maxima genutzt werden: Ganzzahlige Werte, 4.5 Eingabezellen rationale Zahlen (Brüche mit ganzzahligen Werten in Zähler und Nenner), Gleitkommazahlen in wissenschaftlicher Notation (z. B. 1.23e5 für 1, ) und komplexe Zahlen, z. B. 3+4*%i. Folgende Konstanten sind laut [Woo] in Maxima vordefiniert: Tabelle 4.1: Vordefinierte Konstanten Bedeutung Maxima-Schreibweise e (Basis für natürlichen Logarithmus) %e i (imaginäre Einheit) %i π %pi ϕ (Goldener Schnitt) %phi γ (Euler-Mascheroni-Konstante) %gamma inf minf 197

198 4 wxmaxima Operatoren Operatoren sind in Maxima mit einer linksseitigen und rechtsseitigen Bindungskraft (lbp=left binding power, rbp=right binding power) versehen, diese legt die Reihenfolge der Abarbeitung fest. Die Standardwerte sorgen dafür, dass die üblichen Vorrangregeln (z. B Punkt- vor Strichrechnung) eingehalten werden. Bei Unklarheiten sollten Klammern gesetzt werden. Tabelle 4.2: Vordefinierte Operatoren Operator lbp rbp Bedeutung : Zuweisung :: := Definition von Funktionen ::= ! 160 Berechnung der Fakultät!! 160 ^ Potenzierung Nichtkommutative Multiplikation (z. B. Matrizen) * 120 Multiplikation / Division Addition Subtraktion = Gleichheit # > Größer als >= Größer als oder gleich < Kleiner als <= Kleiner als oder gleich not 70 Logische Negation and 65 Logische und-verknüpfung or 60 Logische oder-verknüpfung, 10 Sequentielle Abarbeitung von Anweisungen $ -1 Anweisung verarbeiten ohne Ergebnisausgabe ; -1 Anweisung verarbeiten mit Ergebnisausgabe 198

199 4.6 Ausdrücke, Variable und Zuweisungen 4.6 Ausdrücke, Variable und Zuweisungen Variable Ein (mathematischer) Ausdruck ist eine Verknüpfung von Zahlen, Konstanten, Funktionsaufrufen und Variablen durch Operatoren. Variablen sind in Maxima eine Form sogenannter gebundener Symbole 1. Sie haben einen Namen wie in Programmiersprachen üblich, d. h. der Name beginnt mit einem Buchstaben oder Unterstrich, darauf kann optional eine beliebige Kombination von Buchstaben, Unterstrichen oder Zahlen folgen. Maxima unterscheidet zwischen Groß- und Kleinschreibung. Wie in anderen Programmiersprachen auch gibt es eine Reihe reservierter Wörter, die nicht als Variablennamen verwendet werden dürfen. Die folgende Auflistung wurde [Woo] entnommen: af and av args array at bc2 carg cf cint col cov cv del diag diff do else elseif erf ev exp f90 fft fib fix for from gcd gd get go hav ic1 ic2 if ift ilt in ind inf inrt integrate is li limit min next not op or plot psi product put rat rem rk some step sum then thru und unless vers while zeta Variablen können als Inhalt nicht nur einen Wert oder Ausdruck haben, auch komplexere Inhalte wie Vektoren, Matrizen und Gleichungen sind möglich. 1 Als gebundenes Symbol werden in Maxima alle Dinge bezeichnet, die mit einem Namen angesprochen werden, z. B. Variablen, Funktionen

200 4 wxmaxima Abbildung 4.4: Zuweisung von Ausdrücken zu Variablen Mit dem Zuweisungsoperator : kann einem Symbol (einer Variablen) ein Inhalt (Ausdruck) zugewiesen werden, z. B.: 1 a : x+y ; 2 b : x y ; 3 c : a / b ; Der Variablenname steht dabei links vom Operator, der zuzuweisende Inhalt rechts. Da Maxima das =-Zeichen zur Definition von Gleichungen verwendet, wird für Zuweisungen der Doppelpunkt benutzt. Wird in einem Ausdruck eine Variable benutzt, der bereits ein Inhalt zugewiesen wurde, wird der Inhalt anstelle der Variablen eingesetzt. Abb. 4.4 veranschaulicht dies. 200

201 4.6 Ausdrücke, Variable und Zuweisungen Abbildung 4.5: Auswertung von Ausdrücken Auswertung von Ausdrücken Mit ev (expr, arguments); bzw. der vereinfachten Form nur im interaktiven Betrieb expr, arguments kann ein Ausdruck expr ermittelt werden. Die Argumente sind optional, hier können zusätzlich zu berücksichtigende Angaben formuliert werden. Im Beispiel wird c 2 einmal ohne Zusatzangaben berechnet mit dem Ergebnis (x+y)2 (x y) 2, danach wird es mit Einsetzen der gegebenen Randbedingung x = 2q berechnet, was zum Ergebnis (y+2q)2 (2q y) 2 führt. Die Randbedingungen gelten nicht dauerhaft sondern nur für die Evaluierung des Ausdruckes. 1 a : x+y ; 2 b : x y ; 3 c : a / b ; 4 c ^ 2 ; 5 c ^2, x=2*q ; 201

202 4 wxmaxima Abbildung 4.6: Ausdruck an einer bestimmten Stelle berechnen Wert eines Ausdrucks berechnen Mit at(expr, conditions); kann der Ausdruck expr für vorgegebene Zahlenwerte berechnet werden. Der Zusatz numer bewirkt, dass die Ausgabe nicht als Bruck sondern als Gleitkommazahl erfolgt. Im Beispiel wird c berechnet an der Stelle x = 5 y = 2 berechnet. Die Ausgabe erfolgt einmal als Bruch und einmal als Gleitkommazahl. 1 a : x+y ; 2 b : x y ; 3 c : a / b ; 4 a t ( c, [ x =5, y = 2 ] ) ; 5 a t ( c, [ x =5, y = 2 ] ), numer ; 202

203 4.7 Listen / Felder Abbildung 4.7: Auswahl von Elementen aus Listen und Summen 4.7 Listen / Felder Liste anlegen Listen bzw. Felder stehen in eckigen Klammern, die einzelnen Elemente sind durch Kommata getrennt Auf Listenelement zugreifen Mit Liste[Index] part(liste, Index) kann man ein Element aus einer Liste auswählen. Der Index beginnt dabei mit 1. Die part()-anweisung kann auch auf eine Summe angewandt werden, in diesem Fall werden einzelne Summanden ausgewählt. Ist der Index eine Liste, so wird als Ergebnis wiederum eine Liste erzeugt, die die Elemente der Originalliste an den gewünschten Stellen enthält. Für Summen wird eine neue Summe mit nur den ausgewählten Summanden zurückgegeben. 203

204 4 wxmaxima Abbildung 4.8: Zeilen- und Spaltenvektor eingeben 4.8 Vektoren und Matrizen Vektoren eingeben Ein Zeilenvektor v = (a,b) wird mit Hilfe eines matrix()-befehles eingegeben, dabei wird nur eine Liste für eine Matrixzeile als Argument benutzt. Für einige Operationen akzeptiert wxmaxima auch eine Liste (Eingabe ohne matrix()-befehl) und behandelt diese als Zeilenvektor, dies ist jedoch nicht bei allen Operationen der Fall. Es ist z. B. nicht möglich, zwei Zeilenvektoren voneinander zu subtrahieren, von denen der eine als Liste eingegeben wurde und der andere das Ergebnis einer Vektor/Matrix-Multiplikation ist. Daher sollte bei der Eingabe von Zeilenvektoren der matrix()-befehl benutzt werden. 1 v : m a t r i x ( [ a, b ] ) ; 204

205 4.8 Vektoren und Matrizen Ein Spaltenvektor ) w = ( c d wird mit einem transpose()-befehl eingegeben: 1 w: t r a n s p o s e ( [ c, d ] ) ; Der transpose()-befehl ist einer der Befehle, die anstelle eines Zeilenvektors auch eine Liste akzeptieren, daher kann hier auf den matrix()-befehl verzichtet werden. 205

206 4 wxmaxima Abbildung 4.9: Matrix eingeben Matrizen eingeben Eine Matrix ( a b M = c d ) wird mit der matrix()-anweisung eingegeben. Im matrix()-befehl wird eine Folge von Listen benutzt, jede Liste enthält eine Matrix-Zeile: 1 M: m a t r i x ( [ a, b ], [ c, d ] ) ; Alternativ kann mit zeromatrix(zeilen, Spalten) eine mit lauter Nullen gefüllte Matrix angelegt werden, anschließend werden die Elemente auf ihre Werte gesetzt. Dieses Verfahren bietet sich insbesondere für schwach besetzte Matrizen an, um Schreibarbeit zu sparen. 206

207 4.8 Vektoren und Matrizen Abbildung 4.10: Zugriff auf Vektor- und Matrizenelemente Zugriff auf Vektor- und Matrizenelemente Mit Vektor[Index] part(vektor, Index) Matrix[Zeile][Spalte] Matrix[Zeile, Spalte] part(matrix, Zeile, Spalte) kann auf Elemente von Vektoren und Matrizen zugegriffen werden. Der Index beginnt mit 1. 1 w: t r a n s p o s e ( [ c, d ] ) ; 2 M: m a t r i x ( [ a, b ], [ c, d ] ) ; 3 w [ 2 ] ; 4 p a r t (w, 2 ) ; 5 M[ 2 ] [ 1 ] ; 6 M[ 2, 1 ] ; 7 p a r t (M, 2, 1 ) ; 207

208 4 wxmaxima Abbildung 4.11: Operationen mit Skalar und Matrix Operationen mit Matrizen und Vektoren Skalar und Matrix Werden die Operatoren +, -, *, / und ^ genutzt, um einen Skalar mit einer Matrix zu verknüpfen, so wird die Operation für jedes Element der Matrix durchgeführt. 208

209 4.8 Vektoren und Matrizen Abbildung 4.12: Elementeweise Operationen Elementeweise Operationen mit zwei Matrizen Werden zwei Matrizen gleicher Größe durch die Operatoren +, -, *, / verknüpft, so wird der Operator jeweils elementweise angewandt. Hinweis: Der Operator * ist nicht die Matrizenmultiplikation. 1 M: m a t r i x ( [ a, b ], [ c, d ] ) ; 2 N: m a t r i x ( [ e, f ], [ g, h ] ) ; 3 M+N; 4 M*N; 5 N M; 209

210 4 wxmaxima Abbildung 4.13: Matrizenmultiplikation Matrizenmultiplikation Der Operator. führt eine Matrizenmultiplikation durch. 1 M: m a t r i x ( [ a, b ], [ c, d ] ) ; 2 N: m a t r i x ( [ e, f ], [ g, h ] ) ; 3 M. N; 4 N. M; 210

211 4.8 Vektoren und Matrizen Abbildung 4.14: Gleichungssystem lösen mit inverser Matrix Inverse Matrix Mit invert(matrix) Matrix^^-1 wird die inverse Matrix gebildet. Im Beispiel wird das Gleichungssystem ( ) M x = ( ) a11 a 12 y M = y1 y = a 21 a 22 y 2 nach x aufgelöst durch M 1 y = x 1 M: m a t r i x ( [ a11, a12 ], [ a21, a22 ] ) ; 2 y : t r a n s p o s e ( [ y1, y2 ] ) ; 3 x : i n v e r t (M). y ; Gleichungssystem können müssen aber nicht in Matrixschreibweise angegeben werden, um sie mit Maxima zu lösen, siehe auch Abschnitt 4.12 auf Seite

212 4 wxmaxima Eigenwerte und Eigenvektoren Eigenwerte λ und Eigenvektoren x sind Paare, die für eine quadratische Matrix M die Eigenwertgleichung M x = λ x erfüllen, wobei triviale Lösungen x = 0 nicht mit berücksichtigt werden. Das Vorgehen wird hier am Beispiel der Matrix M = gezeigt 3 λ λ λ M x = λ x M x Eλ x = 0 (M λe) x = 0 x = 0 Damit ergibt sich das Polynom für die Berechung der Eigenwerte zu 0 = P(λ) = det(m Eλ) = (3 λ)(3 λ)(7 λ) 16(7 λ) = (7 λ)(λ 2 6λ + 9) λ 1 = 7 λ 2 = 1 λ 3 = 7 Für den zweifachen Eigenwert λ 1 = 7 ergibt sich x E1 = mit der Lösung x E1 = t s

213 4.8 Vektoren und Matrizen Für λ 2 = 1 ergibt sich x E2 = mit der Lösung x E2 = s die äquivalent ist zu x E2 = s In Maxima kann dieses Problem eingegeben werden als: 1 M: m a t r i x ( [ 3, 4, 0 ], [ 4, 3, 0 ], [ 0, 0, 7 ] ) ; 2 e i g e n v e c t o r s (M) ; 213

214 4 wxmaxima Abbildung 4.15: Eigenwerte und -vektoren einer Matrix Der Befehl eigenvectors(matrix) liefert ein Feld mit zwei Elementen zurück: Eigenwerte Die Eigenwerte sind wiederum eine Liste mit 2 Elementen: Liste der Eigenwerte und Liste der Häufigkeiten der Eigenwerte Der Eigenwert λ = 7 kommt mit einer Häufigkeit von 2 vor und hat somit einen Eigenvektor aus 2 Komponenten. Der Eigenwert λ = 1 kommt mit der Häufigkeit 1 vor, der zugehörige Eigenvektor hat nur eine Komponente. Eigenvektoren Eine Liste der Eigenvektoren, in der Reihenfolge passend zur Reihenfolge der Eigenwerte. Eigenvektoren für Eigenwerte mit einer Häufigkeit größer als 1 bestehen aus einer entsprechenden Anzahl von Komponenten. Wenn eine analytische Eigenwertbestimmung nicht gelingt z. B. weil die analytische Nullstellenbestimmung für das charakteristische Polynom nicht möglich ist kann eine numerische Näherung vorgenommen werden, siehe Abschnitt auf Seite

215 4.9 Funktionen Abbildung 4.16: Funktionsdefinition mit := und define 4.9 Funktionen und Packages Funktionsdefinition mit define Mit define(funktion(argument(e)), Ausdruck) wird eine Funktion definiert. Der in der Funktionsdefinition angegebene Ausdruck wird vor der Verwendung gleich ausgewertet, im Gegensatz zum nachfolgend gezeigten Operator :=. Im Beispiel wird auf das Differenzieren mit diff() vorgegriffen. Im Beispiel 1 d e f i n e ( f1 ( x ), x ^ 2 ) ; 2 d e f i n e ( f2 ( x ), d i f f ( f1 ( x ), x ) ) ; 3 f1 ( 1 ) ; 4 f2 ( 1 ) ; wird in der zweiten Zeile zuerst diff(f1(x), x) aufgelöst zu 2*x, mit diesem Ergebnis wird die Funktion f2(x) definiert zu 2*x. 215

216 4 wxmaxima Abbildung 4.17: Definition und Verwendung einer Textersetzung Textersetzung mit := Mit dem Operator := werden ebenfalls Funktionen definiert, der Vorgang entspricht aber eher einem Textmakro (z. B. einem #define -Makro in der Programmiersprache C). Links vom Operator steht der Funktionsname mit der Liste der formalen Parameter, rechts der Ersetzungstext. Im Beispiel wird eine Funktion para(a,b) definiert, die den resultierenden Gesamtwiderstand aus einer Parallelschaltung zweier Widerstände berechnet. 1 p a r a ( a, b ) : = ( a *b ) / ( a+b ) ; 2 Rges : p a r a ( R1, R2 ) ; 3 a t ( Rges, [ R1 = 5. 0, R2 = 3. 0 ] ), numer ; Ein Beispiel analog zum vorangegangenem Abschnitt 1 f1 ( x ) : = x ^ 2 ; 2 f2 ( x ) : = d i f f ( f1 ( x ), x ) ; 3 f1 ( 1 ) ; 4 f2 ( 1 ) ; funktioniert nicht, da die Textersetzung die letzte Zeile f2(1) zu diff(1^2, 1) wandelt. 216

217 4.9 Funktionen Abbildung 4.18: Anzeigen und Löschen von Funktionen Definierte Funktionen auflisten Mit dem Befehl functions; werden die Namen aller selbst definierten Funktionen angezeigt. Mit fundef(name); wird die angegebene Funktion angezeigt Definierte Funktion löschen Mit kill(symbol); wird das angegebene gebundene Symbol z. B. eine Funktion gelöscht. Mit kill(all); kill(allbut(a,b)); werden alle gebundenen Symbole bzw. alle gebundenen Symbole mit Ausnahme der angegebenen gelöscht. 217

218 4 wxmaxima Packages Zusammengehörige Funktionen und sonstige Definitionen können in Packages gebündelt und bei Bedarf geladen werden. Ein Aufruf von load("datei"); lädt die Datei datei.mac entweder aus dem angegebenen Verzeichnis, wenn ein vollständiger Dateiname angegeben wurde oder aus dem Verzeichnis, das in der Variable maxima_userdir angegeben ist. Standardmäßig ist maxima_userdir auf das Verzeichnis maxima im Homeverzeichnis des aktuellen Nutzers gesetzt. Wird diese Variable überschrieben, sollten Sie unter Windows im Verzeichnisnamen keine Backslashes verwenden, sondern Slashes Startup-Datei Im maxima_userdir-verzeichnis kann eine Datei maxima-init.mac angelegt werden. Diese wird beim Start von Maxima automatisch abgearbeitet. Hier können häufig genutzte Funktionen definiert werden oder entsprechende Packages geladen werden. 218

219 4.9 Funktionen Vereinfachte Schreibweisen mit evflag und evfun Ist für ein Flag f die evflag-eigenschaft gesetzt, kann eine verkürzte Schreibweise ev(expr, f ); anstelle von ev(expr, f = true); verwendet werden. Im interaktiven Mode kann expr, f benutzt werden. Die evflag-eigenschaft wird mit declare(f, evflag); gesetzt. Ist für eine Funktion F die evfun-eigenschaft gesetzt, kann die übersichtlichere Schreibweise ev(expr, F); anstelle von F(ev(expr)); verwendet werden. Im interaktiven Betrieb kann dies weiter vereinfacht werden zu: expr, F Die evfun-eigenschaft wird mit declare(f, evfun); gesetzt. 219

220 4 wxmaxima 4.10 Ausdrücke umformen Polynome ausmultiplizieren Zum Ausmultiplizieren von Polynomen können folgende Befehle verwendet werden: expand(ausdruck); expand(ausdruck, p, n); multipliziert Produkte von Summen und potenzierte Summen aus. Ist das Ergebnis ein Bruch, wird dieser Bruch in eine Summe von Brüchen zerlegt, wenn der Zähler eine Summe ist. Die Einstellungen maxposex und maxnegex bzw. die Argumente p und n schränken dabei die Exponenten von potenzierten Summen ein. Die beiden nachfolgenden Beispiele wurden aus der Online-Hilfe entnommen. Listing 4.1: Ausmultiplizieren in Produkten 1 expr : ( x + 1 ) ^ 2 * ( y + 1 ) ^ 3 ; 2 d i s p ( " A u s m u l t i p l i z i e r e n ohne E i n s c h r a e n k u n g e n " ) $ 3 expand ( e xpr ) ; 4 d i s p ( " Nur Polynome b i s maximal 2. Grades " ) $ 5 expand ( expr, 2 ) ; Listing 4.2: Ausmultiplizieren in Quotienten 1 expr : ( y + 1 ) ^ 3 / ( ( x + 1 ) ^ 2 ) ; 2 d i s p ( " A u s m u l t i p l i z i e r e n ohne E i n s c h r a e n k u n g e n " ) $ 3 expand ( e xpr ) ; 4 d i s p ( " Nur b i s 2. Grad i n Z a e h l e r und Nenner " ) $ 5 expand ( expr, 2, 2 ) ; 220

221 4.10 Ausdrücke umformen Abbildung 4.19: Ausmultiplizieren in Produkten Abbildung 4.20: Ausmultiplizieren in Quotienten 221

222 4 wxmaxima Abbildung 4.21: Unterschied expand und ratexpand ratexpand(ausdruck); multipliziert Produkte von Summen und potenzierte Summen aus. Brüche werden mit einem gemeinsamen Nenner zusammengefasst und gekürzt. Ist der Zähler eine Summe, wird der Ausdruck in eine Summe entsprechender Brüche zerlegt. Das nachfolgende Beispiel wurde der Online-Hilfe entnommen. Listing 4.3: Unterschied expand und ratexpand 1 expr : ( x 1 ) / ( x +1)^2+1( x 1); 2 d i s p ( " Verwendung von expand " ) $ 3 expand ( e xpr ) ; 4 d i s p ( " Verwendung von r a t e x p a n d " ) $ 5 r a t e x p a n d ( e xpr ) ; 222

223 4.10 Ausdrücke umformen Abbildung 4.22: Teilweise ausmultiplizierter Ausdruck expandwrt(ausdruck, Variable... ); multipliziert nur die Produkte/Potenzen aus, in denen die angegebene Variable enthalten ist. Im Beispiel werden nur die Faktoren ausmultipliziert, die die Variable x enthalten. Listing 4.4: Teilweise ausmultiplizieren 1 e xpr : ( x + 1 ) * ( x +2)+( y + 3 ) * ( y +4)+( x + 5 ) * ( y + 6 ) ; 2 expandwrt ( expr, x ) ; 223

224 4 wxmaxima Abbildung 4.23: Faktorzerlegung und Ausklammern Faktorzerlegung und Ausklammern Mit factor(ausdruck) wird ein Ausdruck in Faktoren zerlegt und als Produkt dargestellt. Mit collectterms(ausdruck,variable... ) wird versucht, die angegebenen Variablen auszuklammern. Mit Faktor * ratsimp(ausdruck/faktor) kann ein gemeinsamer Faktor aus allen Summanden eines Ausdruckes herausgezogen und ausgeklammert werden. 224

225 4.10 Ausdrücke umformen 1 e1 : 6* a ^2+ ab b ^ 2 ; 2 f a c t o r ( e1 ) ; 3 e2 : d ^2* y+b*d*y+a *d*y+a *b*y+b* c *x+a * c *x+a *b*x+a ^2* x ; 4 c o l l e c t t e r m s ( e2, x, y ) ; 5 e3 : a *( b* c+b*d ) ; 6 a *b* r a t s i m p ( e3 / ( a *b ) ) ; 225

226 4 wxmaxima Abbildung 4.24: Partialbruchzerlegung Partialbruchzerlegung Mit partfrac(ausdruck, Variable) wird ein Bruch in Partialbrüche bezüglich der vorgegebenen Variable zerlegt. 1 expr : (12* x^2 9*x + 4 ) / ( 9 * x^3 3*x^2 8*x + 4 ) ; 2 p a r t f r a c ( expr, x ) ; 226

227 Rational vereinfachen 4.10 Ausdrücke umformen Rationale Ausdrücke sind Brüche, die im Zähler und Nenner ein Polynom einer Variable aufweisen bzw. Summen derartiger Brüche. Zum Vereinfachen derartiger Ausdrücke können folgende Funktionen benutzt werden: rat wandelt einen Ausdruck in kanonische rationale Form um. Dazu wird ein gemeinsamer Nenner gebildet, Terme zusammengefasst und gekürzt. Gleitkommazahlen, die mit einer Toleranz von ratepsilon um einen ganzzahligen Wert herum liegen, werden zur Ganzzahl umgewandelt. Es wird nur minimal vereinfacht durch Anwendung der Grundrechenarten und Potenzieren mit ganzzahligen Exponenten (z. B. Ausmultiplizieren und Zusammenfassen von Polynom- Produkten). ratsimp(ausdruck) ratsimp(ausdruck, Variable... ) vereinfacht einen Ausdruck und alle Teilausdrücke, einschließlich der Argumente von nichtrationalen Funktionen. Das Ergebnis ist ein Quotient zweier Polynome, ggf. rekursiv. Die Koeffizienten der Hauptvariable sind Polynome der anderen Variablen. Die Variablen können auch nicht-rationale Funktionen enthalten, wie z. B. sin 2 (x 2 + 1), die Argumente solcher Funktionen werden ebenfalls rational vereinfacht. fullratsimp wendet wiederholt jeweils einen ratsimp-schritt und einen Pass zur nichtrationalen Vereinfachung an, bis keine weitere Verbesserung mehr möglich ist. 227

228 4 wxmaxima Abbildung 4.25: Rationales Vereinfachen Das nachfolgende aus der Maxima-Online-Hilfe entnommene Beispiel zeigt die Wirkung der Funktionen. 1 expr : ( x ^ ( a / 2 ) + 1 ) ^ 2 * ( x ^ ( a / 2 ) 1 ) ^ 2 / ( x^a 1); 2 r a t ( expr ) ; 3 r a t s i m p ( expr ) ; 4 f u l l r a t s i m p ( e x pr ) ; 228

229 4.10 Ausdrücke umformen Abbildung 4.26: Potenzen, Logarithmen und Wurzeln vereinfachen Potenzen und Logarithmen vereinfachen Mit radcan(ausdruck) können Ausdrücke mit Potenzen und Logarithmen vereinfacht werden. Mit logcontract(ausdruck) werden rekursiv Ausdrücke der Form a1 a a 1 ln(b 1 ) + a 2 ln(b 2 ) + c zu ln(b 1 b 2 2 ) + c zusammengefasst, das Argument des Logarithmus wird rational vereinfacht Mit rootscontract(ausdruck) werden Produkte von Wurzeln zu einer Wurzel eines Produktes zusammgezogen. Die ersten beiden Beispiele wurden der Online-Hilfe entnommen. 229

230 4 wxmaxima 1 expr : ( l o g ( x+x^2) l o g ( x ) ) ^ a / ( l o g (1+ x ) ) ^ ( a / 2 ) ; 2 r a d c a n ( e xpr ) ; 3 expr : 2*( a * l o g ( x )+2* a * l o g ( y ) ) ; 4 l o g c o n t r a c t ( expr ) ; 5 expr : a * s q r t ( x )* b* s q r t ( y ) ; 6 r o o t s c o n t r a c t ( e x pr ) ; 230

231 4.10 Ausdrücke umformen Abbildung 4.27: Umformungen von Winkelfunktionen Winkelfunktionen umformen Mit trigsimp(ausdruck) wird versucht, durch den Ausdruck expr durch Anwendung von sin 2 (x) + cos 2 (x) = 1 sinh 2 (x) + cosh 2 (x) = 1 zu vereinfachen. Weitere Vereinfachungen sind dann mit trigreduce(), ratsimp() und radcan() möglich. Mit trigreduce(ausdruck, Variable) werden Produkte und Potenzen von Winkelfunktionen und hyperbolischen Funktionen ersetzt durch Funktionen von Vielfachen der Variablen. Dies wird auch für Funktionen in Nennern probiert. Wird keine Variable angegeben, wird die Ersetzung für alle Variablen probiert. trigexpand(ausdruck) bewirkt das Gegenteil, eine Ausweitung der Winkelfunktionen und hyperbolischen Funktionen von Summen und Vielfachen von Winkeln. Der Befehl expand() sollte vor trigexpand() angewendet werden. 231

232 4 wxmaxima 1 e1 : a *( s i n ( x ) ) ^ 2 + a *( cos ( x ) ) ^ 2 ; 2 t r i g s i m p ( e1 ) ; 3 e2 : 2* a * s i n ( x )* cos ( x ) ; 4 e3 : t r i g r e d u c e ( e2 ) ; 5 e4 : t r i g e x p a n d ( e3 ) ; 232

233 4.10 Ausdrücke umformen Abbildung 4.28: Umformung mit trigrat Mit trigrat(ausdruck) werden Ausdrücke vereinfacht, die rationale Brüche mit Winkelfunktionen in Zählern und Nennern haben wobei die Argumente der Winkelfunktionen lineare Funktionen mx bzw. mx + π n m,n G sind. Das Ergebnis ist ein vereinfachter Bruch mit linearen Winkelfunktionen in Zähler und Nenner. Das Beispiel wurde der Online-Hilfe entnommen. 1 e1 : s i n (3* a ) / s i n ( a+%p i / 3 ) ; 2 t r i g r a t ( e1 ) ; 233

234 4 wxmaxima Abbildung 4.29: Verwendung von map Operation auf Teilausdrücke anwenden Die Funktion map(befehl, Ausdruck... ) wendet den Befehl auf alle Teile des Ausdruckes an. Ist der Ausdruck eine Liste, so ist das Ergebnis ebenfalls eine Liste, wobei der Befehl auf alle Listenelemente angewandt wird. Ist der Ausdruck eine Summe, so ist das Ergebnis ebenfalls eine Summe, der Befehl wird auf die Summanden angewandt. Im Beispiel, das der Online-Hilfe entnommen wurde, wird der ratsimp-befehl einmal auf den gesamten Ausdruck angewandt und einmal mit map auf jeden Summanden des Ausdrucks. 1 e1 : ( y^2+y ) / y+x / ( x^2+x ) ; 2 r a t s i m p ( e1 ) ; 3 map ( r a t s i m p, e1 ) ; 234

235 4.11 Ausdrücke verändern Abbildung 4.30: Substitution mit subst 4.11 Ausdrücke verändern Teilausdrücke substituieren Mit subst(neu, alt, Ausdruck); werden im Ausdruck alle Vorkommen von alt durch neu ersetzt. Dabei muss alt atomar sein oder ein kompletter Teilausdruck sein. Für den Ausdruck 2(x + y + z)/w ist beispielsweise x + y + z ein Teilausdruck, x + y aber nicht. Ist alt nicht atomar oder ein kompletter Teilausdruck, kann ratsubst(neu, alt, Ausdruck); verwendet werden, wenn alt eine Summe, ein Produkt, eine Potenz... ist. Die subst()-funktion führt eine rein syntaktische Ersetzung durch, ratsubst() nimmt Untersuchungen am Ausdruck vor. 235

236 4 wxmaxima Abbildung 4.31: Ersetzung über Positionsangabe Mit substpart(neu, Ausdruck, Index... ); können Teile eines Ausdruckes über eine Positionsangabe ersetzt werden. Im Beispiel bezieht sich der erste Index auf das äußerste Konstrukt den Bruch. Eine Positionsangabe 1 würde hier den Zähler auswählen, die 2 wählt den Nenner aus. Der nächste Index bezieht sich auf den nächsten gefundenen Konstrukt innerhalb des ausgewählten Nenners, dieses Konstrukt ist eine Differenz. Die 1 wählt den ersten Operanden aus. Der letzte Index bezieht sich auf das nun gefundene Konstrukt, eine Potenz. Eine 1 würde hier die Basis auswählen, die 2 wählt den Exponenten. 1 expr : 1 / ( x^a y ) ; 2 s u b s t p a r t ( b, expr, 2, 1, 2 ) ; 236

237 4.11 Ausdrücke verändern Abbildung 4.32: Differenzieren und Integrieren Differenzieren und Integrieren Mit diff(ausdruck, Variable) wird ein Ausdruck nach einer Variablen differenziert. Mit integrate(ausdruck, Variable) wird ein Ausdruck über eine Variable integriert (unbestimmtes Integral). Mit integrate(ausdruck, Variable, Startwert, Endwert) wird ein Ausdruck über ein gegebenes Intervall integriert (bestimmtes Integral). Kann Maxima einen Ausdruck nicht analytisch integrieren, kann mit quad_qags() eine numerische Lösung für ein bestimmtes Integral berechnet werden, siehe Abschnitt auf Seite e1 : 3*x^2+2* x +5; 2 d i f f ( e1, x ) ; 3 i n t e g r a t e ( e1, x ) ; 4 i n t e g r a t e ( e1, x, 0. 5, 2. 5 ), numer ; 237

238 4 wxmaxima Abbildung 4.33: Lineares Gleichungssystem (1) 4.12 Gleichungssysteme Gleichungssysteme mit eindeutiger Lösung Mit solve([gleichungen], [Variablen]) kann ein Gleichungssystem gelöst (nach den vorgegebenen Variablen aufgelöst) werden. 1 s o l v e ( [ a *x+b*y=c, d*x+e *y= f ], [ x, y ] ) ; 238

239 4.12 Gleichungssysteme Abbildung 4.34: Lineares Gleichungssystem (2) Das Flag globalsolve entscheidet, ob globale Symbole für die Lösungen von Gleichungssystemen angelegt werden. Standardmäßig ist das Flag auf false gesetzt und Lösungen des Gleichungssystemes werden nur angezeigt. Im Beispiel wird das Flag auf true gesetzt, damit Maxima sich die gefundenen Lösungsformeln für die spätere Wiederverwendung merkt. Die Eingabedatei wird übersichtlicher gestaltet, indem gebundene Symbole für die einzelnen Gleichungen angelegt und im solve()-befehl verwendet werden. 1 g l o b a l s o l v e : t r u e ; 2 gl01 : a *x+b*y+c * z=d ; 3 gl02 : e *x+ f *y+g* z=h ; 4 gl03 : i *x+ j *y+k* z= l ; 5 s o l v e ( [ gl01, gl02, g l03 ], [ x, y, z ] ) ; 6 f u l l r a t s i m p ( x+y ) ; 239

240 4 wxmaxima Gleichungssysteme mit unendlich vielen Lösungen Die Funktion echelon(matrix) gibt die Echelon-Form einer Tableau-Schema-Matrix zurück. Dabei wird Eliminierung nach Gauß angewandt. Die Tableau-Schema-Matrix enthält die Koeffizientenmatrix des Gleichungssystemes und den Ergebnisvektor. Für das Gleichungssystem x 1 x 2 x 3 x 4 erhalten wir die Tableau-Schema-Matrix = M = Die echelon()-funktion eliminiert die Elemente unterhalb der Hauptdiagonale N = Die letzte Zeile enthält nur noch Nullen, die vierte Gleichung ist eine Linearkombination der anderen drei Gleichungen. Das Gleichungssystem ist daher nicht vollständig bestimmt und hat keine eindeutige Lösung. Mit der Funktion echelonplus() siehe Listing wird versucht, auch die Elemente oberhalb der Hauptdiagonale zu eliminieren P =

241 4.12 Gleichungssysteme Abbildung 4.35: Gleichungssystem mit unendlich vielen Lösungen Aus dem Gleichungssystem können wir entnehmen: Substitution x 4 = t ergibt: x 1 = 3 x 2 = 5 x x 4 = 8 3 x 3 = t x 4 = t Somit ergibt sich die Lösung des Gleichungssystems zu: x = 8 3 +t

242 4 wxmaxima Das Listing der Funktion echolonplus() greift auf die in Abschnitt 4.16 auf Seite 258 erläuterten Konstrukte zur Programmierung vor. Die Funktion ist in der Datei echelonp.mac im angehangenen Archiv gos-files.zip enthalten. 1 e c h e l o n p l u s (M) : = b l o c k ( 2 [ 3 N, / * E r g e b n i s. * / 4 z, / * Z e i l e n i n N. * / 5 s, / * S p a l t e n i n N. * / 6 maxind, / * Maximalindex mit 1 a u f H a u p t d i a g o n a l e. * / 7 i, / * Z e i l e, d i e abgezogen wird. * / 8 j, / * Z e i l e, von d e r abgezogen wird. * / 9 k, / * Zu b e a r b e i t e n d e S p a l t e. * / 10 f / * F a k t o r f u e r Z e i l e i. * / 11 ], 12 N: e c h e l o n (M), / * Echelon Form gewinnen. * / 13 z : l e n g t h (M), / * Z e i l e n a n z a h l d e r Matrix. * / 14 s : l e n g t h (M[ 1 ] ), / * S p a l t e n a n z a h l d e r M atrix. * / 15 i f z <= s t h e n ( / * Z e i l e n z a h l <= S p a l t e n z a h l. * / 16 f o r i : 1 t h r u z do ( 17 i f e q u a l (N[ i ] [ i ], 1) t h e n ( 18 maxind : i / * Maximalindex mit 1 a u f HD. * / 19 ) 20 ), 21 i f maxind > 1 t h e n ( 22 f o r i : 2 t h r u maxind do ( 23 f o r j : 1 t h r u ( i 1) do ( 24 i f n o t e q u a l (N[ j ] [ i ], 0) t h e n ( 25 f : N[ j ] [ i ], 26 f o r k : i t h r u s do ( 27 i f k > i t h e n ( 28 N[ j ] [ k ] : N[ j ] [ k ] f * N[ i ] [ k ] 29 ) 30 e l s e ( 31 N[ j ] [ k ] : 0 32 ) 33 ) 34 ) 35 ) 36 ) 37 ) 38 ), 39 N 40 ) $ 242

243 4.12 Gleichungssysteme Eine Tableau-Schema-Matrix eines Gleichungssystems kann mit der Funktion augcoefmatrix([gleichungen], [Variablen]) gewonnen werden, z. B.: 1 g l 1 : 2* x1 + 6* x2 = 3 6 ; 2 g l 2 : 3* x1 + x2 = 1 4 ; 3 g l 3 : 3* x3 + 5* x4 = 8 ; 4 g l 4 : 2* x1 + 5* x2 + 6* x3 + 10* x4 = 4 7 ; 5 M: a u g c o e f m a t r i x ( [ gl1, gl2, gl3, g l 4 ], [ x1, x2, x3, x4 ] ) ; 6 e c h e l o n (M) ; 7 e c h e l o n p l u s (M) ; Allerdings wird bei dieser Form der Ergebnisvektor als Konstante auf die linke Seite der Gleichung gebracht, also M x y = 0 Die rechte Spalte besteht aus dem Ergebnisvektor mit -1 multipliziert. Dieser Zustand bleibt auch nach der Eliminierung erhalten und muss beim Auslesen der Ergebnisse berücksichtigt werden. Die Matrix muss also gelesen werden als A = x 1 + 6x 2 36 = 0 3x 1 + x 2 14 = 0 3x 3 + 5x 4 8 = 0 2x 1 + 5x 2 + 6x x 4 47 = 0 Dies gilt in analoger Weise auch für die mit echelon() bzw. echelonplus() bearbeiteten Matrizen. 243

244 4 wxmaxima Abbildung 4.36: Tablaeu-Schema mit augcoefmatrix 244

245 4.12 Gleichungssysteme Abbildung 4.37: Eliminierungsverfahren Eliminierung von Variablen Für eine schrittweise Lösung eines Gleichungssystems können Variable eliminiert werden mit eliminate([gleichungen], [Variable(n)]) Als Gleichungen können auch Ausdrücke (Terme) angegeben werden, diese werden gleich 0 gesetzt, um Gleichungen zu erhalten. Die angegebenen Variablen werden eliminiert, d. h. für jede Variable wird eine Gleichung nach der Variablen umgestellt und das Ergebnis in die verbleibenden Gleichungen eingesetzt. Mit jeder Variablen verringert sich die Anzahl der Gleichungen um 1. Das Ergebnis-Gleichungssystem wird als Liste von Ausdrücken zurückgegeben, die den Wert 0 haben. 245

246 4 wxmaxima Im Beispiel wird aus dem Gleichungssystem ax + by = c dx + ey = f die Variable y eliminiert. Es verbleibt eine Gleichung: (bd ae)x b f + cd = 0 Diese Gleichung kann nun nach x aufgelöst werden: b f ce ae bd = x oder nach einer anderen enthaltenen Variable, z. B. a: 1 gl01 : a *x+b*y=c$ 2 gl02 : d*x+e *y= f$ bdx b f + ce ex 3 d i s p ( " E l i m i n i e r u n g von y " ) $ 4 e l r e s : e l i m i n a t e ( [ gl01, gl02 ], [ y ] ) ; 5 d i s p ( " Umstellung nach x " ) $ 6 s o l v e ( e l r e s, x ) ; 7 d i s p ( " Umstellung nach a " ) $ 8 s o l v e ( e l r e s, a ) ; = a 246

247 4.13 Differentialgleichungen Abbildung 4.38: Lösung einer Differentialgleichung mit Randwerten 4.13 Differentialgleichungen Mit ode2(differentialgleichung, y-variable, x-variable) wird nach Lösungen von Differentialgleichungen erster und zweiter Ordnung gesucht. In der Differentialgleichung wird dem diff -Operator ein einfaches Anführungszeichen vorangestellt, damit wird die sofortige Differentiation verhindert und kenntlich gemacht, dass die Differentiationsoperation mit in die Gleichung eingehen soll. Die y-variable ist die abgeleitete Variable, die x-variable die Variable, nach der abgeleitet wurde. Soll bespielsweise das Randwerteproblem gelöst werden, wird dies als y = xy + 2x y(0) = 2 1 l 1 : ode2 ( d i f f ( y, x )= x*y+2*x, y, x ) ; eingegeben. 247

248 4 wxmaxima Nachdem die allgemeine Lösung gefunden wurde, wird mit ic1(lösung, x-position, y-position) die Randbedingung in die allgemeine Lösung eingesetzt, was zur Lösung führt. 1 l 2 : i c 1 ( l1, x =0, y = 2 ) ; y = 4e x2 /2 2 Für Randwerteprobleme mit Differentialgleichungen höherer Ordnung steht noch die Funktion ic2(lösung, x-position, y-position, Ableitung) zur Verfügung. Hier kann zusätzlich zur Position noch der Wert der ersten Ableitung an der gegebenen Position mit angegeben werden. Sind Randwerte für zwei Punkte (x 1 ;y 1 ) und (x 2 ;y 2 ) gegeben, kann bc2(lösung, x=x1, y=y1, x=x2, y=y2) benutzt werden. 248

249 4.13 Differentialgleichungen Abbildung 4.39: Lösung eines DGL-Systems mit desolve und atvalue Mit desolve([differentialgleichung(en)], [Funktion(en)]) können gewöhnliche lineare DGL-Systeme bzw. Differentialgleichungen gelöst werden, dabei wird die Laplace-Transformation benutzt. Funktionale Abhängigkeiten einzelner Größen von den unabhängigen Variablen müssen bei jeder Verwendung der Größen bzw. der Ableitungen explizit angegeben werden. Mit atvalue(funktion, Variable=Position, Wert) werden die Randbedingungen vor Verwendung von desolve() vereinbart. Dabei wird angegeben, dass die Funktion an der Stelle Variable=Position den vorgegebenen Wert hat. 249

250 4 wxmaxima Im Beispiel, das der Online-Hilfe entnommen wurde, wird das DGL-System f (x) = g (x) + sinx g (x) = f (x) cosx g (0) = a f (0) = 1 gelöst, die Lösung lautet f (x) = ae x a + 1 g(x) = cosx + ae x a + g(0) 1 1 gl01 : d i f f ( f ( x ), x ) = d i f f ( g ( x ), x ) + s i n ( x ) ; 2 gl02 : d i f f ( g ( x ), x, 2) = d i f f ( f ( x ), x ) cos ( x ) ; 3 a t v a l u e ( d i f f ( g ( x ), x ), x =0, a ) ; 4 a t v a l u e ( f ( x ), x =0, 1 ) ; 5 d i s p ( " Loesung : " ) $ 6 l s g : d e s o l v e ( [ gl01, g l02 ], [ f ( x ), g ( x ) ] ) ; 250

251 4.14 Numerische Lösungen Abbildung 4.40: Numerische Nullstellenbestimmung 4.14 Numerische Lösungen Nullstellenbestimmung Mit allroots(ausdruck) werden reelle und komplexe Nullstellen eines Ausdruckes oder einer Gleichung bestimmt. Die Funktion liefert möglicherweise inakkurate Werte für Mehrfachnullstellen, in solchen Fällen kann für reelle Ausdrücke allroots(%i*p) verwendet werden, da dann ein anderer Algorithmus benutzt wird. allroots() kann nur für Polynome verwendet werden, für Brüche muss der Zähler ein Polynom sein und der Nenner darf maximal eine komplexe Zahl sein. Mit realroots(ausdruck) werden relle Nullstellen eines Polynom-Ausdruckes bzw. einer Polynom-Gleichung berechnet. Die Koeffizienten im Ausdruck müssen literal (als Zahlen) angegeben sein, die Verwendung von symbolischen Konstanten wie %pi ist nicht möglich. 251

252 4 wxmaxima Mit find_root(ausdruck, Variable, Startwert, Endwert) wird die Nullstelle eines Ausdruckes bzw. einer Funktion für die angegebene Variable in dem durch den Start- und Endwert angegebenenen geschlossenen Intervall gesucht. Als Ausdruck kann auch eine Gleichung angegeben werden, in diesem Fall wird nach der Nullstelle von Linke Seite - Rechte Seite gesucht. Wenn das Intervall eine oder mehrere Nullstellen enthält, wird garantiert mindestens eine davon gefunden. Die Invervallenden Startwert und Endwert müssen unterschiedliche Vorzeichen haben. Im Beispiel werden zunächst mit allroots() alle komplexen und reellen Nullstellen von x 3 1 berechnet, anschließend mit realroots() nur die reellen Nullstellen, danach mit find_root() die reellen Nullstellen im Intervall [0,5; 1,5]. Der letzte Aufruf von find_root() verwendet ein fehlerhaftes Intervall, in dem keine Lösung gefunden werden kann. 1 a l l r o o t s ( x ^3 1); 2 r e a l r o o t s ( x ^3 1); 3 f i n d _ r o o t ( x^3 1, x, 0. 5, 1. 5 ) ; 4 f i n d _ r o o t ( x^3 1, x, 2. 0, 3. 0 ) ; 252

253 4.14 Numerische Lösungen Abbildung 4.41: Numerische Integration Numerische Integration Kann Maxima eine Funktion nicht analytisch integrieren, kann ein bestimmtes Integral durch numerische Näherungsverfahren berechnet werden. quad_qags(ausdruck, Variable, Startwert, Endwert) berechnet eine numerische Lösung. Zurückgegeben wird ein Feld aus 4 Werten: 1. Ergebnis der Integration, 2. erwarteter absoluter Fehler des Ergebnisses, 3. Anzahl der ausgeführten Funktionswerte-Berechnungen, 4. Fehlercode (0: kein Fehler). 1 e1 : 1 / ( x+x *( l o g ( x ) ) ^ 2 ) ; 2 i n t e g r a t e ( e1, x ) ; 3 quad_qags ( e1, x, 0. 5, 1. 5 ) ; 253

254 4 wxmaxima Weitere Fehlercodes: 0: Es ist kein Fehler aufgetreten. 1: Die Intervall-Anzahl wurde zu groß. 2: Es traten starke Rundungsfehler auf. 4: Das Näherungsverfahren konvergiert nicht. 5: Das Integral ist entweder divergent oder die Näherung konvergiert zu langsam. 6: Die Eingabedaten sind ungültig bzw. nicht verwendbar. 254

255 4.14 Numerische Lösungen Abbildung 4.42: Numerische Näherung der Eigenwerte Eigenwerte quadratischer Matrizen Kann Maxima mit eigenvectors() keine Lösung finden z. B. weil die analytische Nullstellenbestimmung für das charakteristische Polynom nicht möglich ist kann man mit allroots(charpoly(matrix, Variable)) eine numerische Näherung der Eigenwerte suchen. 1 M: m a t r i x ( 2 [ 3, 5, 7, 9, 1 1 ], 3 [ 1 3, 17, 23, 29, 3 1 ], 4 [ 3 7, 41, 43, 47, 5 3 ], 5 [ 5 9, 61, 67, 71, 7 3 ], 6 [ 7 9, 83, 87, 89, 9 1 ], 7 ) ; 8 a l l r o o t s ( c h a r p o l y (M, lambda ) ) ; 255

256 4 wxmaxima 4.15 Messwerte fitten Ist ein Satz von Messwerten vorhanden, kann mit lsquares_estimates(daten,variablen,funktion,koeffizienten[,optionen]) versucht werden, die Daten durch die vorgegebene Funktion anzunähern. Dabei werden bestimmte Koeffizienten der Funktion so gewählt, dass die Summe der quadrierten Differenzen zwischen den y-werten der Punkte und der Funktion minimiert wird. Die Daten werden in Form einer Matrix (im Beispiel M) eingegeben. Jede Zeile enthält die Daten für einen Messpunkt. Die Liste Variablen enthält die Variablennamen für die Spalten der Matrix (im Beispiel x und y. Als Funktion wird eine Funktionsgleichung angegeben, die den prinzipiellen Kennlinienverlauf angibt (im Beispiel y = mx + n). Die Koeffizienten sind die Liste der Funktionsparameter, die an die Messwerte angepasst werden sollen (im Beispiel m und n). 1 p d a t a : [ 2 [ 525.0, 0. 0 ], 3 [ 470.0, 0. 5 ], 4 [ 420.0, 0. 7 ], 5 [ 330.0, 0. 9 ], 6 [ 220.0, 1. 1 ], 7 [ 120.0, 1. 2 ], 8 [ 0. 0, 1. 3 ] 9 ] $ 10 M: a p p l y ( matrix, p d a t a ) $ 11 a p p l y ( matrix, p d a t a ) $ 12 g l o b a l s o l v e : t r u e $ 13 l s q u a r e s _ e s t i m a t e s (M, [ x, y ], y=m*x+n, [m, n ] ) ; 14 p l o t 2 d ( 15 [ [ d i s c r e t e, p d a t a ], m*x+n ], 16 [ x, 600, 0 ], [ y, 0, 1. 5 ], 17 [ s t y l e, [ p o i n t s ], [ l i n e s ] ], 18 [ legend, " Messpunkte ", " R e g r e s s i o n s g e r a d e " ], 19 [ g n u p l o t _ p r e a m b l e, " s e t key l e f t t o p ; " ] 20 ) ; 256

257 4.15 Fitten Abbildung 4.43: Messpunkte und gefittete Gerade Im Beispiel wird schon einmal auf die Plot-Funktion plot2d zum zweidimensionalen Plotten vorgegriffen, siehe Abschnitt 4.17 auf Seite 261. Geplottet werden die einzelnen Messpunkte und die Regressionsgerade. Die Geraden-Approximation ist für diesen Kurvenverlauf nicht die geeignetste. Sie wurde gewählt, um das Beispiel einfach und verständlich zu halten. 257

258 4 wxmaxima 4.16 Programmierung Sequentielle Abarbeitung Mit (Anweisung1, Anweisung2... ) werden die in Klammern geschriebenen durch Kommata getrennten Anweisungen sequentiell abgearbeitet. Das Ergebnis der letzten Anweisungen ist dann auch das Ergebnis der gesamten Sequenz Block mit lokalen Variablen Mit block([variablen], Anweisung(en)) werden mehrere sequentielle Anweisungen zu einem Block zusammengefasst, dabei werden lokale Variablen bereitgestellt. Vor der Abarbeitung der Anweisungen werden für die benannten Variablen evtl. vorhandene gebundene Symbole gesichert, anschließend die gebundenen Symbole entfernt. Nach Abarbeitung der Anweisungen werden die gelisteten Symbole erneut entfernt, anschließend wird der am Block-Beginn gesicherte Zustand wiederhergestellt. Die Wirkung entspricht dem Mechanismus lokaler Variablen aus anderen Programmiersprachen. Blöcke werden häufig für die Definition von Funktionen eingesetzt if-anweisung Bei der Wertbestimmung kann mit if Bedingung then Ausdruck1 else Ausdruck2 verzweigt werden. Ist die Bedingung erfüllt, ist das Ergebnis der if -Anweisung der Wert Ausdruck1, andernfalls Ausdruck2. Für beide Ausdrücke kann auch eine Sequenz bzw. ein Block eingesetzt werden. 258

259 4.16 Programmierung Abbildung 4.44: Beispiel für if-anweisung in Funktionsdefinition Im Beispiel wird die Funktion parallel() zur Berechnung des Gesamtwiderstandes zweier parallel geschalteter Widerstände so variiert, dass der unbestimmte Ausdruck 0 0 nicht mehr berechnet wird, wenn beide Widerstände den Wert 0 haben. Im Prinzip würde hier eine if-anweisung genügen (ein Widerstand ungleich 0), es wird aber auch die Verschachtelung von if-anweisungen vorgeführt. Einrückungen sind zwar optional, werden aber empfohlen. Einrückungen werden so vorgenommen, dass die Programmstruktur gut erkennbar wird. Beginn und Ende einer Programmierstruktur haben gleiche Einrückungstiefe, der Inhalt ist etwas tiefer eingerückt. 1 p a r a l l e l ( x, y ) : = ( x*y ) / ( x+y ) $ 2 p a r a l l e l ( 3, 5 ) ; 3 p a r a l l e l ( 0, 0 ) ; 4 p a r a l l e l ( x, y ) : = ( 5 i f x > 0 t h e n ( 6 i f y > 0 t h e n ( x*y ) / ( x+y ) 7 e l s e 0 8 ) 9 e l s e 0 10 ) $ 11 p a r a l l e l ( 3, 5 ) ; 12 p a r a l l e l ( 0, 0 ) ; 259

260 4 wxmaxima for-schleife Mit for Variable: Startwert thru Endwert step Schrittweite do Anweisung wird eine Anweisung (auch eine Sequenz oder ein Block) mehrfach ausgeführt. Dabei wird der Variablen zunächst der Startwert zugewiesen. Solange die Variable kleiner oder gleich dem Limit ist (für positive Schrittweiten) oder größer oder gleich dem Limit (negative Schrittweiten) wird die Anweisung ausgeführt und anschließend die Variable um die angegebene Schrittweite geändert. Falls die Schrittweite 1 ist, kann step Schrittweite weggelassen werden while-schleife Mit for Variable: Startwert step Schrittweite while Bedingung do Anweisung wird der Variablen der angegebene Startwert zugewiesen. Vor jedem Schleifendurchlauf wird getestet, ob die Bedingung erfüllt ist. Falls ja, wird die Anweisung (auch Sequenz oder Block) ausgeführt und die Variable um die angegebene Schrittweite geändert. Ist die Bedingung nicht erfüllt, wird die Schleife beendet. Die Angabe step Schrittweite ist optional, die Variable kann auch im Schleifenblock modifiziert werden. Die Variante for Variable: Startwert step Schrittweite unless Bedingung do Anweisung ist äquivalent zu for-while-do, jedoch wird der Schleifenkörper solange asugeführt, wie die Bedingung nicht erfüllt ist. Alle drei Schleifen (for, while und unless) liefern als Ergebnis das Atom done. Mit einer return-anweisung im Schleifenkörper kann explizit ein Rückgabewert festgelegt werden. Steht der Schleifenkörper in einem Block, verlässt das return nur den Schleifenkörper, nicht aber den umgebenden Block dies ist ein Unterschied zu vielen anderen Programmiersprachen, in denen ein return die jeweilige Funktion verlässt. Auch der Rückgabewert gilt nur für die Schleifenanweisung und nicht für den umgebenden Block. 260

261 4.17 2D-Plotten D-Plotten plot2d-anweisung Mit Abbildung 4.45: Erster Plot plot2d(plot(s)[,x-bereich][,option(en)]) wird zweidimensional geplottet, entweder in ein GnuPlot-Fenster oder als Bild, das in die wxmaxima-sitzung eingebettet wird. Die erste Angabe ist die zu plottende Funktion bzw. der zu plottende Ausdruck. Dieser Ausdruck sollte nur eine unabhängige Variable aufweisen (im Beispiel x). In der Bereichsangabe für die x-achse steht zunächst der Name der unabhängigen Variablen, anschließen der Startwert und der Endwert des Intervalles. 1 p l o t 2 d ( s i n ( x ), [ x, 0, 2*% p i ] ) ; 261

262 4 wxmaxima Abbildung 4.46: Vorgegebener Druckbereich Druckbereich festlegen Die Angabe des Druckbereiches erfolgt nach der Bereichsangabe für die x-variable. Im Beispiel werden Wertebereiche für x- und y-achse vorgegeben. 1 p l o t 2 d ( s i n ( x ), [ x, 0, 2*% p i ], [ x, 1, 7 ], [ y, 2, 2] ) ; In [x, 0, 2*%pi] ist x der Name der unabhängigen Variable in sin(x). In [x, -1, 7] und [y, -2, 2] geben x und y an, dass die x- bzw. y-achse konfiguiert werden soll. 262

263 4.17 2D-Plotten Abbildung 4.47: Mehrere Kurven Mehrere Kurven in einem Diagramm Sollen mehrere Kurven in ein Diagramm gezeichnet werden, wird eine Liste der zu plottenden Funktionen bzw. Ausdrücke angegeben. Im Beispiel werden sin x und cosx geplottet. 1 p l o t 2 d ( [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], [ x, 1,7], [ y, 2, 2 ] ) ; 263

264 4 wxmaxima Abbildung 4.48: Angepasste Achsenbeschriftungen Achsenbeschriftung Mit den Optionen [xlabel, "x-achsen-beschriftung"] [ylabel, "y-achsen-beschriftung"] werden die Achsenbeschriftungen für x- und y-achse festgelegt. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ x l a b e l, "AB" ], [ y l a b e l, "CD" ] 5 ) ; 264

265 4.17 2D-Plotten Abbildung 4.49: Mehrere Kurven ohne Legende Legende unterbinden Mit der Option [legend, false] wird keine Legende eingetragen. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ legend, f a l s e ] 5 ) ; 265

266 4 wxmaxima Abbildung 4.50: Plot mit geänderter Legende Text für Legende ändern Mit der Option [legend, "Beschriftung"...] kann der Text der Legende geändert werden. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ legend, " S i n u s ", " Kosinus " ] 5 ) ; 266

267 4.17 2D-Plotten Abbildung 4.51: Legende links oben platziert Legende platzieren Mit der Option [gnuplot_preamble, "Option(en)"] können Optionen an GnuPlot übergeben werden. Hier können Anweisungen in Gnu- Plot-Syntax angegeben werden. Um mehrere Anweisungen anzugeben, werden diese mit Semikolon getrennt. Mit set key left top; wird die Legende platziert. Mögliche Werte: left / right, top / bottom. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ g n u p l o t _ p r e a m b l e, " s e t key l e f t t o p ; " ] 5 ) ; 267

268 4 wxmaxima Abbildung 4.52: Diagramm mit Gitter Gitter hinterlegen Mit der GnuPlot-Option set grid; wird das Gitter eingeschaltet. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ g n u p l o t _ p r e a m b l e, " s e t g r i d ; " ] 5 ) ; 268

269 4.17 2D-Plotten Abbildung 4.53: Nutzerdefinierte Gitterabstände Gitterabstände festlegen Mit den GnuPlot-Optionen set xtics Wert set ytics Wert werden die Gitterabstände in x- und y-richtung gesetzt. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ g n u p l o t _ p r e a m b l e, " s e t g r i d ; s e t x t i c s 0. 5 ; s e t y t i c s ; " ] 5 ) ; 269

270 4 wxmaxima Abbildung 4.54: Text-Label eingefügt Zusätzliche Text-Label einfügen Mit der GnuPlot-Option set label "Text" at x,y wird ein Text-Label an die angegebenen Koordinaten gesetzt. Die Koordinaten geben den linken unteren Punkt des Labels an. Unterer Punkt bedeutet hier: Grundlinie, d. h. Unterlängen wie bei den Buchstaben g und y gehen tiefer. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ g n u p l o t _ p r e a m b l e, " s e t l a b e l \ " T e s t \ " a t 0. 5, 1. 5 ; " ] 5 ) ; 270

271 4.17 2D-Plotten Abbildung 4.55: Plot mit Titel Titel für den Plot festlegen Mit der GnuPlot-Option set title "Titel" wird der Titel für den Plot festgelegt. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ g n u p l o t _ p r e a m b l e, " s e t t i t l e \ " Zwei F u n k t i o n e n \ " ; " ] 5 ) ; 271

272 4 wxmaxima Abbildung 4.56: Geänderter Stil Zeichenstil, Linienbreit und Farbe Mit der Option [style, Stilbeschreibung(en)] wird der Zeichenstil für die Plots festgelet. Das Argument für style sind aufeinanderfolgende Stilbeschreibungen, eine für jeden Plot. Jede Stilbeschreibung ist wiederum eine Liste mit den drei Elementen Stil, Linien-/Punktdicke, Farbe. Als Stil kann lines für einen Linienzug oder points für das Zeichnen einzelner Punkte (einsetzbar z. B. für Messpunkte) angegeben werden. Die Dicke gibt die Liniendicke in Punkten als ganzzahliger Wert an. Die Farbe wird als Farbcode (ganzzahliger Wert) angegeben. 1 p l o t 2 d ( 2 [ s i n ( x ), cos ( x ) ], [ x,0,2*% p i ], 3 [ x, 1,7], [ y, 2,2], 4 [ s t y l e, [ l i n e s, 2, 4 ], [ p o i n t s, 3, 5] ] 5 ) ; 272

273 4.17 2D-Plotten Abbildung 4.57: Logarithmisch geteilte x-achse Logarithmische Skalenteilung Mit den Plot-Optionen [logx] [logy] wird die x- bzw. y-achse logarithmisch geteilt. Im Beispiel wird zunächst in GT die Spannungsübertragungsfunktion G T eines RC- Tiefpasses gespeichert. In AGT wird der Betrag G T gespeichert. Geplottet wird dieser Betrag, umgerechnet in db. Die Kreisfrequenz ω ist dabei auf die Grenzkreisfrequenz ω G normiert und die x-achse logarithmisch geteilt. 1 GT: (1/(% i *w*c ) ) / ( R+1/(% i *w*c ) ) ; 2 AGT: f u l l r a t s i m p ( c a bs (GT ) ) ; 3 log10 ( x ) : = l o g ( x ) / l o g ( ) ; 4 p l o t 2 d ( 5 a t ( * log10 (AGT), [w=x / ( R*C ) ] ), 6 [ x, , ], 7 [ x l a b e l, " f / f_g " ], 8 [ y l a b e l, " G( jw ) " ], 9 [ logx ] 10 ) ; 273

274 4 wxmaxima Abbildung 4.58: Diskrete Punkte Datenpunkte plotten Um diskrete Datenpunkte zu plotten, wird als Plot ein Objekt [discrete, [Punkt(e)] ] verwendet. Die Punkte werden jeweils als Liste mit 2 Elementen (x- und y-wert) angegeben. 1 p l o t 2 d ( 2 [ 3 d i s c r e t e, 4 [ 5 [ 525.0, 0. 0 ], [ 470.0, 0. 5 ], [ 420.0, 0. 7 ], 6 [ 330.0, 0. 9 ], [ 220.0, 1. 1 ], [ 120.0, 1. 2 ], 7 [ 0. 0, 1. 3 ] 8 ] 9 ], 10 [ x, 600,0], [ y, 0, 1. 5 ], 11 [ s t y l e, [ p o i n t s, 1, 1 ] ] 12 ) ; 274

275 4.17 2D-Plotten Abbildung 4.59: Punkte und Linien Sollen die Datenpunkte mehrfach verwendet werden z. B. um einmal die Punkte zu zeichnen und einmal einen Linienzug kann eine Variable (im Beispiel pdata ) für die Punktdaten angelegt werden. Hinweis: Nennen Sie das Datenobjekt keinesfalls points, vermeiden Sie auch die Namen aller anderen Plot-Optionen! 1 p d a t a : [ 2 d i s c r e t e, [ 3 [ 525.0, 0. 0 ], [ 470.0, 0. 5 ], [ 420.0, 0. 7 ], 4 [ 330.0, 0. 9 ], [ 220.0, 1. 1 ], [ 120.0, 1. 2 ], 5 [ 0. 0, 1. 3 ] 6 ] 7 ] $ 8 p l o t 2 d ( 9 [ pdata, p d a t a ], 10 [ x, 600,0], [ y, 0, 1. 5 ], 11 [ s t y l e, [ p o i n t s, 2, 2 ], [ l i n e s, 1, 1 ] ], 12 [ legend, " Punkte ", " L i n i e n " ] 13 ) ; 275

276 4 wxmaxima Abbildung 4.60: Parametrischer Plot mit Vorgabe für Skalen Parametrische Plots Mit plot2d([parametric, f x (t), f y (t), [t, Startwert, Endwert] ]) wird parametrisch geplottet. Dabei durchläuft die Parametervariable (im Beispiel t) ein durch Startwert und Endwert gegebenes Intervall. Die x- und y-werte für ein bestimmtes t werden mit den Funktionen f x (t) und f y (t) berechnet. Im zweiten Teil des Beispieles wird gezeigt, wie für einen parametrischen Plot ein Skalenbreich für x- und y-achse vorgegeben wird. 1 p l o t 2 d ( [ p a r a m e t r i c, cos ( t ), s i n ( t ), [ t, %p i / 4, (7*% p i ) / 4 ] ] ) ; 2 3 p l o t 2 d ( 4 [ p a r a m e t r i c, cos ( t ), s i n ( t ), [ t, %p i / 4, (7*% p i ) / 4 ] ], 5 [ x, 2, 2 ], 6 [ y, 2, 2] 7 ) ; 276

277 4.18 3D-Plotten Abbildung 4.61: 3D-Plot D-Plotten Der plot3d-befehl Mit plot3d(plot(s)[,bereich(e)][,optionen]) wird ein dreidimensionaler Plot erzeugt. Im Beispiel wird sin(x) sin(y) im Bereich π 2 x π 2 π 2 y π 2 geplottet. Es ist zu sehen, dass eine ganze Reihe Feature von wxmaxima automatisch eingeschaltet wurden, die bei GnuPlot erst einzeln aktiviert werden müssten, z. B. das Einfärben entsprechend dem Höhenwert mit dem GnuPlot-pm3d-Mechanismus und das Nicht-Zeichnen verdeckter Kurventeile. 1 p l o t 3 d ( 2 s i n ( x )* s i n ( y ), 3 [ x, %p i / 2, %p i / 2 ], [ y, %p i / 2, %p i / 2 ] 4 ) ; 277

278 4 wxmaxima Abbildung 4.62: Vorgegebener Höhenbereich Höhenbereich festlegen Mit der Option [z, Startwert, Endwert] unmittelbar nach x- und y-bereich wird der Höhenbereich festgelegt, im Beispiel auf 2 z 2. 1 p l o t 3 d ( 2 s i n ( x )* s i n ( y ), 3 [ x, %p i / 2, %p i / 2 ], [ y, %p i / 2, %p i / 2 ], [ z, 2, 2] 4 ) ; 278

279 4.18 3D-Plotten Abbildung 4.63: Vorgegebene Stützstellenanzahl Stützstellen-Anzahl festlegen Mit der Option [grid, n x, n y ] wird die Anzahl der Intervalle in x- und y-richtung festgelegt, im Beispiel 100 in beiden Richtungen. 1 p l o t 3 d ( 2 s i n ( x )* s i n ( y ), 3 [ x, %p i / 2, %p i / 2 ], [ y, %p i / 2, %p i / 2 ], 4 [ g r i d, 100, 100] 5 ) ; 279

280 4 wxmaxima Abbildung 4.64: 3D-Plot ohne Einfärbung Einfärbung abschalten Mit der Option [palette, false] wird die Einfärbung entsprechend dem Höhenwert deaktiviert. 1 p l o t 3 d ( 2 s i n ( x )* s i n ( y ), 3 [ x, %p i / 2, %p i / 2 ], [ y, %p i / 2, %p i / 2 ], 4 [ p a l e t t e, f a l s e ] 5 ) ; 280

281 4.18 3D-Plotten Abbildung 4.65: Andere Palette zum Einfärben Farbpalette auswählen] Mit der Option [palette, get_plot_option(palette, Palette)] kann eine andere Palette (Index von ) zum Einfärben gewählt werden. 1 p l o t 3 d ( 2 s i n ( x )* s i n ( y ), 3 [ x, %p i / 2, %p i / 2 ], [ y, %p i / 2, %p i / 2 ], 4 [ p a l e t t e, g e t _ p l o t _ o p t i o n ( p a l e t t e, 3 ) ] 5 ) ; 281

282 4 wxmaxima I ges I 3,4,5 I 5 I 2 R 1 R 3 I 4 U q R 4 R 2 R 5 Abbildung 4.66: Beispielschaltung 4.19 Anwendungsbeispiele aus der Elektrotechnik Schaltungsanalyse mit Ersatzschaltbildern Für die Beispielschaltung entsprechend Abb mit U q = 10V R 1 = 11Ω R 2 = 12Ω R 3 = 13Ω R 4 = 14Ω R 5 = 15Ω soll I 4 sowohl analytisch als auch wertmäßig ermittelt werden. Für die manuelle Berechnung mit Ersatzschaltbildern würde man folgendermaßen vorgehen: Zusammenfassung R 4 und R 5 Zusammenfassung R 3 und R 4,5 R 4,5 = R 4 R 5 = R 4R 5 R 4 + R 5 R 3,4,5 = R 3 + R 4,5 Zusammenfassung R 2 und R 3,4,5 Zusammenfassung Gesamtwiderstand R 2,3,4,5 = R 2 R 3,4,5 = R 2R 3,4,5 R 2 + R 3,4,5 R ges = R 1 + R 2,3,4,5 282

283 4.19 Beispiele Berechnung des Gesamtstromes I ges = U q R ges Aufteilung des Gesamtstromes I 3,4,5 = R 2 R 2 + R 3,4,5 I ges Aufteilung von I 3,4,5 I 4 = R 5 R 4 + R 5 I 3,4,5 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.5: Schaltungsberechnung mit Ersatzschaltbildern 1 p a r a l l e l ( a, b ) : = ( a *b ) / ( a+b ) $ 2 R45 : p a r a l l e l ( R4, R5 ) $ 3 R345 : R3+R45$ 4 R2345 : p a r a l l e l ( R2, R345 ) $ 5 Rges : R1+R2345$ 6 I g e s : Uq / Rges$ 7 I345 : I g e s *R2 / ( R2+R345 ) $ 8 d i s p ( " Loesung ohne V e r e i n f a c h u n g " ) $ 9 I4 : I345 *R5 / ( R4+R5 ) ; 10 d i s p ( " V e r e i n f a c h t e Loesung " ) $ 11 f u l l r a t s i m p ( I4 ) ; 12 d i s p ( " Z a h l e n w e r t " ) $ 13 a t ( 14 I4, 15 [ Uq=10.0, R1 = , R2 = , R3 = , R4 = , R5 = ] 16 ), numer ; 283

284 4 wxmaxima Abbildung 4.67: Ergebnis nach Einsetzen Bei den meisten Anweisungen wird hier auf eine Ausgabe des Ergebnisses verzichtet (Die Anweisungen werden mit $ anstelle von ; beendet). Ausgegeben wird nur das Endergebnis, einmal ohne Vereinfachung, einmal mit Vereinfachung und einmal als Zahlenwert. Für I 4 erhalten wir die noch nicht vereinfachte Formel I 4 = U q R 2 R 5 ( ( ) ) R4 ) R (R 5 + R 4 )( R4 R R R R 4 +R 5 + R 3 + R 4 +R +R R 4 R 5 + R 1 R 4 +R +R 3 +R 2 5 Diese kann vereinfacht werden zu: U q R 2 R 5 I 4 = ((R 2 + R 1 )R 4 + (R 2 + R 1 )R 3 + R 1 R 2 )R 5 + ((R 2 + R 1 )R 3 + R 1 R 2 )R 4 Als Zahlenwert ergibt sich: I 4 = 103,87mA 284

285 4.19 Beispiele R 1 R 3 I 4 U q R 2 R 4 R 5 I A I B I C Abbildung 4.68: Maschenströme Gleichungssystem - Maschenstromanalyse Die Aufgabenstellung aus dem vorangegangenen Abschnitt 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 I A, I B und I C ) aufgestellt (Zeilen ) und gelöst (Zeile 5): 0 = I A (R 1 + R 2 ) I B R 2 U q 0 = I B (R 2 + R 3 + R 4 ) I A R 2 I C R 4 0 = I C (R 4 + R 5 ) I B R 4 Der Strom I 4 wird in Zeile 7 berechnet als: I 4 = I B I C Das Flag globalsolve (gesetzt in Zeile 4) sorgt dafür, dass der solve()-befehl die Lösungen nicht nur anzeigt sondern auch gebundene Symbole für die Lösungen erzeugt (d. h. Maxima merkt sich die Lösungsterme für IA, IB und IC, um sie später wiederverwenden zu können). Listing 4.6: Lineares Gleichungssystem 1 g l 1 : 0 = IA *(R1+R2 ) IB*R2 Uq$ 2 g l 2 : 0 = IB *(R2+R3+R4 ) IA*R2 IC*R4$ 3 g l 3 : 0 = IC *(R4+R5 ) IB*R4$ 4 g l o b a l s o l v e : t r u e $ 5 s o l v e ( [ gl1, gl2, g l 3 ], [ IA, IB, IC ] ) $ 6 d i s p ( " A n a l y t i s c h e Loesung : " ) $ 7 I4 : f u l l r a t s i m p ( IB IC ) ; 8 d i s p ( " Z a h l e n w e r t : " ) $ 9 a t ( 10 I4, 11 [ Uq=10.0, R1 = , R2 = , R3 = , R4 = , R5 = ] 12 ), numer ; 285

286 4 wxmaxima Abbildung 4.69: Lineares Gleichungssystem gelöst 286

287 4.19 Beispiele U q2 R 1 R I q1 I q2 R 2 6 R 6 7 R 10 I 10 U R10 U q1 R 3 R 4 R 8 R 9 4 R 5 5 R 11 U q3 0 Abbildung 4.70: Beispielschaltung für die Knotenspannungsanalyse Gleichungssystem - Knotenspannungsanalyse Das Verfahren zur Knotenspannungsanalyse ist bereits in Abschnitt auf Seite 126 beschrieben. Für jeden Knoten ist die vorzeichenbehaftete Summe aller abfließenden Ströme 0, dies ergibt 7 Gleichungen: 0 = U 1 U 2 R 7 + U 1 R 10 0 = U 2 U 1 + I q2 + U 2 U 5 + U 2 U 3 +U q2 R 7 R 6 R 1 0 = U 3 U 2 U q2 R 1 + U 3 U 4 +U q1 R 2 I q1 0 = U 4 U 5 + U 4 U 6 + U 4 U 3 U q1 R 5 R 3 R 2 0 = U 5 U 4 + U 5 U 6 + U 5 U 2 + U 5 U 7 + U 5 +U q3 R 5 R 4 R 6 R 8 R 11 0 = I q1 + U 6 U 4 R 3 + U 6 U 5 R 4 0 = U 7 + U 7 U 5 I q2 R 9 R 8 287

288 4 wxmaxima Abbildung 4.71: Knotenspannungsanalyse Im Gegensatz zu Scilab kann in Maxima auf die Matrizenschreibweise verzichtet werden, die Gleichungen werden direkt eingegeben. 288

289 4.19 Beispiele 1 / * Gleichungen * / 2 gl01 : 0 = U1 / R10 + ( U1 U2 ) / R7 $ 3 gl02 : 0 = ( U2 U1 ) / R7 + ( U2 U5 ) / R6 + ( U2 U3+Uq2 ) / R1 + Iq2 $ 4 gl03 : 0 = ( U3 U4+Uq1 ) / R2 Iq1 + ( U3 U2 Uq2 ) / R1 $ 5 gl04 : 0 = ( U4 U3 Uq1 ) / R2 + ( U4 U6 ) / R3 + ( U4 U5 ) / R5 $ 6 gl05 : 0 = ( U5 U4 ) / R5 + ( U5 U6 ) / R4 + ( U5 U2 ) / R6 + ( U5 U7 ) / R8 7 + ( U5+Uq3 ) / R11 $ 8 gl06 : 0 = Iq1 + ( U6 U4 ) / R3 + ( U6 U5 ) / R4 $ 9 gl07 : 0 = U7 / R9 + ( U7 U5 ) / R8 Iq2 $ / * GLeichungen nach U1... U7 a u f l o e s e n, Formeln merken * / 12 g l o b a l s o l v e : t r u e $ 13 s o l v e ( 14 [ gl01, gl02, gl03, gl04, gl05, gl06, gl07 ], 15 [ U1, U2, U3, U4, U5, U6, U7 ] 16 ) $ / * I10 aus U1 und R10 a u s r e c h n e n * / 19 I10 : U1 / R10 $ / * Gegebene Werte e i n s e t z e n * / 22 a t ( 23 I10, 24 [ 25 R1 = , R2 =1.0 e3, R3 =0.5 e3, R4 =1.0 e3, R5 =1.5 e3, 26 R6 =2.0 e3, R7 =1.5 e3, R8 =2.0 e3, R9 =2.5 e3, R10 =3.0 e3, 27 R11 =2.5 e3, 28 Uq1 = 1. 5, Uq2 = 3. 0, Uq3 = 4. 5, 29 Iq1 =2.0 e 3, Iq2 =4.0 e 3 30 ] 31 ) ; 289

290 4 wxmaxima R 1 i i 2 i C U q C R 2 Abbildung 4.72: Umladevorgang Differentialgleichung - Einschaltvorgang Für eine Schaltung entsprechend Abb sei der Schalter lange genug geöffnet, so dass der Kondensator auf u C = U q aufgeladen ist. Zum Zeitpunkt t 0 = 0 wird der Schalter geschlossen. Gesucht ist der zeitliche Verlauf u C (t). Manuelle Lösung Folgende Gleichungen werden aufgestellt: i(t) = i 2 (t) + i C (t) i(t) = U q u C (t) R 1 i 2 (t) = u C(t) R 2 i C (t) = C du C dt Werden alle diese Gleichungen ineinander eingesetzt, ergibt sich: U q u C (t) R 1 = u C(t) R 2 +C du C dt Dies kann umgeformt werden zu 0 = R 1 R 2 C du C dt + (R 1 + R 2 )u C (t) U q R 2 290

291 4.19 Beispiele Der Ansatz u C (t) = U A e t/τ +U B du C dt = U A τ e t/τ ergibt beim Einsetzen 0 = U A τ R 1R 2 Ce t/τ + (R 1 + R 2 )U A e t/τ + (R 1 + R 2 )U B R 2 U q Durch Koeffizientenvergleich erhalten wir Daraus ergibt sich 0 = R 1R 2 C + R 1 + R 2 τ 0 = (R 1 + R 2 )U B R 2 U q τ = R 1R 2 C R 1 + R 2 U B = R 2 R 1 + R 2 U q U A muss aus den Randwerten bestimmt werden: u C (t 0 ) = U q U q = U A + R 2 R 1 + R 2 U q U A = U q R 2 R 1 + R 2 U q = R 1 R 1 + R 2 U q Somit ergibt sich als Gesamtlösung u C (t) = R 1 U q e t(r 1 +R 2 ) R 1 R 2C + R 2 U q R 1 + R 2 R 1 + R 2 291

292 4 wxmaxima Lösung mit Maxima Wird Maxima verwendet, kann die Gleichung U q u C (t) R 1 = u C(t) R 2 +C du C 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 du C dt ist die y-variable u C (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 u C = U q. Listing 4.7: Lösung einer Differentialgleichung 1 g l : ( Uq uc ) / R1=uc / R2+C* d i f f ( uc, t ) ; 2 l s g : ode2 ( gl, uc, t ) ; 3 rwp : i c 1 ( l s g, t =0, uc=uq ) ; Maxima findet hier die Lösung: u C (t) = e t R 2 C (R 2 U q e t R 2 C + t R 1C + R 1 U q ) (R 1 + R 2 )e t R 1 C Einige einfache Umformungen zeigen, dass diese Lösung identisch zu der manuell gefundenen Lösung ist. 292

293 4.19 Beispiele Abbildung 4.73: Lösung einer Differentialgleichung 293

294 4 wxmaxima Analyse eines Bandpasses R 1 C 2 U 1 C 1 R 2 U 2 Abbildung 4.74: Bandpass Aufgabenstellung Für den Bandpass entsprechend Abb mit R 1 = R 2 = 1kΩ C 1 = C 2 = 10nF sind folgende Größen gesucht: G ω m ω g,u und ω g,o Betragsmäßiger Maximalwert des Amplitudenganges Kreisfrequenz, bei der dieser Maximalwert auftritt Untere und obere Grenzkreisfrequenz Allgemeines Vorgehen Bei den Berechnungen am Bandpass wird folgendermaßen vorgegangen: Es wird die Übertragungsfunktion bestimmt. G(jω) = U A (jω) U E Aus der Übertragungsfunktion G(jω) wird der Amplitudengang bestimmt. G(ω) = G(jω) Es wird das Maximum des Amplitudenganges G m gesucht und die Kreisfrequenz ω m, bei der das Maximum auftritt. An der Extremwertstelle muss gelten: dg dω = 0 ω=ωm 294

295 4.19 Beispiele Wenn das Maximum des Amplitundenganges ermittelt ist, gilt für den Amplitudengang bei der Grenzfrequenz G g = G(ω) ω=ωg = 1 2 G m Zur Vereinfachung der weiteren Berechnungen wird eine Normierung der Frequenz ω auf die Maximums-Kreisfrequenz ω m vorgenommen. ω = x ω m g(x) = G(xω m ) = G(jxω m ) Um die Grenz-Kreisfrequenz ω g zu finden, muss die Nullstelle der Funktion gefunden werden. f (x) = g(x) G g Realisierung mit Maxima Da für das Netzwerk R 1 = R 2 und C 1 = C 2 vorgegeben ist, wird gleich R 1 = R 2 = R und C 1 = C 2 = C eingesetzt, um die Berechnungen zu vereinfachen. Folgende Variablen-/Symbolnamen werden verwendet: ω w R R Z C ZC G G G = G ag dg dω dag G m Gm ω m wm g(x) = G(jxω m ) nag 1 2 G m Gg Die Eingabedatei setzt sich folgendermaßen zusammen: Zunächst wird eine Funktion zur Berechnung des Gesamtwiderstandes einer Parallelschaltung zweier Widerstände definiert. 1 p a r a ( a, b ) : = ( a *b ) / ( a+b ) ; a b = a b a + b Anschließend wird ein Berechnungsterm für Z C angegeben und als Variable ZC gespeichert. Z C = 1 jωc 295

296 4 wxmaxima 2 ZC : 1/(% i *w*c ) ; In der Variablen G wird der Berechnungsterm für die Spannungsübertragungsfunction G(jω) gespeichert. G(jω) = Z C (R + Z C ) R + Z C (R + Z C ) R R + Z C 3 G: ( p a r a (ZC, R+ZC ) ) * ( R ) / ( ( R+ p a r a (ZC, R+ZC ) ) * ( R+ZC ) ) ; In der Variablen ag wird ein Berechnungsterm für G hinterlegt. Es wird angefordert, dass nach der Betragsbildung noch eine Vereinfachung erfolgen soll. Für komplexwertige Terme wird die Funktion cabs() für die Betragsbildung eingesetzt, nicht abs(). G(ω) = G(jω) 4 ag : f u l l r a t s i m p ( cabs (G ) ) ; In dag wird die Ableitung des Betrages nach der Kreisfrequenz hinterlegt, auch diese Formel soll vereinfacht werden. 5 dag : f u l l r a t s i m p ( d i f f ( ag, w ) ) ; Es wird nach einem ω gesucht, das die Gleichung löst. 7 s o l v e ( dag = 0, w ) ; 0 = d G(jω) dω Da die zu lösende Gleichung Polynome höherer Ordnung enthält, existieren aus mathematischer Sicht mehrere Lösungen der Gleichung, siehe Abb auf der nächsten Seite. Davon ist technisch nur eine Lösung ω m = 1 RC sinnvoll, da ω m einen positiven reellen Wert haben muss. 8 wm: 1 / ( R*C ) ; 296

297 4.19 Beispiele Abbildung 4.75: Mathematische Lösungen 297

298 4 wxmaxima Abbildung 4.76: Berechnung bis zum Wert von G(jω) bei der Grenzkreisfrequenz Die gefundene Lösung ω m wird in der Variablen wm gespeichert. 8 wm: 1 / ( R*C ) ; Die gefundene Lösung wird nun verwendet, um den Wert von G an der Stelle ω m zu berechnen. 10 Gm: a t ( ag, w=wm) ; Es ergibt sich (Ausgabe %o11): G m = G(jω) ω=ωm G m = 1 3 Bei der Grenzfrequenz muss die Amplitude auf den 1/ 2 -fachen Wert des Maximalwertes abfallen. 12 Gg : Gm/ s q r t ( 2 ) ; G g = 1 2 G m =

299 4.19 Beispiele Abbildung 4.77: Suche nach Grenzkreisfrequenzen Im Berechnungsterm für G(jω) wird ω normiert auf ω = x ω m, der neue von x abhängige Term wird in nag gespeichert. g(x) = G(jxω m ) 14 nag : r a t s u b s t ( x / ( R*C), w, ag ) ; Die Nullstellen von 0 = g(x) 1 2 G m werden numerisch gesucht. 16 x01 : f i n d _ r o o t ( nag Gg, x, , 1 ) ; 17 x02 : f i n d _ r o o t ( nag Gg, x, 1, ) ; Die Ergebnisse (Ausgaben %o17 und %o18) zeigen: ω g,u = 0,30278ω m ω g,o = 3,30278ω m 299

Dokumentation. Gnuplot

Dokumentation. Gnuplot Dokumentation Gnuplot Inhaltsverzeichnis 1 Einführung 1.1 Allgemeine Beschreibung des Programms 1.2 Installation des Programms 1.3 Deinstallation des Programms 2 Hauptteil (Befehle, Einstellungen und Anwendungsbeispiele)

Mehr

Grafische Darstellung von Daten gnuplot

Grafische Darstellung von Daten gnuplot Grafische Darstellung von Daten gnuplot Informationen /9/ RRZN Handbuch "gnuplot" Homepage; Download: http://www.gnuplot.info/ Tutorial: http://userpage.fu-berlin.de/~voelker/gnuplotkurs/gnuplotkurs.html

Mehr

Einführung in MATLAB

Einführung in MATLAB Kapitel 4 Einführung in MATLAB 41 Allgemeines MATLAB ist eine kommerzielle mathematische Software zur Lösung mathematischer Probleme und zur graphischen Darstellung der Ergebnisse Die Verfahren in MATLAB

Mehr

ax 2 + bx + c = 0, (4.1)

ax 2 + bx + c = 0, (4.1) Kapitel 4 Komplexe Zahlen Wenn wir uns auf die reellen Zahlen beschränken, ist die Operation des Wurzelziehens (also die Umkehrung der Potenzierung) nicht immer möglich. Zum Beispiel können wir nicht die

Mehr

Mathematik am Computer 7. Vorlesung: Matlab, Teil II

Mathematik am Computer 7. Vorlesung: Matlab, Teil II Mathematik am Computer 7. Vorlesung: Matlab, Teil II Helmut Harbrecht Universität Stuttgart 27. Januar 2011 Helmut Harbrecht (Universität Stuttgart) Mathematik am Computer 27. Januar 2011 1 / 35 Übersicht

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Version 0.3. Installation von MinGW und Eclipse CDT

Version 0.3. Installation von MinGW und Eclipse CDT Version 0.3 Installation von MinGW und Eclipse CDT 1. Stellen Sie fest, ob Sie Windows in der 32 Bit Version oder in der 64 Bit Version installiert haben. 2. Prüfen Sie, welche Java Runtime vorhanden ist.

Mehr

Eine Einführung in gnuplot

Eine Einführung in gnuplot Eine Einführung in gnuplot Julius Hannink Für den FSR Physik Göttingen 03.03.2011 Julius Hannink (FSR) GNUPLOT 03.03.2011 1 / 42 Ablauf 1 Motivation 2 Plotten 3 Speichern 4 Fitten 5 Was kann gnuplot noch?

Mehr

Versuchsauswertung mit Polynom-Regression in Excel

Versuchsauswertung mit Polynom-Regression in Excel Versuchsauswertung mit Polynom-Regression in Excel Aufgabenstellung: Gegeben sei die in Bild 1 gezeigte Excel-Tabelle mit Messwertepaaren y i und x i. Aufgrund bekannter physikalischer Zusammenhänge wird

Mehr

Grafiken für L A TEX. erstellen, bearbeiten und einbinden. Felix Koch L A TEX-User-Treffen Freiberg. 19. Juni 2011

Grafiken für L A TEX. erstellen, bearbeiten und einbinden. Felix Koch L A TEX-User-Treffen Freiberg. 19. Juni 2011 Felix Koch L A TEX-User-Treffen Freiberg erstellen, bearbeiten und einbinden 19. Juni 2011 Institut für Mechanik und Fluiddynamik Lampadiusstraße 4, 09596 Freiberg TOC 1. Motivation 2. Schnittstelle für

Mehr

Lua - Erste Schritte in der Programmierung

Lua - Erste Schritte in der Programmierung Lua - Erste Schritte in der Programmierung Knut Lickert 7. März 2007 Dieser Text zeigt einige einfache Lua-Anweisungen und welchen Effekt sie haben. Weitere Informationen oder eine aktuelle Version dieses

Mehr

MATLAB Grundlagen MATLAB. Grundlagen. Vorlesung Matlab/Simulink Dipl.-Ing. U. Wohlfarth

MATLAB Grundlagen MATLAB. Grundlagen. Vorlesung Matlab/Simulink Dipl.-Ing. U. Wohlfarth MATLAB Grundlagen Dipl.-Ing. U. Wohlfarth Was ist MATLAB? Softwarepaket zur numerischen Mathematik Speziell für Vektoren & Matrizen: MATrix LABoratory Basismodul für allgemeine Mathematik, Ein/Ausgabe,

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

VisiScan 2011 für cobra 2011 www.papyrus-gmbh.de

VisiScan 2011 für cobra 2011 www.papyrus-gmbh.de Überblick Mit VisiScan für cobra scannen Sie Adressen von Visitenkarten direkt in Ihre Adress PLUS- bzw. CRM-Datenbank. Unterstützte Programmversionen cobra Adress PLUS cobra Adress PLUS/CRM 2011 Ältere

Mehr

Handbuch DrahtexLabelwriter 3.0

Handbuch DrahtexLabelwriter 3.0 Handbuch DrahtexLabelwriter 3.0 Inhaltsverzeichnis INSTALLATION 3 DER PROGRAMMSTART 7 DIE PROGRAMMOBERFLÄCHE 8 DIE STARTSEITE DES PROGRAMMES 8 DIE PROGRAMMSYMBOLLEISTE 9 EIN NEUES PROJEKT ERSTELLEN 10

Mehr

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle CAS-Ansicht Computer Algebra System & Cas spezifische Befehle GeoGebra Workshop Handout 10 1 1. Einführung in die GeoGebra CAS-Ansicht Die CAS-Ansicht ermöglicht die Verwendung eines CAS (Computer Algebra

Mehr

Kurzanleitung. Arbeiten mit Word 2003 bei der Erstellung Wissenschaftlicher Arbeiten. Renate Vochezer rv@vochezer-trilogo.de

Kurzanleitung. Arbeiten mit Word 2003 bei der Erstellung Wissenschaftlicher Arbeiten. Renate Vochezer rv@vochezer-trilogo.de Kurzanleitung Arbeiten mit Word 2003 bei der Erstellung Wissenschaftlicher Arbeiten Renate Vochezer rv@vochezer-trilogo.de Inhaltsverzeichnis, Abbildungs- und Tabellenverzeichnis Inhaltsverzeichnis Abbildungsverzeichnis...

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

Vom Taschengeld zum Haushaltsbudget

Vom Taschengeld zum Haushaltsbudget Mithilfe eines Tabellenkalkulationsprogramms kannst du Tabellen erstellen, Daten erfassen und auswerten, Kosten ermitteln, Diagramme erstellen, Notendurchschnitte errechnen usw. Die Dateien können als

Mehr

Anwendungssoftware III (MATLAB)

Anwendungssoftware III (MATLAB) Anwendungssoftware III (MATLAB) Testvorbereitung Michael Liedlgruber Fachbereich Computerwissenschaften Universität Salzburg Sommersemester 2014 M. Liedlgruber Anwendungssoftware III (MATLAB) SS 2014 1

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Übung 4: Schreiben eines Shell-Skripts

Übung 4: Schreiben eines Shell-Skripts Aufgabenteil 1 Ziel der Übung Übung 4: Schreiben eines Shell-Skripts Anhand eines einfachen Linux-Skripts sollen die Grundlagen der Shell-Programmierung vermittelt werden. Das für die Bash-Shell zu erstellende

Mehr

3 FORMELN. 3.1. Formeln erzeugen

3 FORMELN. 3.1. Formeln erzeugen Formeln Excel effektiv 3 FORMELN 3.1. Formeln erzeugen Übungen: Quittung... 136 Kalkulation... 138 Bestellung... 128 Kassenbuch.. 132 Aufmaß... 152 Zum Berechnen verwendet Excel Formeln. Diese sind in

Mehr

Verschlüsseln von USB-Sticks durch Installation und Einrichtung von TrueCrypt

Verschlüsseln von USB-Sticks durch Installation und Einrichtung von TrueCrypt Verschlüsseln von USB-Sticks durch Installation und Einrichtung von TrueCrypt 1. Die Dateien truecrypt-4.3a.zip (http://www.truecrypt.org/downloads.php)und langpack-de- 1.0.0-for-truecrypt-4.3a.zip (http://www.truecrypt.org/localizations.php)

Mehr

Tipps & Tricks ArCon. Schriftfeldmakro. Informationszeitschrift der DI KRAUS & CO GesmbH Seite 18

Tipps & Tricks ArCon. Schriftfeldmakro. Informationszeitschrift der DI KRAUS & CO GesmbH Seite 18 Im Konstruktionsmodus ist in der rechten unteren Ecke des Blattes ein Schriftfeld zu sehen. Dieses können Sie verändern, indem Sie doppelt darauf klicken. Nun haben Sie, je nach Schriftfeld, verschiedene

Mehr

Kapitel 8: Graphische Darstellung von Funktionen in einer Variablen

Kapitel 8: Graphische Darstellung von Funktionen in einer Variablen Kapitel 8: Graphische Darstellung von Funktionen in einer Variablen Die graphische Darstellung von Funktionen in einer Variablen erfolgt durch den plot-. Mit plot können auch mehrere Funktionen in ein

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

cs106 Informatiklabor Teil 1: Java-Installation

cs106 Informatiklabor Teil 1: Java-Installation Herbstsemester 2009 cs106 Informatiklabor Teil 1: Java-Installation Florian Zeller Vorgehen und Ziele Wöchentlich eine Übung Unterstützte Bearbeitung während den Übungsstunden Austausch mit älteren Semestern

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

Wirtschafts-Informatik-Wietzorek Ulmweg 7 73117 Wangen 31.10.2009. Programm zur komfortablen Datenauswertung der JTL-WAWI Betaversion

Wirtschafts-Informatik-Wietzorek Ulmweg 7 73117 Wangen 31.10.2009. Programm zur komfortablen Datenauswertung der JTL-WAWI Betaversion Cubeinfo Programm zur komfortablen Datenauswertung der JTL-WAWI Betaversion Kurzbeschreibung Diese Software ist Freeware und darf weitergegeben werden. Zum Öffen der ZIP- Files benötigen Sie ein Kennwort,

Mehr

Hello World in Java. Der Weg zum ersten Java-Programm

Hello World in Java. Der Weg zum ersten Java-Programm Vorwort Hello World in Java Der Weg zum ersten Java-Programm Diese Anleitung wurde unter Windows XP verfasst. Grundsätzlich sollte sie auch unter späteren Windows Versionen wie Windows Vista oder Windows

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

Origin Tutorial. 1. Einleitung : 2.Importieren von Dateien in Origin :

Origin Tutorial. 1. Einleitung : 2.Importieren von Dateien in Origin : Origin Tutorial 1. Einleitung : Dieses Tutorial soll Einsteigern das Importieren und Plotten von Daten in Origin erklären. Außerdem werden Möglichkeiten zur Durchführung linearer Anpassungen, polynomieller

Mehr

Allgemeine Eigenschaften von SESAM Wawi Professional

Allgemeine Eigenschaften von SESAM Wawi Professional SESAM-Warenwirtschaft - die ersten Schritte Seite 1 Allgemeine Eigenschaften von SESAM Wawi Professional SESAM - Wawi Professional ist ein einfach zu bedienendes Programm zum Schreiben und Verwalten von

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

Bland-Altman-Plot in Excel 2010 erstellen

Bland-Altman-Plot in Excel 2010 erstellen Bland-Altman-Plot in Excel 2010 erstellen 1. Sie berechnen für jedes Messwertpaar den Mittelwert der beiden Methoden nach der Formel: (messwert_verfahren1 + messwert_verfahren2)/2, im Beispiel =(A5+B5)/2:

Mehr

syntax.tex Eine Übersicht

syntax.tex Eine Übersicht syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen

Mehr

Einführung in VisualBasic for Applications. Stefan Mahlitz

Einführung in VisualBasic for Applications. Stefan Mahlitz Einführung in VisualBasic for Applications Stefan Mahlitz Stefan Mahlitz Einführung in VBA 27.08.00 Inhaltsverzeichnis 1. Grundlagen der VisualBasic for Applications (VBA) Programmierung...2 1.1 Variablen,

Mehr

Installationsanleitung Expertatis

Installationsanleitung Expertatis Installationsanleitung Expertatis 1. Komplettinstallation auf einem Arbeitsplatz-Rechner Downloaden Sie die Komplettinstallation - Expertatis_Komplett-Setup_x32.exe für ein Windows 32 bit-betriebssystem

Mehr

Installationsanleitung für R

Installationsanleitung für R Installationsanleitung für R R ist eine Programmiersprache und Statistiksoftware zur Analyse von Daten und deren graphischer Darstellung. Um in R zu programmieren, ist zunächst die R- Basissoftware zu

Mehr

RÖK Typo3 Dokumentation

RÖK Typo3 Dokumentation 2012 RÖK Typo3 Dokumentation Redakteur Sparten Eine Hilfe für den Einstieg in Typo3. Innpuls Werbeagentur GmbH 01.01.2012 2 RÖK Typo3 Dokumentation Inhalt 1) Was ist Typo3... 3 2) Typo3 aufrufen und Anmelden...

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

10 Lesen und Schreiben von Dateien

10 Lesen und Schreiben von Dateien 10 Lesen und Schreiben von Dateien 10 Lesen und Schreiben von Dateien 135 10.1 Mit load und save Binäre Dateien Mit save können Variableninhalte binär im Matlab-Format abgespeichert werden. Syntax: save

Mehr

Excel Pivot-Tabellen 2010 effektiv

Excel Pivot-Tabellen 2010 effektiv 7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Aufgaben: 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge Objektorientierte Programmierung OOP Programmieren mit Java 1. Installation von Java 2. Erstes Java Programm Hello World 3. Dreimal Hallo Olten 2

Mehr

Kurzanleitung Zeichnungsmodul ACD Chemsketch 11.0 Freeware

Kurzanleitung Zeichnungsmodul ACD Chemsketch 11.0 Freeware U. Schütz Seite 1 von 7 Kurzanleitung Zeichnungsmodul ACD Chemsketch 11.0 Freeware Draw Durch Anklicken der Schaltfläche Draw wechselt das Programm in den Zeichnungsmodus. Optionen Show Grid Raster anzeigen

Mehr

Modularis Spector Datenerfassung

Modularis Spector Datenerfassung Modularis Spector Datenerfassung Version 1.1 1. Überblick Die aufgezeichneten Logdaten lassen sich über den USB-Anschluss des Modularis-Moduls abrufen. Dazu kann die hierfür entwickelte PC-Applikation

Mehr

L6. Operatoren und Ausdrücke

L6. Operatoren und Ausdrücke L6. Operatoren und Ausdrücke 1. Arithmetische Operatoren: +, -, *, /, %, --, ++ 2. Zuweisung-Operatoren: =, +=, -=, *=, /= 3. Vergleichsoperatoren: =, ==,!= 4. Logische Operatoren:!, &&, 5.

Mehr

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4 Arbeiten mit s Eine effiziente Programmierung mit PHP ohne seine s ist kaum vorstellbar. Diese Datenstruktur muss man verstanden haben, sonst brauchen wir mit weitergehenden Programmiertechniken wie der

Mehr

Inhalt Das Zeichnen von Strukturformeln mit ISIS/Draw

Inhalt Das Zeichnen von Strukturformeln mit ISIS/Draw Inhalt Das Zeichnen von Strukturformeln mit ISIS/Draw 2 A Zeichnen von Strukturen mit Hilfe der Vorlagen und Zeichenwerkzeuge 2 B Vorlagen von den Vorlageseiten verwenden 3 C Zeichnen von Bindungen und

Mehr

Anleitung zum Erstellen einer Library (Altium)

Anleitung zum Erstellen einer Library (Altium) Anleitung zum Erstellen einer Library (Altium) 1, Neue Library erstellen: File -> New -> Library -> Schematic Library Danach öffnet sich eine Zeichenfläche und am Rand eine Library Leiste. 1,1 Umbenennen

Mehr

Installationsanleitung Tivoli Storage Manager für Mac OS

Installationsanleitung Tivoli Storage Manager für Mac OS 11. März 2009, Version 1.0 Installationsanleitung für Mac OS X Verwaltungsdirektion Informatikdienste Installationsanleitung für Mac OS Inhaltsverzeichnis...1 Installation... 1 Voraussetzungen...1 Version

Mehr

Einführung in Automation Studio

Einführung in Automation Studio Einführung in Automation Studio Übungsziel: Der links abgebildete Stromlaufplan soll mit einer SPS realisiert werden und mit Automation Studio programmiert werden. Es soll ein Softwareobjekt Logik_1 in

Mehr

ANWENDERHANDBUCH. Zutritts-Konfigurator PC IT Mini, Version 1.1.2. Hilfsprogramm für Anlagen mit dezentraler Zutrittskontrolle

ANWENDERHANDBUCH. Zutritts-Konfigurator PC IT Mini, Version 1.1.2. Hilfsprogramm für Anlagen mit dezentraler Zutrittskontrolle ANWENDERHANDBUCH Hilfsprogramm für Anlagen mit dezentraler Zutrittskontrolle Zutritts-Konfigurator PC IT Mini, Version 1.1.2 ahb_pcitmini_art0010411_1v2.doc 2 06/2005 Inhaltsverzeichnis Übersicht...2 Systemvoraussetzungen...3

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Thomas Theis. Einstieg in Python. Galileo Press

Thomas Theis. Einstieg in Python. Galileo Press Thomas Theis Einstieg in Python Galileo Press 5 Inhalt Inhalt 1 Einführung 17 1.1 Vorteile von Python 17 1.2 Verbreitung von Python 18 1.3 Aufbau des Buchs 18 1.4 Übungen 20 1.5 Installation von Python

Mehr

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB.

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen. while-schleifen. Zahlarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen In der letzten Sitzung haben wir kennengelernt, wie wir Zahlen mit Operationen

Mehr

Microsoft Excel 2010 Matrix-Funktionen

Microsoft Excel 2010 Matrix-Funktionen Hochschulrechenzentrum Justus-Liebig-Universität Gießen Microsoft Excel 2010 Matrix-Funktionen Matrix-Funktionen in Excel 2010 Seite 1 von 7 Inhaltsverzeichnis Einleitung... 2 Integrierte Matrixfunktionen...

Mehr

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean 01.11.05 1 Noch für heute: 01.11.05 3 primitie Datentypen in JAVA Primitie Datentypen Pseudocode Name Speichergröße Wertgrenzen boolean 1 Byte false true char 2 Byte 0 65535 byte 1 Byte 128 127 short 2

Mehr

DIskus. E-Mail mit DISKUS. 1. Erzeugen einer E-Mail 2. Versenden der E-Mail 3. Gezippte E-Mail mit HTML-Dateien 4.

DIskus. E-Mail mit DISKUS. 1. Erzeugen einer E-Mail 2. Versenden der E-Mail 3. Gezippte E-Mail mit HTML-Dateien 4. Carl H.Hilgers Technisches Büro DIskus Mikroskopische Diskussion E-Mail mit DISKUS 1. Erzeugen einer E-Mail 2. Versenden der E-Mail 3. Gezippte E-Mail mit HTML-Dateien 4. E-Mail einrichten DISKUS kann

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

Notizen zum Taschenrechner TI-ηspire CX CAS

Notizen zum Taschenrechner TI-ηspire CX CAS Notizen zum Taschenrechner TI-ηspire CX CAS Dies ist kein Handbuch, sondern nur eine Sammlung von Notizen zum TI-ηspire CX CAS! Einige Zeichen sehen hier leicht anders aus als im TR. Tastatur Abbruch Wechsel

Mehr

Plotten mit GeoMedia Professional 6.0 & 6.1. Tipps & Tricks

Plotten mit GeoMedia Professional 6.0 & 6.1. Tipps & Tricks Plotten mit GeoMedia Professional 6.0 & 6.1 Tipps & Tricks 6.8.2009 Inhaltsverzeichnis Inhaltsverzeichnis 1 Allgemein... 3 1.1 Plotter / Drucker Treiber... 3 2 Tipps & Tricks... 3 TIPP 1 Benutzerformat

Mehr

Userhandbuch. Version B-1-0-2 M

Userhandbuch. Version B-1-0-2 M Userhandbuch Version B-1-0-2 M Inhaltsverzeichnis 1.0 Was bietet mir SERVRACK?... 3 1.1 Anmeldung... 3 1.2 Passwort vergessen?... 3 1.3 Einstellungen werden in Realtime übernommen... 4 2.0 Die SERVRACK

Mehr

17.2 MS-Access Projekte

17.2 MS-Access Projekte 964 Von MS-Access 2000 zum SQL-Server 17.2 MS-Access Projekte MS-Access-Projekte, die die Dateiendung adp besitzen, werden als Front-End-Anwendung verwendet. Für die Back-End-Seite gibt es mehrere Möglichkeiten.

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) Aufgabe 3 Bankkonto Schreiben Sie eine Klasse, die ein Bankkonto realisiert. Attribute für das Bankkonto sind der Name und Vorname des Kontoinhabers,

Mehr

Jens Kappei. Vorlesung Numerische Basisverfahren 21./22.04.2010

Jens Kappei. Vorlesung Numerische Basisverfahren 21./22.04.2010 FB 12 Mathematik und Informatik Philipps-Universität Marburg Vorlesung Numerische Basisverfahren 21./22.04.2010 ... ist eine höhere Programmiersparche, ist eine Interpretersprache, kann interaktiv (wie

Mehr

Mobile Security Configurator

Mobile Security Configurator Mobile Security Configurator 970.149 V1.1 2013.06 de Bedienungsanleitung Mobile Security Configurator Inhaltsverzeichnis de 3 Inhaltsverzeichnis 1 Einführung 4 1.1 Merkmale 4 1.2 Installation 4 2 Allgemeine

Mehr

Leseprobe. Angelika Bosl. Einführung in MATLAB/Simulink. Berechnung, Programmierung, Simulation. ISBN (Buch): 978-3-446-42589-7

Leseprobe. Angelika Bosl. Einführung in MATLAB/Simulink. Berechnung, Programmierung, Simulation. ISBN (Buch): 978-3-446-42589-7 Leseprobe Angelika Bosl Einführung in MATLAB/Simulink Berechnung, Programmierung, Simulation ISBN (Buch): 978-3-446-42589-7 ISBN (E-Book): 978-3-446-42894-2 Weitere Informationen oder Bestellungen unter

Mehr

DLR_School_Lab- Versuch Haftmagnet

DLR_School_Lab- Versuch Haftmagnet Drucksachenkategorie DLR_School_Lab- Versuch Haftmagnet Untersuchung von Haftmagneten durch Messungen und numerische Simulation nach der Finite- Elemente-Methode (FEM) Version 3 vom 30. 6. 2014 Erstellt

Mehr

Erste Schritte mit HG 2

Erste Schritte mit HG 2 Erste Schritte mit HG 2 Malte Ried FH-Gießen Version: 1.0 21. November 2003 Inhaltsverzeichnis 1 Einführung 2 2 Allgemeines 2 2.1 Koordinaten...................................... 2 2.2 Farben.........................................

Mehr

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ Arbeiten mit BlueJ Compilieren, Editieren, Objekte erzeugen, Methoden aufrufen, Objekte inspizieren, vorhandene Klassen benutzen, eigene Klassen und Methoden erstellen In BlueJ geht es einfach BlueJ durch

Mehr

Mathematica. H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32

Mathematica. H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32 Mathematica H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32 Mathematica I Mathematica ist ein Mathematik-Programm zum numerischen und symbolischen Lösen von Gleichungen Gleichungssystemen

Mehr

SX3 PC Software rev. 0.99c

SX3 PC Software rev. 0.99c SX3 PC Software rev. 0.99c SX3 ist ein Programm zur Steuerung einer Selectrix Digitalzentrale unter Linux bzw. Windows. Mit SX3 haben Sie die Möglichkeit Selectrix -Loks zu fahren, Weichen zu Schalten

Mehr

IMBA. Installationsanleitung. SQL Server-Datenbankadapter. Das Instrument für den fähigkeitsgerechten Personaleinsatz

IMBA. Installationsanleitung. SQL Server-Datenbankadapter. Das Instrument für den fähigkeitsgerechten Personaleinsatz Das Instrument für den fähigkeitsgerechten Personaleinsatz IMBA SQL Server-Datenbankadapter Installationsanleitung gefördert durch das Bundesministerium für Gesundheit und Soziale Sicherung Vorbereitung

Mehr

32.4 Anpassen von Menüs und Symbolleisten 795i

32.4 Anpassen von Menüs und Symbolleisten 795i 32.4 Anpassen von Menüs und Symbolleisten 795i Fortsetzung der Seiten in der 8. Auflage 32.4 Anpassen von Menüs und Symbolleisten 32.4.1 Anpassen von Menüs Die Menüs können um folgende Typen von Optionen

Mehr

Installation von Typo3 CMS

Installation von Typo3 CMS Installation von Typo3 CMS TYPO3 Version 6.2.x unter Windows Eigenen lokalen Webserver mit XAMPP installieren Für die Installation von Typo3 wird eine passende Systemumgebung benötig. Diese besteht aus

Mehr

Arbeiten mit Acrobat. Vorstellung von Adobe Acrobat Bearbeitung des Dokuments Präsentationen erstellen Teamarbeit

Arbeiten mit Acrobat. Vorstellung von Adobe Acrobat Bearbeitung des Dokuments Präsentationen erstellen Teamarbeit Arbeiten mit Acrobat Vorstellung von Adobe Acrobat Bearbeitung des Dokuments Präsentationen erstellen Teamarbeit Vollbildmodus Wählen Sie das Menü Fenster Vollbildmodus. Die aktuell angezeigte Seite verdeckt

Mehr

KURZANLEITUNG CLOUD BLOCK STORAGE

KURZANLEITUNG CLOUD BLOCK STORAGE KURZANLEITUNG CLOUD BLOCK STORAGE Version 1.12 01.07.2014 SEITE _ 2 INHALTSVERZEICHNIS 1. Einleitung......Seite 03 2. Anlegen eines dauerhaften Block Storage...Seite 04 3. Hinzufügen von Block Storage

Mehr

Tutorium Learning by doing WS 2001/ 02 Technische Universität Berlin. Erstellen der Homepage incl. Verlinken in Word 2000

Tutorium Learning by doing WS 2001/ 02 Technische Universität Berlin. Erstellen der Homepage incl. Verlinken in Word 2000 Erstellen der Homepage incl. Verlinken in Word 2000 1. Ordner für die Homepagematerialien auf dem Desktop anlegen, in dem alle Bilder, Seiten, Materialien abgespeichert werden! Befehl: Desktop Rechte Maustaste

Mehr

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/ Einführung Was ist Unison? Unison ist ein Dateisynchronisationsprogramm für Windows und Unix. Es teilt sich viele Funktionen mit anderen Programmen, wie z.b. CVS und rsync. Folgend einige Vorteile des

Mehr

Verteilergruppen, Aufgaben definieren und automatisieren

Verteilergruppen, Aufgaben definieren und automatisieren Verteilergruppen, Aufgaben definieren und automatisieren Willkommen an Bord der Rationalisierung. Automatische Informationsverteilung zahlt sich aus. Automatische Verteilung von Auswertungen und Exportdaten

Mehr

Mögliche Prüfungsfragen zu VO Mathematische Software

Mögliche Prüfungsfragen zu VO Mathematische Software Mögliche Prüfungsfragen zu VO Mathematische Software SS 2009 Der Prüfungsstoff umfasst alles, was in der Vorlesung vorgetragen wurde. Die folgende Liste soll Ihnen bei der Vorbereitung helfen. Bei der

Mehr

Das Studiengangsinformationssystem (SGIS)

Das Studiengangsinformationssystem (SGIS) Das Studiengangsinformationssystem (SGIS) Manual für Typo3-Redakteure Version 1.a Mai 2015 Kontakt: Referat 1.4 - Allgemeine Studienberatung und Career Service Christian Birringer, christian.birringer@uni-rostock.de

Mehr

Numerisches Programmieren

Numerisches Programmieren Technische Universität München SS 2012 Institut für Informatik Prof Dr Thomas Huckle Dipl-Inf Christoph Riesinger Dipl-Math Alexander Breuer Dipl-Math Dipl-Inf Jürgen Bräckle Dr-Ing Markus Kowarschik Numerisches

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Grundeinstellung des Druckers für die Erstellung von PostScript-Dateien unter Windows 98

Grundeinstellung des Druckers für die Erstellung von PostScript-Dateien unter Windows 98 Grundeinstellung des Druckers für die Erstellung von PostScript-Dateien unter Windows 98 Die meisten Einstellungen können nicht in WORD vorgenommen werden, sondern nur auf der Betriebssystemebene. Für

Mehr

Parallele und funktionale Programmierung Wintersemester 2013/14. 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2013/14. 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr Aufgabe 8.1: Zeigerverdopplung Ermitteln Sie an folgendem Beispiel den Rang für jedes Listenelement sequentiell und mit dem in der Vorlesung vorgestellten parallelen

Mehr

Installation von Updates

Installation von Updates Installation von Updates In unregelmässigen Abständen erscheinen Aktualisierungen zu WinCard Pro, entweder weil kleinere Verbesserungen realisiert bzw. Fehler der bestehenden Version behoben wurden (neues

Mehr

Tutorial Grundlagen der Softwareverteilung

Tutorial Grundlagen der Softwareverteilung Tutorial Grundlagen der Softwareverteilung Inhaltsverzeichnis 1. Einführung... 3 2. Clientsysteme einrichten... 3 2.1 Den SDI Agent verteilen... 3 2.2 Grundeinstellungen festlegen... 4 3. Softwareverteiler...

Mehr

Als Beispiel dient unsere Demoseite: http://www.thermoguard.de/upload/ddorf.html.

Als Beispiel dient unsere Demoseite: http://www.thermoguard.de/upload/ddorf.html. Sehr geehrter Thermoguard Anwender, auf den folgenden Seiten stellen wir für Sie eine kleine Anleitung bereit, die die Einrichtung eines automatischen Uploads von Thermoguard Report Live! Grafiken auf

Mehr

Grundlagen der Arbeit mit Mathematica

Grundlagen der Arbeit mit Mathematica Kapitel I Grundlagen der Arbeit mit Mathematica In diesem Kapitel wollen wir grundlegende Fragen zur Benutzung von Mathematica klären. Dazu wollen wir in Abschnitt 2 ein wenig in Mathematica hineinschnuppern

Mehr

Leitfaden zur Schulung

Leitfaden zur Schulung AWO Ortsverein Sehnde Reiner Luck Straße des Großen Freien 5 awo-sehnde.de PC Verwaltung für Vereine Leitfaden zur Schulung Inhalt Sortieren nach Geburtsdaten... 2 Sortieren nach Ort, Nachname, Vorname...

Mehr

JBuilderX: Installation und Kurzanleitung (Windows)

JBuilderX: Installation und Kurzanleitung (Windows) JBuilder X Seite 1 JBuilderX: Installation und Kurzanleitung (Windows) 1. JBuilder installieren Eine Gratis-Version kann von der Webseite www.borland.de heruntergeladen werden. Systemvoraussetzungen: 256

Mehr

TYPO3 Redaktoren-Handbuch

TYPO3 Redaktoren-Handbuch TYPO3 Redaktoren-Handbuch Kontakt & Support: rdv interactive ag Arbonerstrasse 6 9300 Wittenbach Tel. 071 / 577 55 55 www.rdvi.ch Seite 1 von 38 Login http://213.196.148.40/typo3 Username: siehe Liste

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr