Sie sind auf Seite 1von 161

TECHNISCHE UNIVERSITÄT DRESDEN

Fakultät Maschinenwesen
Institut für Verfahrenstechnik & Umwelttechnik

HANDBUCH

MATLAB & SIMULINK

zum Gebrauch in den Lehrveranstaltungen

Theoretische Prozessanalyse und Experimentelle Prozessanalyse

Dresden, April 2015 Prof. (em.) Dr.-Ing. habil. W. Klöden


1-2 Einleitung

1. Einleitung
1.1 MATLAB/Simulink als Werkzeuge

MATLAB und Simulink sind, einem neueren Sprachgebrauch folgend, integrierte Problemlö-
sungsumgebungen (integrated problem solving environment). Im Gegensatz zur klassischen
Programmierumgebung stellen derartige Umgebungen neben einer Programmiersprache Werk-
zeuge und Bibliotheken bereit, die auf einem hohen Niveau in die Problemlösung integriert
werden können. Das sind vor allem leistungsfähige Grafik-Funktionen, einfach aufrufbare
numerische Lösungsverfahren und Toolboxes für bestimmte Anwendungsfelder, die ihre
Funktionalität sowohl auf der Ebene der Programmiersprache als auch über integrierte grafische
Oberflächen dem Anwender zur Verfügung stellen.
MATLAB ist ein interaktiv nutzbares Programmiersystem, dass vor allem durch die einfach zu
handhabenden Matrizenoperationen (MATLAB ist die Kurzform von MATrix LABoratory)
ausgezeichnet ist. Die für MATLAB entwickelten Toolboxes decken ein weites Anwendungs-
feld ab. Beispielsweise sind folgende Tool-Boxes verfügbar:
S Control System Toolbox
S Neural Network Toolbox
S Fuzzy Logic Toolbox
S Optimization Toolbox
S Statistics Toolbox

Im folgenden werden für MATLAB und für SIMULINK die Version von 2014 angenommen.
Eine Reihe von Eigenschaften ist auch für vorangegangene Versionen noch zutreffend; es wird
aber darauf verzichtet, die Unterschiede zu anderen Versionen zu erläutern.

Die folgende Literatur ist zu empfehlen:

[1] “Using MATLAB," “Using SIMULINK “


The MathWorks Inc., 2014
Es sind dies die Originalhandbücher des Systementwicklers.

[2] Schweizer, W.
“MATLAB kompakt”
München, 2013 (5. Aufl.)

[3] Constantinides, A. ; Mostoufi, N


“Numerical Methods for Chemical Engineers with MATLAB Applications“
Prentice Hall, 2000
Das Buch enthält neben den numerischen Verfahren viele Beispiele und Aufgaben.

[4] Angermann, A. ; u.a.


“Matlab, Simulink, Stateflow”
München, 2014, (8. Aufl.)
Das Buch bietet eine ausführliche Einführung mit vielen Beispielen, auch aus dem
Bereich der Automatisierungstechnik.
Einleitung 1-3

1.2 Die Benutzeroberfläche von MATLAB

In der folgenden Abbildung ist die Benutzeroberfläche von MATLAB dargestellt.


Das Fenster der Benutzeroberfläche gliedert sich in folgende Teilfenster:

S Command Window Dieses Fenster ist der eigentliche Arbeitsbereich; nach dem
Prompt-Zeichen >> kann der Benutzer Kommandos eingeben.

Die folgenden Fenster lassen sich wahlweise aktivieren


S Information Hier werden Kurzinformationen über das aktuelle Programm-
Skript angezeigt. Dabei wird auf den im Programmkopf enthalte-
nen Kommentar zugegriffen.
S Workspace Dieses Fenster gestattet den Zugriff auf die definierten Variablen
im Arbeitsbereich.
S Current Directory Über dieses Fenster kann der aktuelle Zugriffspfad eingesehen
und verändert werden.

Das Erscheinungsbild der Benutzeroberfläche kann über den Menüpunkt Layout des Hauptme-
nüs modifiziert werden.

Im folgenden Bild sind die Bedeutungen der wesentlichen Menüpunkte des Hauptmenüs sowie
der wichtigsten Buttons des Toolbar erläutert.
1-4 Einleitung

Mit diesem Schalter wird eine Texteditor-Instanz sofort geöffnet .

In diesem Schalter wird das Auswahlmenü für die unterschiedlichen Typen von
MATLAB bzw. SIMULINK Editoren bereitgestellt.

Über diesen Schalter wird das Öffnungs-Menü für bereits vorhandene Dateien geöffnet.

SIMULINK wird aktiviert


Layout-Menü wird geöffnet

Die on-line-Hilfe wird aktiviert.

Es gibt ein sehr umfangreiches System zur on-line-Hilfe. Der Hilfe-Navigator ist in der folgen-
den Abbildung dargestellt:
Einleitung 1-5

1.3 Der Texteditor

Für die Erzeugung und Editierung von Programmtexten (Skripte oder Funktionen) stellt die
Entwicklungsumgebung einen Editor bereit; das Erscheinungsbild ist folgender Abbildung zu
entnehmen:

Die in der Menüleiste angebotenen Funktionen lassen erkennen, dass dieses Editierwerkzeug
mehr ist als ein einfacher Quelltexteditor. Im besonderen stellt der Editor einen integrierten
Debugger bereit. Die wichtigsten Menüpunkte werden im folgenden erläutert. Dabei ist zu
beachten, dass sich unterschiedliche Reaktionen ergeben, je nachdem ob man auf das Schalter-
symbol oder auf den unter dem Symbol befindlichen Pfeil klickt:

S New Es wird eine Texteditor-Instanz geöffnet bzw. es wird ein Auswahlmenü


für die Typen von Editor-Instanzen geöffnet.
S Open Es wird der Öffnungsdialog für Dateien des aktuellen Verzeichnisses
angezeigt bzw. es wird ein Auswahlmenü für das Öffnen vorhandener
Dateien geöffnet.
S Save Der aktuelle Programmtext wird unter dem aktuellen Dateinamen ge-
speichter bzw. es wird ein Auswahlmenü für das Speichern von Dateien
geöffnet.
S Print Der Texte wird gedruckt.
S Run Das Skript wird ausgeführt; wurde vorher der Text geändert, so wird
dieser aktualisiert gespeichert.
S Run and Time Das Skript wird wie durch Run gestartet. Nach der Ausführung wird die
erforderliche Ausführungszeit angezeigt.
1-6 Einleitung

1.4 Die Benutzeroberfläche von Simulink

Simulink wird aus der MATLAB-Umgebung heraus aktiviert. Nach dieser Aktivierung erscheint
das folgende Fenster:

Über dieses Fenster wird die Modell-Bibliothek von SIMULINK erreichbar. Für den Aufbau
einer Simulationsstruktur, die aus Elementen dieser Bibliothek bestehen soll, muss der Benutzer
über den New-Schalter im MATLAB-Rahmen (Untermenüpunkt Simulink Model) oder über das
entsprechende Button des Toolbar dieses Fensters ein neues, leeres Fenster für den Arbeits-
bereich erzeugen. Die Elemente werden dann per Mausklick in den Arbeitsbereich gezogen.
Das linke Teilfenster stellt den Navigator für die Abschnitte der Modellbibliothek zur Verfü-
gung; im rechten Teilfenster erscheinen die im jeweils ausgewählten Abschnitt verfügbaren
Blöcke.
Elementare Konstrukte 2-1

2. Elementare Konstrukte in MATLAB


2.1 Die interaktive Arbeitsweise

Im folgenden wird stets davon ausgegangen, dass das Kommandofenster der Benutzeroberfläche
aktiv ist. Der Anwender kann zunächst das System interaktiv im reinen Kommandobetrieb
nutzen. Dabei wird im Kommandofenster nach dem Kommandoprompt >> eine Zeichenfolge
für ein Kommando eingegeben. Nach Abschluss der Zeichenfolge durch die <ENTER>-Taste
wird das Kommando sofort ausgeführt. Folgende Regeln sind bezüglich der Kommandozeile zu
beachten:
• Mit den Cursor-Steuertasten <8> und <9> kann unter den zurückliegenden Kommandos
geblättert werden.
• Mit den Tasten für die horizontale Cursor-Steuerung sowie mit den Korrekturtasten
kann die Kommandozeile editiert werden.
• Sollen mehrere Kommandos auf einer Zeile eingegeben werden, so sind sie jeweils
durch Komma zu trennen.
• Soll die Resultatausgabe eines Kommandos unterdrückt werden, so ist die Kommando-
zeile mit einem Semikolon abzuschließen.
• Soll ein Kommando auf der folgenden Bildschirmzeile fortgesetzt werden, so ist vor der
Betätigung der <ENTER>-Taste die Zeichenfolge ... ( drei Punkte ) einzugeben.
• Ein Kommentar beginnt mit dem Prozentzeichen %. Der Kommentar kann an beliebiger
Stelle beginnen; der Rest der Kommandozeile wird von da an nicht interpretiert.

‘ Die Taschenrechnerfunktion
Im einfachsten Fall werden als Kommandos arithmetische Ausdrücke eingegeben, die lediglich
aus numerischen Konstanten, Standardfunktionen (trigonometrische Funktionen, Exponential-
funktion usw.) und arithmetischen Operatoren bestehen. Die Ausdrücke müssen den üblichen
syntaktischen Regeln genügen. Auch Vektoren und Matrizen lassen sich in diesem Bearbei-
tungsmodus verknüpfen (näheres zu Vektoren und Matrizen s. Abschnitt 2.2.3)

< Beispiel

>> 123.6*exp(-2.4)/0.47
ans =
23.8569
>> [1 2 3]*[2 3 4]' %Skalarprodukt zweier Vektoren
ans =
20
>>
Die Variable ans wird durch das System mit dem Ergebnis belegt; auf sie kann in nachfolgenden
Berechnungen Bezug genommen werden. Der Ergebnis-Typ wird durch die jeweilige Be-
rechnung dynamisch festgelegt. Die Anzeige des Resultats erfolgt in dem Beispiel, da das
Kommando nicht mit ; abgeschlossen wurde.

‘ Die Kommandofolge - sequentielle Programmierung


Der Anwender kann im Rahmen eines Kommandos auch Variable definieren bzw. auf diese
Bezug nehmen. Weiterhin kann er im Rahmen eines Kommandos auch MATLAB-Funktionen
aufrufen. Prinzipiell kann er auch strukturierende Anweisungen (z.B. Laufanweisungen) im
Kommandobetrieb eingeben. Der Anwender kann somit einfache Berechnungsvorschriften sehr
2-2 Elementare Konstrukte

schell zur Abarbeitung bringen. Vor allem ist diese Betriebsweise von Bedeutung, wenn durch
eine umfangreiche MATLAB-Funktion Ergebnisse erzeugt werden, die je nach konkreter
Situation unterschiedlich weiter zu bearbeiten sind. Die Kommandofolge kann auf alle Varia-
blen Bezug nehmen, die im Workspace verfügbar sind.

< Beispiel

>> H=4;
>> V=pi/4*H
V =
3.1416

‘ Der Funktionsaufruf
Wenn ein Kommando-Skript oder eine Funktion aktiviert werden sollen, so ist wenigstens der
Aufruf als MATLAB-Kommando notwendig. Mit den Resultaten, sofern sie nach der Ab-
arbeitung noch verfügbar sind, kann im Kommandobetrieb anschließend weitergearbeitet
werden.

2.2 Konstanten und Variable


2.2.1 Konstanten

‘ Numerische Konstanten
Der Typ numerischer Konstanten wird aus ihrer Darstellung abgeleitet. Wird ein Dezimalpunkt
verwendet, so handelt es sich um eine reelle Konstante, sonst um eine ganzzahlige. Für reelle
Konstanten kann auch die Schreibweise mit Zehnerpotenz (halblogarithmische Notation)
verwendet werden. Als Zeichen für den Beginn des Exponentialteils wird der Buchstabe e (auch
E ist zulässig) verwendet.
Vordefinierte Konstanten (Schreibweise mit Kleinbuchstaben beachten!) sind:

pi ð
i,j imaginäre Einheit

‘ Zeichenketten-Konstanten
Zeichenketten-Konstanten sind beliebige Zeichenfolgen, die in ‘ ‘ (Hochkomma) eingeschlos-
sen werden.

< Beispiele

>> 2.3e3+5i
ans =
2.3000e+003 +5.0000e+000i
>> 2.4*exp(4*pi*j)
ans =
2.4000 - 0.0000i
>> 2.4*exp(3*pi*j)
ans =
-2.4000 + 0.0000i
>> einheit='W/m²K'
Elementare Konstrukte 2-3

einheit =
W/m²K

Hinweis: Der Multiplikationsstern zwischen einer numerischen Konstanten und der imagi-
nären Einheit kann entfallen.

2.2.2 Einfache Variable

Einfache (skalare) Variable werden durch einen Bezeichner implizit durch Zuweisung eines
Wertes definiert. Der Typ des Wertes bestimmt den Typ der Variablen. Insbesondere werden
komplexe Variable durch Zuweisung eines komplexen Ausdrucks deklariert.
Für Bezeichner im allgemeinen und für Variablenbezeichner im besonderen gelten folgende
Regeln:
S Ein Bezeichner beginnt immer mit einem Buchstaben.
S Ab dem zweiten Zeichen sind auch Ziffern sowie der Unterstrich _ zugelassen.
S Es werden nur die ersten 31 Zeichen eines Bezeichners unterschieden.
S Groß-/Kleinbuchstaben werden unterschieden.

< Beispiele

>> T=5; omega=2*pi/T


omega =
1.2566

>> % Im folgenden werden komplexe Variable eingeführt und verknüpft


>> x=3.5+6j; y=6.9-5.2j;
>> phi=angle(x*y)
phi =
0.3969
>> r=abs(x)*abs(y)
r =
60.0155
>> real_teil=real(x*y)
real_teil =
55.3500
>> imaginaer_teil=imag(x*y)
imaginaer_teil =
23.2000
>> x*y
ans =
55.3500 +23.2000i

2.2.3 Vektoren und Matrizen

Auch Variable für Vektoren und Matrizen werden implizit durch eine Wertzuweisung dekla-
riert. Vektoren und Matrizen lassen sich in ihrer Zeilen-/Spaltenstruktur in MATLAB auf
einfache Weise definieren. Es gelten folgende Regeln:
2-4 Elementare Konstrukte

S Die Komponenten eines Zeilenvektors werden als Liste in eckigen Klammern notiert.
Als Trennzeichen sind Leerzeichen und/oder Komma zugelassen. Als Elemente eines
Vektors sind Konstanten oder arithmetische Ausdrücke, die auf skalare Ergebnisse
führen, zulässig. Als Syntaxformel1 lässt sich die Definition wie folgt schreiben:

zeilenvektor 6 [ element , ... ]

S Die Komponenten eines Spaltenvektors werden als Liste in eckigen Klammern notiert,
wobei als Trennzeichen das Semikolon zu verwenden ist. Alternativ dazu kann der
Spaltenvektor als Zeilenvektor notiert werden und ist dann mit dem Transpositions-
operator ‘ (Hochkomma) abzuschließen. Als Syntaxformel ergibt sich

spaltenvektor 6 [ element ; ... ] | [ element , ... ]‘

S Matrizen werden als Listen von Zeilen- oder Spaltenvektoren notiert. Die eckigen
Klammern für die Zeilenvektoren können entfallen. Alle Zeilen-/Spaltenvektoren
müssen die gleiche Länge besitzen. Als Syntaxformel ergibt sich

matrix 6 [ zeilenvektor ; ... ] | [ spaltenvektor , ... ]

Mit der Zuweisung einer nach den genannten Regeln definierten Datenstruktur werden Dimen-
sion und Elemente einer Vektor-/Matrixvariablen festgelegt. Der Zugriff auf den Vektor/die
Matrix als Ganzes erfolgt über den Bezeichner der Vektor-/Matrixvariablen. Soll dagegen nur
auf ausgewählte Elemente zugegriffen werden, ist nach folgenden Regeln zu verfahren:

S Der Zugriff erfolgt über Indizes, die dem Namen des Vektors/der Matrix folgend in
runden Klammern eingeschlossen und gegebenfalls durch Komma getrennt werden. Bei
Matrizen ist der erste Index der Zeilen- und der zweite der Spaltenindex.

feldzugriff 6 name_vektor ( index ) | name_matrix ( index , index )

S Wenn auf ein einzelnes Element zugegriffen werden soll, so sind die Indizes ganzzahlige
Ausdrücke (im einfachsten Fall ganzzahlige Konstanten). Soll dagegen auf gewisse
Teilabschnitte des Vektors/der Matrix Bezug genommen werden, ist der Indexbereich zu
verwenden. Es ergeben sich die folgenden Syntaxformeln:

index 6 ganzzahliger_ausdruck | indexbereich


indexbereich 6 : | ganzzahliger_ausdruck : ganzzahliger_ausdruck |
ganzzahliger_ausdruck : ganzzahliger_ausdruck : ganzzahliger_ausdruck

1
Für Syntaxformeln gelten folgende Regeln:
S Alle beschreibenden (metasprachlichen) Begriffe werden in Kleinschreibung notiert.
S Die definierten Begriffe (linke Seite der Formel) werden durch das Zeichen 6 abgeschlossen.
S Alle Elemente der zu definierenden Sprache (Schlüsselwörter , Opereratoren) werden fett dargestellt.
S Mögliche W iederholungen eines Konstruktes werden durch ... angegeben.
S Optionale Konstrukte werden in Kursivschrift dargestellt.
S Alternative Konstrukte werden als Liste notiert, wobei als Trennzeichen | verwendet wird.
Elementare Konstrukte 2-5

Die drei Varianten, die für den Indexbereich möglich sind, besitzen folgende Bedeutungen:
# Wenn nur ein Doppelpunkt notiert wird, so wird der Indexbereich der definieren-
den Anweisung herangezogen.
# Wenn zwei Ausdrücke, durch Doppelpunkt getrennt, notiert werden, so definiert
der erste Ausdruck den unteren Wert des Indexbereichs und der obere Ausdruck
den oberen Wert des Indexbereichs.
# Werden drei Ausdrücke, jeweils durch Doppelpunkte getrennt, notiert, so de-
finiert der mittlere Ausdruck zusätzlich die Schrittweite für die Indexzählung.

< Beispiele

>> a=2;
>> A=[a*a a*a*a a*a*a*a; 2*a 3*a 4*a; a/2 a/4 a/8]
A =
4.0000 8.0000 16.0000
4.0000 6.0000 8.0000
1.0000 0.5000 0.2500

>> B=A(1:2,2:3)
B =
8 16
6 8

>> C=A(1:2:3,1:2:3)
C =
4.0000 16.0000
1.0000 0.2500

>> D=A(:,1:2)
D =
4.0000 8.0000
4.0000 6.0000
1.0000 0.5000

2.2.4 Strukturen

Strukturierte Variable enthalten Datenfelder, die unterschiedlich typisiert sein können. Die
Felder werden über Feldbezeichner eingeführt. Die Definition erfolgt wiederum implizit durch
Wertzuweisungen zu den Feldern. Es lassen sich auch Vektoren und Matrizen von strukturierten
Variablen aufbauen. Es gilt folgende Syntax:

strukturierte_variable 6 strukturbezeichner ( index, index ) . feldbezeichner


feldbezeichner 6 bezeichner | feldzugriff | strukturierte_variable

Der Strukturbezeichner steht für das heterogene Datenfeld als Ganzes. Der Feldbezeichner steht
für einen Subcontainer, der die Daten aufnimmt. Bedingt durch die implizite Deklaration der
Datenfelder ergibt sich die konkrete Bedeutung eines Feldbezeichners durch die Zuweisung. Die
2-6 Elementare Konstrukte

Syntaxformel definiert eine große Vielfalt an Möglichkeiten. Insbesondere kann ein Feldbe-
zeichner wiederum eine Struktur repräsentieren.
In der folgenden Tabelle sind die wichtigsten MATLAB-Funktionen, die sich auf Strukturen
beziehen, zusammengestellt. Der Bezeichner s steht für eine strukturierte Variable, die Bezeich-
ner f1, ...fn für Datenfelder; ‘f‘ kennzeichnet den Namen des Feldes f als Zeichenkette.

Funktion Ergebnistyp Bedeutung


fieldnames(s) zelluläres Die Funktion liefert in einem zellulären Feld
Feld die Bezeichner der Datenfelder.
getfield(s,‘f‘) Typ von f Die Funktion liefert den Inhalt des Datenfel-
des, dessen Bezeichner als Zeichenkette über-
geben wird (entspricht dem Zugriff s.f).
rmfield(s,‘f‘) Struktur Entfernt das Datenfeld, dessen Bezeichner als
Zeichenkette übergeben wird, aus der Struk-
tur.
setfield(s,‘f‘,v) Struktur Setzt den Wert des Datenfeldes, dessen Be-
zeichner als Zeichenkette übergeben wird, auf
den Wert v (entspricht s.f = v).
struct(‘f1',v1,..) Struktur Weist den Feldern der Struktur, deren Be-
zeichner als Zeichenketten übergeben werden,
Werte zu.
struct2cell zelluläres Die Funktion konvertiert die strukturierte Va-
Feld riable in ein zelluläres Feld.

< Beispiele

>> daten.name='erster Versuch';


>> daten.daten=[1.3 4.5; 2.3 8.7 ; 3.3 13.2];
>> daten.n=3;
>> daten.mittel_x=sum(daten.daten(:,1))/daten.n
daten =
name: 'erster Versuch'
daten: [3x2 double]
n: 3
mittel_x: 2.3000
>> daten.mittel_y=sum(daten.daten(:,2))/daten.n
daten =
name: 'erster Versuch'
daten: [3x2 double]
n: 3
mittel_x: 2.3000
mittel_y: 8.8000

>> fieldnames(daten)
Elementare Konstrukte 2-7

ans =
'name'
'daten'
'n'
'mittel_x'
'mittel_y'

2.2.5 Zelluläre Felder (Cells)

Cells bzw. zelluläre Felder sind den Strukturen sehr ähnlich; auch sie bestehen aus Zellen, die
Daten unterschiedlichen Typs enthalten. Die Zellen erhalten aber keine Namen. Der Zugriff auf
eine Zelle erfolgt über den Zellenindex. Ein zelluläres Feld wird als Liste seiner Elemente
(Zellen) definiert. Diese Liste steht in geschweiften Klammern. Das trennende Komma zwi-
schen den Elementen kann entfallen.

zelluläres_feld 6 { element , ...}

Als Elemente sind alle syntaktisch korrekten Ausdrücke und Datenstrukturen zugelassen. Der
Zugriff auf eine Zelle wird wie folgt realisiert:

zell_zugriff 6 variablen_bezeichner { index }

Der Variablenbezeichner kennzeichnet das zelluläre Feld als Ganzes; der Index wird nach den
gleichen Regeln wie bei Vektoren und Matrizen gebildet.
In der folgenden Tabelle sind die wichtigsten MATLAB-Funktionen, die sich auf zelluläre
Felder beziehen, zusammengestellt. Der Bezeichner c steht für zelluläres Feld, die Bezeichner
c1,.. cn für Zellen des Feldes sowie f1, ...fn für Datenfelder in einer strukturierten Variablen; ‘f‘
kennzeichnet den Namen des Feldes f als Zeichenkette.

Funktion Ergebnistyp Bedeutung


cell(n) zelluläres Es wird ein n x n - zelluläres Feld erzeugt,
Feld dass aus leeren Feldern besteht.
cell2struct(c,f,d) Struktur Das zelluläre Feld c wird in eine Struktur
konvertiert, wobei im Feld f die Feldbe-
zeichner stehen müssen und d die Dimen-
sion angibt. f kann eine Char-Matrix oder
ein zelluläres Feld sein.
celldisp(c) Der Inhalt der Zellen wird angezeigt.
cellplot(c) Der Inhalt der Zellen wird in einer grafi-
schen Figur angezeigt.
num2cell(A) zelluläres Das numerische Feld (Skalar..Matrix) wird
Feld in ein zelluläres Feld konvertiert.
2-8 Elementare Konstrukte

< Beispiele

>> problemdaten={'Messungen' 4 [1.4 2.3 ; 1.8 2.8 ; 2.0 3.4; 2.4 4.1]}
problemdaten =
'Messungen' [4] [4x2 double]

>> problemdaten{1}
ans =
Messungen
>> problemdaten{3}
ans =
1.4000 2.3000
1.8000 2.8000
2.0000 3.4000
2.4000 4.1000
>> c={'Versuchdaten',[1.2 4.7; 2.3 8.9; 4.5 12.6], 3}
c =
'Versuchdaten' [3x2 double] [3]
>> felder={'name','daten','versuchsanzahl'};
>> s=cell2struct(c,felder,2)
s =
name: 'Versuchdaten'
daten: [3x2 double]
versuchsanzahl: 3
>> s.daten
ans =

1.2000 4.7000
2.3000 8.9000
4.5000 12.6000
>> A=[1 2 3 ; 4 5 6];
>> c=num2cell(A)
c =
[1] [2] [3]
[4] [5] [6]

2.3 Ausdrücke

Ausdrücke stellen Verknüpfungen zwischen Konstanten und Variablen über definierte Operato-
ren her. In MATLAB ergibt sich die Bedeutung der Operatoren aus den Typen der verknüpften
Variablen (die Bedeutungen der Operatoren sind damit kontextabhängig). Wenn Ausdrücke
bezüglich ihres Typs unterschieden werden, so bezieht sich das darauf, dass die Resultate der
Verknüpfungen unterschiedlichen Typen angehören können. Das ist durchaus sinnvoll, da mit
der Zuweisung eines Ausdrucks zu einer Variablen diese den Typ des Wertes des Ausdrucks
annimmt (implizite Deklaration der Variablen).

2.3.1 Skalare Ausdrücke

Skalare Ausdrücke verknüpfen Konstanten, skalare Variable, Vektoren, Matrizen sowie Ergeb-
nisse von Funktionsaufrufen so, dass sich skalare Resultate ergeben. Dabei kann noch genauer
zwischen den einfachen Typen komplex, reell und ganzzahlig unterschieden werden. Bezüglich
der Syntax von skalaren Ausdrücken gelten die üblichen Regeln für arithmetische Ausdrücke.
Elementare Konstrukte 2-9

Insbesondere gelten die üblichen Vorrangregeln der arithmetischen Operatoren und die assoziati-
ve Wirkung von Klammern.
Neben den vier Standardoperatoren ( + | - | * | / ) gibt es auch den Potenzoperator, der durch das
Zeichen ^ kodiert wird. Die Basis und der Exponent müssen dabei skalare Ausdrücke sein.
Die in der folgenden Tabelle zusammengestellten arithmetischen Standardfunktionen besitzen
als Argumente ebenfalls skalare Ausdrücke; das heißt aber nicht, dass sie nur in skalaren
Ausdrücken auftreten können!

MATLAB-Funktion Typ des Typ des Bedeutung


Arguments Resultats
abs(x) reell, komplex reell |x|
acos(x) reell reell Arc cos(x)
acosh(x) reell reell Areacosinus hyperbolicus von x
angle(x) komplex reell Phasenwinkel von x
asin(x) reell reell Arc sin (x)
asinh(x) reell reell Areasinus hyperbolicus von x
atan(x) reell reell Arc tan (x) in [- ð / 2 , ð / 2]
atan2(x) reell reell Arc tan (x) in [- ð , ð ]
atanh(x) reell reell Areatangens hyperbolicus von x
ceil(x) reell ganzzahlig Rundet x auf nächstgrößte ganze
Zahl
conj(x) komplex komplex Konjugiert komplexe Zahl zu x
cos(x) reell reell cos (x)
cosh(x) reell reell Cosinus hyperbolicus von x
exp(x) reell reell ex
fix(x) reell ganzzahlig Ganzzahliger Teil von x
floor(x) reell ganzzahlig Rundet x auf nächstkleinere gan-
ze Zahl
gcd(x,y) ganzzahlig ganzzahlig Größter gemeinsamer Teiler von
x und y
imag(x) komplex reell Imaginärteil von x
lcm(x,y) ganzzahlig ganzzahlig Kleinstes gemeinsames Vielfa-
ches von x und y
log(x) reell reell ln x
2 - 10 Elementare Konstrukte

log2(x) reell reell ld x - dualer Logarithmus


log10(x) reell reell lg x - dekadischer Logarithmus
mod(x,y) ganzzahlig ganzzahlig x Modulo y
real(x) komplex reell Realteil von x
rem(x,y) reell reell Rest der Division von x durch y
round(x) reell ganzzahlig Rundet zur nächsten ganzen
Zahl auf bwz. ab.
sign(x) reell reell Signum (-1, 0 , 1) von x
sin(x) reell reell sin (x)
sinh(x) reell reell Sinus hyperbolicus von x
sqrt(x) reell reell
tan(x) reell reell tan (x)
tanh(x) reell reell Tangens hyperbolicus von x

2.3.2 Vektorausdrücke

Vektorausdrücke verknüpfen Konstanten, skalare Variable, Vektoren, Matrizen sowie Ergeb-


nisse von Funktionsaufrufen so, dass sich Vektoren als Resultate ergeben. Dabei müssen die
Typen der Teilausdrücke miteinander verträglich sein. In diesem Zusammenhang ist zu beachten,
dass die folgende Operationen zwischen Vektoren einen Vektor zum Ergebnis haben:

Operator Operation Bedeutung Priorität


.^ v .^ w 1
.* v .* w 2
./ v ./ w 2
+ v+w 3
- v-w 3

Beachte: Die Verknüpfung liefert das Skalarprodukt der Vektoren!

Für die Operation der Transposition wird das Zeichen ‘ (Hochkomma) verwendet.

In der folgenden Tabelle sind Operationen zusammengestellt, die zwischen Vektoren und
Skalaren möglich sind; dabei bezeichne v einen Vektor/Vektorausdruck und c ein Skalar/einen
skalaren Ausdruck:
Elementare Konstrukte 2 - 11

Operator Operation Bedeutung Priorität


.^ v .^ c 1
.^ c .^ v 1
.* oder * v*c 2
./ oder / v ./ c 2
./ c ./ v 2
+ v+c 3
- v-c 3

In Vektorausdrücken können auch Bereichsvariable auftreten. Diese sind wie folgt definiert:

bereichsvariable 6 untere_grenze : schrittweite : obere_grenze

Die Bereichsvariable definiert implizit einen Vektor, dessen Komponenten gerade die Werte
sind, die sich durch Abarbeitung der Bereichsdefinition ergeben. Fehlt die Schrittweite, wird der
Wert 1 angenommen.
In der folgenden Tabelle sind wichtige MATLAB-Funktionen zusammengestellt, die als Argu-
mente Vektorausdrücke besitzen; der Argumenttyp wird in der Tabelle darum nicht gesondert
angegeben. Ist das Ergebnis ein Skalar, so richtet sich der detaillierte Typ (ganzzahlig, reell,
komplex) nach dem Typ der Elemente des Vektorausdrucks.

Funktion Ergebnistyp Bedeutung


find(v) vektor./ganzz. Die Funktion liefert die Indizes der Vektorele-
mente, die von Null verschieden sind.
hist(v,x) vektor./reell Für die Elemente von v wird ein Histogramm er-
zeugt, wobei der Vektor x die Klassenmittelpunk-
te definiert. Wird die Funktion ohne Wertzuwei-
sung aufgerufen, so wird das Histogramm auto-
matisch grafisch dargestellt.
length(v) ganzzahlig Die Länge des Vektors wird bestimmt.
max(v) skalar Das größte Element wird bestimmt.
mean(v) skalar Der Mittelwert der Elemente wird bestimmt.
min(v) skalar Das kleinste Element wird bestimmt.
norm(v) reell Die Euklidische Norm des Vektors wird be-
stimmt.
2 - 12 Elementare Konstrukte

norm(v,p) reell Die Vektornorm wird bestimmt. Wird für p


die Konstante Inf gewählt, so wird die Maximal-
norm bestimmt.
prod(v) skalar Das Produkt der Vektorelemente wird bestimmt.
std(v) reell Die Standardabweichung der Vektorelemente
wird bestimmt.
sort(v) vektoriell Die Vektorelemente werden in aufsteigender Rei-
henfolge sortiert.
sum(v) skalar Die Summe der Vektorelemente wird bestimmt.

< Beispiele

>> v=[ 1.4 5.6 7.9 11.1 ]; w=[1.1+12j 3.4+7.3j 23 6.2j];


>> v.*w
ans =
1.0e+002 *
0.0154 + 0.1680i 0.1904 + 0.4088i 1.8170 0 + 0.6882i
>> w-v
ans =
-0.3000 +12.0000i -2.2000 + 7.3000i 15.1000 -11.1000 + 6.2000i
>> max(w)
ans =
23
>> min(w)
ans =
0 + 6.2000i
>> prod(w)
ans =
-6.9632e+003 -1.1958e+004i
>> sum(w)
ans =
27.5000 +25.5000i
>> mean(w)
ans =
6.8750 + 6.3750i
>> sort(w)
ans =
0 + 6.2000i 3.4000 + 7.3000i 1.1000 +12.0000i 23.0000
>> v*w' % Das ist das Skalarprodukt der Vektoren v , w!
ans =
2.0228e+002 -1.2650e+002i
>> x=-pi/2:0.2*pi:pi/2 % Definition durch Bereichsvariable
x =
-1.5708 -0.9425 -0.3142 0.3142 0.9425 1.5708
>> y=sin(x)
y =
-1.0000 -0.8090 -0.3090 0.3090 0.8090 1.0000
Elementare Konstrukte 2 - 13

2.3.3 Matrizenausdrücke

Matrizenausdrücke verknüpfen Konstanten, skalare Variable, Vektoren, Matrizen sowie Ergeb-


nisse von Funktionsaufrufen so, dass sich Matrizen als Resultate ergeben. Dabei müssen die
Typen der Teilausdrücke miteinander verträglich sein. Die im Abschnitt 2.3.2 definierten
Operationen zwischen Vektor und Vektor bzw. zwischen Vektor und Skalar sind sinngemäß auf
Matrizen zu übertragen; das Ergebnis ist dann auch eine Matrix.

Beachte: Das Produkt A*B liefert das Matrizenprodukt der Matrizen A und B!

In der folgenden Tabelle sind wichtige MATLAB-Funktionen, die sich auf die Arbeit mit
Matrizen beziehen, zusammengestellt. Folgende Bezeichnungen für die Argumente wurden
gewählt:

A, D, V, L, U Matrizen (bzw. Matrizenausdrücke)


d, v Vektoren
n, m , p ganzzahlige Ausdrücke

Funktion Typ des Resul- Bedeutung


tats
chol(A) Matrix CHOLESKY -Faktorisierung (A muss positiv definit
sein!). Diese Zerlegung liefert eine Matrix C, so dass
gilt A = C CT
cond(A) Skalar Konditionszahl von A.
condest(A) Skalar Schätzung für die Konditionszahl von A.
det(A) Skalar Determinante von A
diag(v) Matrix Es wird eine Diagonalmatrix erzeugt, die den Vektor
v in der Hauptdiagonale enthält.
eig(A) Vektor/Matrix Eigenwerte und Eigenvektoren von A.
d = eig(A) In d wird der Vektor der Eigenwerte bereitgestellt.
[V D ] = eig(A) V enthält als Spalten die Eigenvektoren von A und
D ist eine Diagonalmatrix, die in der Diagonalen die
Eigenwerte enthält.
expm(A) Matrix Matrix-Exponentialfunktion.
eye(n) Matrix Es wird eine n x n - Einheitsmatrix erzeugt.
inv(A) Matrix Inverse von A.
lu(A) [L U] = lu(A) LU-Faktorisierung von A. In U steht dabei eine
„obere Dreiecksmatrix“; es gilt A = L * U
norm(A) Skalar Euklidische Norm von A.
2 - 14 Elementare Konstrukte

norm(A,p) Skalar p-Norm von A.


ones(n,m) Matrix Es wird eine n x m - Matrix erzeugt, deren Elemente
alle den Wert 1 besitzen.
pinv(A) Matrix Pseudoinverse von A nach MOORE -PENROSE.
poly(A) Vektor Koeffizientenvektor des charakteristischen Poly-
noms von A.
rand(n,m) Matrix Es wird eine n x m - Matrix erzeugt, deren Elemente
gleichverteilte Zufallszahlen aus dem Intervall (0,1)
sind.
randn(n,m) Matrix Es wird eine n x m - Matrix erzeugt, deren Elemente
standard-normalverteilte Zufallszahlen aus dem In-
tervall (0,1) sind.
rank(A) Skalar Rang von A.
size(A) Vektor Der Vektor [n,m] enthält die Zeilen/Spalten-Längen.
sortrows(A) Matrix Die Zeilen von A werden in aufsteigender Reihen-
folge sortiert.
svd(A) Vektor/Matrix Singulärwertzerlegung von A.
zeros(n,m) Matrix Es wird eine n x m - Matrix erzeugt, deren Elemente
alle den Wert 0 besitzen.

< Beispiele
>> A=[1.2 3.4 5.7; -2.2 -1.4 1.2; 23.6 5.6 8.3];
>> eig(A)
ans =
17.0287
-6.6975
-2.2312
>> [V D]=eig(A)
V =
-0.3426 0.4353 0.0335
-0.0203 0.3670 0.8493
-0.9393 -0.8221 -0.5268
D =
17.0287 0 0
0 -6.6975 0
0 0 -2.2312
>> a=inv(A)

a =
-0.0721 0.0145 0.0474
0.1830 -0.4895 -0.0549
0.0814 0.2889 0.0228
Elementare Konstrukte 2 - 15

2.3.4 Logische Ausdrücke

In MATLAB gibt es keinen speziellen logischen Datentyp. Die logischen Werte wahr und falsch
werden durch die ganzzahligen Werte 1 (wahr) und 0 (falsch) dargestellt. Logische Ausdrücke
entstehen durch die Ausführung von Vergleichen und durch logische Verknüpfungen über
logische Operatoren. Sie können nur die Werte 0 oder 1 annehmen.

Die folgenden Vergleichsoperatoren sind in MATLAB definiert:

Operator Bedeutung
< kleiner als
<= kleiner als oder gleich
> größer als
>= größer als oder gleich
== gleich
~= ungleich

Die folgenden logischen Operatoren sind in MATLAB definiert:

Operator Bedeutung
& Konjunktionsoperator
| Disjunktionsoperator
~ Negationsoperator

Wenn zwei Vektoren miteinander verglichen werden, so werden die entsprechenden Elemente
verglichen. Das Resultat ist dann ein Vektor, der die Vergleichsergebnisse enthält.
Werden zwei Matrizen verglichen, so werden wiederum die Elemente miteinander verglichen.
Das Resultat ist dann die Matrix der Vergleichsergebnisse.
Die nachfolgenden Funktionen sind geeignet, Vergleiche von Vektoren zusammenfassend zu
bewerten (die Funktionen entsprechen dem All- bzw. dem Existenzquantor). Der Vektor v sei
das Ergebnis eines vektoriellen Vergleichs, dann gilt

Funktion Bedeutung
all(v) Die Funktion liefert das Ergebnis 1, wenn alle Vergleiche 1 geliefert haben.
any(v) Die Funktion liefert das Ergebnis 1, wenn wenigstens ein Vergleich 1 gelie-
fert hat
2 - 16 Elementare Konstrukte

Werden diese Funktionen auf Matrizenvergleiche angewandt, so ergeben sich als Ergebnisse
Vektoren.

< Beispiele

>> a=randn(1,5)'
a =
-0.1867 0.7258 -0.5883 2.1832 -0.1364
>> b=randn(1,5)'
b =
0.1139 1.0668 0.0593 -0.0956 -0.8323
>> a>=b
ans =
0 0 0 1 1
>> any(a==b)
ans =
0
>> any(a<=b)
ans =
1

2.3.5 Zeichenkettenausdrücke

Werden Zeichenketten in Vektoren oder Matrizen abgelegt, so müssen sie als Elemente alle von
gleicher Länge sein. Werden Zeichenketten in zellulären Feldern gespeichert, ist diese Ein-
schränkung hinfällig.
Zeichenkettenausdrücke entstehen durch die Verknüpfung von Zeichenketten mit Hilfe speziel-
ler Funktionen. Für die nachfolgende Zusammenstellung gelten folgende Festlegungen:

c, c1, c2, ....cn Zeichenkettenkonstanten


S Char-Matrix
x, n skalarer Ausdruck

Funktion Bedeutung
blanks(n) Erzeugt einen leeren String der Länge n.
char(c1,...,cn) Generiert eine Char-Matrix, in deren Zeilen die Zeichenketten c1
.... cn stehen, wobei alle auf eine gemeinsame Länge mit Leerzei-
chen aufgefüllt werden.
char(x) Konvertiert den Wert von x in Zeichenketten. x kann ein skalarer
oder ein Vektorausdruck sein.
double(S) Die Char-Matrix wird in eine numerische Matrix überführt, wo-
bei das jeweils korrespondierende Element den numerischen
ASCII-Wert enthält.
eval(c) Die Zeichenkette c wird als MATLAB-Ausdruck ausgewertet.
Elementare Konstrukte 2 - 17

findstr(c1,c2) Der kürzere String wird im längeren gesucht; Ergebnis sind die
Startpositionen des kürzeren im längeren.
ischar(c) Ergebnis der Funktion ist 1, fall c ein String ist.
lower(c) Die Zeichenkette c wird in Kleinbuchstaben konvertiert.
num2str(x) Der Wert/ die Werte von x werden in Zeichenketten konvertiert.
x kann ein skalarer oder ein Vektorausdruck sein.
str2num(S) Die Char-Matrix S wird in skalare Wert konvertiert.
strcat(c,..,cn) Die Zeichenketten der Liste werden in der Reihenfolge verbun-
den.
strcmp(c1,c2) Die Zeichenketten c1 und c2 werden miteinander verglichen. Das
Ergebnis ist 1, wenn sie identisch sind.
upper(c) Die Zeichenkette c wird in Großbuchstaben konvertiert.

< Beispiele

>> S=char('1.23','3.4+7i','375')
S =
1.23
3.4+7i
375
>> x=str2num(S)
x =
1.0e+002 *
0.0123
0.0340 + 0.0700i
3.7500
>> c1=num2str(x(2))
c1 =
3.4+7i
>> strcmp(c1,'3.4+7*i')
ans =
0
>> strcmp(c1,'3.4+7i')
ans =
1
>> eval('sum(x)')
ans =
3.7963e+002 +7.0000e+000i
2 - 18 Elementare Konstrukte

2.3.6 Polynome

Polynome werden durch die Vektoren ihrer Koeffizienten definiert, wobei der Koeffizient zur
höchsten Potenz im ersten Element abgespeichert wird, der zur zweithöchsten im zweiten, usw.
Es besteht also folgende Korrespondenz:

Für die Addition und Subtraktion von Polynomen können die Vektoroperatoren + und - genutzt
werden. Für weitere Operationen mit Polynomen stellt MATLAB die in der folgenden Tabelle
angegebenen Funktionen bereit. Die Vektoren v, w bezeichnen Koeffizientenvektoren, die
Vektoren x, y bezeichnen Vektoren mit reellen Daten, wobei x die Werte der unabhängigen und
y die Werte der zugehörigen abhängigen Variablen enthält.

Funktion Bedeutung
conv(v,w) Die durch v und w definierten Polynome werden multipli-
ziert; die Funktion liefert den Vektor der Koeffizienten
des Produktpolynoms.
deconv(v,w) Die durch v und w definierten Polynome werden divi-
diert; die Funktion liefert den Koeffizientenvektor.
poly(z) Die Funktion bestimmt die Koeffizienten des Polynoms,
das die im Vektor z vorgegebenen Nullstellen besitzt.
polyder(v) Die Funktion liefert die Koeffizienten der ersten Ablei-
tung des durch v definierten Polynoms.
polyfit(x,y,n) Die Funktion liefert die Koeffizienten des Polynoms vom
Grade n, das die in den Vektoren x und y gegebenen Da-
ten im Sinne der Methode der kleinsten Fehlerquadrate
approximiert.
polyval(v,x) Die Werte des durch v definierten Polynoms werden an
den Stellen x (x kann Skalar/Vektor/Matrix sein ) berech-
net.
roots(v) Die Funktion liefert als Ergebnis den Vektor der Nullstel-
len des durch v definierten Polynoms

< Beispiele

>> v=[2 3 4 1]; w=[0.3 -2 4];


>> p=conv(v,w)
p =
0.6000 -3.1000 3.2000 4.3000 14.0000 4.0000
Elementare Konstrukte 2 - 19

>> dp=deconv(p,w)
dp =
2.0000 3.0000 4.0000 1.0000
>> r=roots(p)
r =
3.3333 + 1.4907i
3.3333 - 1.4907i
-0.5971 + 1.1306i
-0.5971 - 1.1306i
-0.3059

>> % sin(x) soll im Bereich -pi/2<= x <= pi/2 durch ein Polynom
>> % approximiert werden.

>> x=-pi/2:0.1*pi:pi/2;
>> y=sin(x);
>> p=polyfit(x,y,3);
>> p
p =
-0.1422 -0.0000 0.9858 0.0000
>> py=polyval(p,x);
>> plot(x,y,x,py)

Das Resultat ist im folgenden Bild dargestellt (die beiden Kurven fallen praktisch zusammen):
2 - 20 Elementare Konstrukte

2.4 Elementare grafische Darstellungen


2.4.1 Die Funktion plot

MATLAB ermöglicht bereits im Kommandomodus die Erzeugung von Diagrammen auf


einfache Art und Weise. Die Standardfunktionen gehen bei der Skalierung der Diagramme von
naheliegenden Voraussetzungen aus, so dass der Nutzer in der Regel mit den Standardvorgaben
auskommt. Die erzeugten Diagramme lassen sich im zugehörigen Figure-Fenster interaktiv
editieren.
Von besonderer Bedeutung ist die plot-Funktion. Diese kann in unterschiedlichen Modifikatio-
nen aufgerufen werden. Die wichtigsten Formen sind im folgenden dargestellt:

plot(X)
plot(x,y,..)
plot(x,y,linienspezifikation,..)
plot(..,‘eigenschaftsname‘,wert_der_eigenschaft,..)

Die einzelnen Aufrufe haben folgende Bedeutung:


1. X ist eine Vektor oder eine Matrix. Die Werte der Spalten werden über dem Index
aufgetragen.
2. x und y sind Vektoren, die die Abszissen- und Ordinatenwerte der darzustellenden
Verläufe enthalten. Werden mehrere Kurven in einem Diagramm dargestellt, so werden
die Attribute (Linienfarbe, Linienart, usw. ) automatisch vergeben.
3. Dem Vektorpaar x und y kann, als Zeichenkette kodiert, eine Linienspezifikation folgen.
Dafür gelten folgende Regeln:

linienspezifikation 6 ‘ linien_stil marker_typ linien_farbe ‘

Folgende Parameter sind für Linien-Stil, Marker-Typ und Linien/Marker-Farbe möglich:

‚ Linien-Stil

Zeichen Bedeutung
- Durchgezogene Linie
-- Strichlierte Linie
: Punktierte Linie
.- Strichpunktierte Linie

‚ Marker-Typ

Symbol Bedeutung
+ Plus-Zeichen als Marker
° Kringelchen
Elementare Konstrukte 2 - 21

* Stern
. Punkt
x Kreuz
s Quadrate
d Raute
^ Aufwärts orientiertes Dreieck
v Abwärts orientiertes Dreieck
> Nach links orientiertes Dreieck
< Nach rechts orientiertes Dreieck
p Fünfzackiger Stern
h Sechszackiger Stern

‚ Linien (Marker) -Farbe

Symbol Bedeutung
r rot
g grün
b blau
c zyan
m violett
y gelb
k schwarz
w weiß

1.4 Zusätzlich zu den bisherigen Spezifikationen können weitere Eigenschaften festgelegt


werden. Dazu sind die Namen und die Werte der Eigenschaften anzugeben. Als Eigen-
schaftsnamen sind folgende Bezeichner definiert:

eigenschaftsname 6 LineWidth | MarkerEdgeColor | MarkerFaceColor | MarkerSize

Die Groß-/Kleinschreibung innerhalb dieser Namen ist nicht relevant!

‚ LineWidth
Die Linienstärke wird ganzzahlig in Punkten vorgegeben.
2 - 22 Elementare Konstrukte

‚ MarkerEdgeColor
Die Farbe des Markerrandes wird durch eine Zeichenkette kodiert; es gelten die gleichen
Festlegungen wie für die Linienfarbe.

‚ MarkerFaceColor
Die Füllfarbe der Marker wird als eine Zeichenkette kodiert; es gelten die gleichen
Festlegungen wie für die Linienfarbe.

‚ Marker Size
Die Markergröße wird ganzzahlig in Punkten vorgegeben.

Bei dieser Art der Diagrammerzeugung kann mit einem Plot-Aufruf nur ein Kurvenver-
lauf dargestellt werden. Sollen mehrere Verläufe in ein Figure-Fenster aufgenommen
werden, so ist der Befehl

hold on

notwendig. Von diesem Befehl an werden die neuen grafischen Darstellungen dem Inhalt
des aktuellen Figure-Fensters hinzugefügt. Nach dem Befehl

hold off

wird das Fenster nur mit der aktuellen grafischen Darstellung belegt. Dieser Zustand ist
der Standardzustand.

Das Figure-Fenster kann in mehrere Abschnitte aufgeteilt werden. Diese werden zeilen- und
spaltenweise indexiert. Durch den Aufruf der Funktion subplot kann vor der Erzeugung eines
Teildiagramms angegeben werden, um welchen Abschnitt es sich im folgenden handeln soll. Der
Aufruf hat die folgende Form:

subplot(zeilen, spalten ,index)

Die Parameter der Funktion haben folgende Bedeutung:


zeilen Anzahl der Zeilen, in die der Diagrammbereich aufgeteilt werden soll.
spalten Anzahl der Spalten, in die der Diagrammbereich aufgeteilt werden soll.
index Aktueller Index des Feldes, in das gezeichnet werden soll. Die Felder werden
dabei zeilenweise fortlaufend numeriert.

< Beispiel

>> x=-8:0.1*pi:8;
>> y1=0.2*sin(x)+0.1*sin(2*x)+0.12*sin(3*x);
>> y2=0.4*cos(x)+0.2*sin(2*x)+0.15*cos(2*x);
>> plot(x,y1,'-*',x,y2,':+')
Elementare Konstrukte 2 - 23

Die beiden Kurven können mit subplot auch in Teildiagramme gezeichnet werden:

>> subplot(2,1,1);
>> plot(x,y1,'-h')
>> subplot(2,1,2)
>> plot(x,y2,'-^')
2 - 24 Elementare Konstrukte

2.4.2 3D-Grafiken

MATLAB stellt eine Reihe von Funktionen bereit, die die Erzeugung von 3D-Grafiken ermögli-
chen.

‘ plot3
Die Funktion für die 3D-Darstellungen von Kurven ist plot3, für deren Aufruf die folgenden
Möglichkeiten von Interesse sind:

plot3(x1,y1,z1,..)
plot3(x1,y1,z1,linienspezifikation,..)
plot3(..,‘eigenschaftsname‘,wert_der_eigenschaft,..)

Die Parameter x1, y1, z1 ,... sind Vektoren oder Matrizen, die die Punkte der Kurvenverläufe
enthalten. Die Bedeutungen der Aufrufe lassen sich in Analogie zu denen von plot erschlie-
ßen (s. vorherigen Abschnitt 2.4.1).

< Beispiel

>> x=exp(0.03*z).*sin(z);
>> y=exp(0.03*z).*cos(z);
>> plot3(x,y,z,'-k','LineWidth',2)
Elementare Konstrukte 2 - 25

‘ meshgrid
Die Funktion meshgrid erzeugt ein geeignetes Raster für die Darstellung von Flächen im
Raum. Dabei werden aus den Vektoren x und y die Matrizen X und Y erzeugt. Die Matrix X
enthält den Vektor x so oft als Zeilenvektor, wie y lang ist; die Matrix Y enthält den Vektor y
spaltenweise so oft, wie x lang ist. Die Elementepaare der Matrizen X und Y ergeben dann die
Koordinaten der Rasterpunkte, über die eine Fläche dargestellt werden kann. Der Aufruf hat
folgende Form:

[X,Y] = meshgrid(x,y)

‘ mesh
Diese Funktion dient der Darstellung von Flächen in Gestalt von Drahtmodellen. Folgende
Formen des Funktionsaufrufs sind möglich

mesh(X,Y,Z)
mesh(Z)
mesh(..,‘eigenschaftsname‘,wert_der_eigenschaft,..)

Die Matrizen X, Y stellen das Darstellungsraster bereit; in der Matrix Z sind die zugehörigen
Wert für die dritte Koordinate enthalten. Fehlt die Angabe der Matrizen X und Y, so werden die
Zeilen- und Spaltenindizes der Matrix Z als Koordinatenwerte genutzt (2. Aufruf).
Bei der dritten Form des Aufrufs werden die Eigenschaften der Darstellung verändert. Die Liste
der Eigenschaften ist über die on-line-Hilfefunktion abrufbar.

< Beispiel

>> [X,Y]=meshgrid(-8:0.5:8);
>> Z=exp(-0.1*X.^2-0.2*Y.^2);
>> mesh(X,Y,Z)
2 - 26 Elementare Konstrukte

‘ meshz, meshc

Diese beiden Funktionen erzeugen zusätzlich zum Drahtmodell der Fläche die Darstellungen der
Höhenlinien (meshc) bzw. umschließen die Kontur der Funktion mit einem „Vorhang“
(meshz). Sie werden wie mesh aufgerufen.

‘ surf, surfc

Die Funktion surf erzeugt eine 3D-Flächendarstellung, wobei die Fläche entsprechend den
Werten von Z eingefärbt wird. Der Aufruf von surfc erzeugt neben der Fläche noch zusätzlich
die Höhenlinien in der xy-Ebene. Folgende Formen des Funktionsaufrufs sind von Bedeutung:

surf(X,Y,Z)
surf(Z)
surf(..,‘eigenschaftsname‘,wert_der_eigenschaft,..)

Die Bedeutung der Parameter ist die wie bei mesh. Die Eigenschaften und ihre Werte sind der
on-line-Hilfe zu entnehmen.

< Beispiel:

>> [X,Y]=meshgrid(-8:0.5:8);
>> Z=sin(sqrt(X.^2+Y.^2))./(sqrt(X.^2+Y.^2)+0.005);
>> surfc(X,Y,Z)
Elementare Konstrukte 2 - 27

2.4.3 Simultane Nutzung mehrerer Grafik-Fenster

Der Anwender von MATLAB kann grafische Darstellungen in mehreren Grafik-Fenstern


anordnen. Mit einem Grafik-Kommando wird, sofern noch kein Fenster (als Figure-Window)
geöffnete wurde, automatisch ein Fenster geöffnet. Der Anwender kann aber auch dieses Fenster
vorher öffnen und er kann weitere Fenster öffnen, über deren Belegung er frei verfügen kann.
Die Ausgabe einer Grafik erfolgt dabei immer in ein „aktuelles“ Fenster; welches von den
simultan geöffneten Fenstern das ist, wird durch ein Aktivierungskommando bestimmt. Der
Zugriff auf ein Grafik-Fenster erfolgt über ein Figure-Handle. Die Fenster werden ganzzahlig
nummeriert (die laufende Nummer wird im Figure-Window angezeigt).

‘ Öffnen eines neuen Grafik-Fensters


Über die folgenden Funktionsaufrufe kann ein Grafik-Fenster geöffnet werden:

‚ figure
Es wird ein neues Grafik-Fenster, das die Standardeigenschaften besitzt, geöffnet; alle
grafischen Kommandos nach diesem Aufruf richten sich an dieses Fenster, solange kein
anderes Fenster zum aktuellen Fenster gemacht wird (s. u.).

‚ figure(‘eigenschaftsname‘,wert_der_eigenschaft,..)
Der Aufruf hat die gleiche Wirkung wie figure. Die Eigenschaften werden aber neu
gesetzt. Dabei werden die Namen der Eigenschaften in Zeichenkettenform angegeben;
die Werte folgen unmittelbar. Eigenschaften sind beispielsweise die Position des Fens-
ters auf dem Bildschirm, der Titel des Fensters oder die Hintergrundfarbe. Die Liste der
Eigenschaften sowie die möglichen Werte der Eigenschaften sind der on-line-Hilfe
(Stichwort: figure) zu entnehmen.

‚ h = figure(...)
Der Aufruf hat die gleiche Wirkung wie die vorangegangenen Aufrufe. Die Variable h
enthält aber nach dem Aufruf den Figure-Handle, der auf das erzeugte Grafik-Fenster
verweist. Über dieses Handle kann das Fenster bei Bedarf wieder zum aktuellen gemacht
werden. Der Aufruf kann mit oder ohne Eigenschaftsdefinition erfolgen.

‘ Auswahl eines vorhandenen Grafik-Fensters als aktuelles Ausgabefenster


Mit dem folgenden Funktionsaufruf wird ein Grafik-Fenster zum aktuellen Ausgabefenster
deklariert, d..h. alle weiteren Grafikkommandos beziehen sich auf dieses Fenster. Der Aufruf hat
die folgenden Form:

‚ figure(h)
Ist h ein Figure-Handle, so wird auf das Fenster umgeschaltet, das zu diesem Handle
gehört. Ist h kein Figure-Handle für ein existierendes Fenster aber eine ganze Zahl, so
wird ein Fenster mit der Nummer erzeugt, die der ganzen Zahl entspricht.

Die Auswahl des aktuellen Grafikfensters kann der Anwender aber auch interaktiv treffen. Dazu
muss lediglich vor dem ersten Grafikkommando, das sich auf ein bestimmtes Fenster beziehen
soll, das betreffende Fenster per Mausklick in den Vordergrund geholt werden.
< Beispiel
2 - 28 Elementare Konstrukte

Im folgenden Beispiel werden zunächst zwei Grafikfenster erzeugt:


>> dia1=figure;
>> dia2=figure;

Als nächstes wird eine Zufallsfolge generiert. Diese Folge wird im ersten Grafikfenster dar-
gestellt:

>> t=0:0.1:10;
>> y=rand(1,length(t));
>> figure(dia1);
>> plot(t,y)

Als nächstes wird das Histogramm für


die empirische Verteilung der Signal-
werte erzeugt und im zweiten Fenster dargestellt:

>> figure(dia2)
>> hist(y,20)
Elementare Konstrukte 2 - 29

2.4.4 Eigenschaften grafischer Darstellungen

Die Eigenschaften grafischer Darstellungen können vom Anwender in vielfältiger Art und Weise
eingestellt bzw. geändert werden. Grundsätzlich sind dabei zwei Wege zu unterscheiden:

S Die Grafik wird zunächst erzeugt und über die interaktiven Werkzeuge des Grafik-
Fensters verändert.
S Die Eigenschaften der Grafik werden durch MATLAB-Funktionsaufrufe eingestellt.

Beide Wege stellen den gleichen Funktionsumfang zur Verfügung, wobei aus dem Zusammen-
hang heraus zu entscheiden ist, welcher Weg günstiger ist.

2.4.4.1 Die interaktiven Werkzeuge

Ein Figure-Fenster besitzt die im folgenden Bild dargestellte Menüzeile bzw. Werkzeugleiste:
Im folgenden werden die wichtigsten Menüpunkte mit ihren Untermenüs beschrieben.

‘ File
Über diesen Menüpunkt sind die Lade-, Speicher- und Druckfunktionen für Grafiken zu errei-
chen. Die meisten der Untermenüpunkte bedürfen keiner weiteren Erläuterung. Für die Ein-
bindung einer Grafik in ein anderes Dokument ist die Funktion Export von Bedeutung: Nach
Anklicken erscheint ein Speicherdialog, der die Auswahl des Grafikformats erlaubt, in das die
Grafik beim Abspeichern zu konvertieren ist. Die Grafik wird stets ohne den Rahmen abgelegt.

‘ Edit
Über diesen Menüpunkt wird ein Untermenü erreichbar, dass eine Reihe von Funktionen für die
Editierung der Grafik bereitstellt. Zunächst werden die Funktionen für das Markieren, Aus-
schneiden, Kopieren usw. angeboten.
Über die folgenden drei Menüpunkte kann der Anwender alle Parameter der Grafik erreichen
und verändern. Es sind dies die Untermenüpunkte:
‚ Figure Properties
‚ Axes Properties
‚ Current Object Properties
Nach der Aktivierung eines dieser Menüpunkte geht die Grafik in den editierbaren Zustand über
und es erscheint ein Formular mit mehreren Seiten, über das die Eigenschaften der betreffenden
Konstrukte geändert werden können.
2 - 30 Elementare Konstrukte

Im folgenden Bild ist das Formular für die Achsen-Eigenschaften dargestellt:

Die anderen Formulare haben eine ähnliche Gestalt. Die Bedeutungen der Felder sind weit-
gehend aus der Formularbeschriftung zu erschließen. Die on-line-Hilfe stellt weiterführende
Informationen bereit.

Hinweis: Für die Beschriftung der Grafik bzw. der Achsen kann eine Teilmenge von TeX-
Befehlen (das sind Zeichenketten, die dem Sonderzeichen \ folgen) verwendet
werden. Damit können auch Formeln, griechische Buchstaben u.ä. für die Be-
schriftung herangezogen werden. Details sind in der on-line-Hilfe zu finden.

‘ View
Dieser Menüpunkt gestattet die Einstellung der Werkzeugleiste. Standard ist die oben dar-
gestellte Werkzeugleiste, die durch den Menüpunkt Figure Toolbar eingestellt wird. Mit dem
Menüpunkt Camera Toolbar kann eine zweite Werkzeugleiste aktiviert werden, die den schnel-
len Zugriff auf die Kamera-Werkzeuge gestattet. Mit Hilfe dieser Werkzeuge kann das Er-
scheinungsbild der Grafik verändert werden (s. Menüpunkt Tools).

‘ Insert
Unter diesem Menüpunkt wird ein Untermenü aktiviert, das eine Reihe von Einfügefunktionen,
so für Achsen, zusätzliche Grafikelemente (Pfeile, Linien, Texte ) usw., bereitstellt.
Elementare Konstrukte 2 - 31

‘ Tools
Unter diesem Menüpunkt wird ein Untermenü angeboten, dessen wichtigste Punkt im folgenden
erläutert werden (diese Punkte sind prinzipiell auch über die Werkzeugleisten erreichbar):

‚ Edit Plot
Dieser Menüpunkt ist ein rastender Schalter. Nach Betätigung werden die Werkzeuge für
das Editieren der Grafik aktiviert. Insbesondere kann der Anwender mit der Maus die
dargestellte Fläche oder die Grafik als Ganzes markieren; mit der rechten Maustaste
können anschließend Popup-Menüs aktiviert werden, die sich in ihrer Funktionalität am
markierten Objekt orientieren.
‚ Zoom In / Zoom Out
Über diese Menüpunkte kann die Größe der Grafik relativ zum Figure-Fenster verändert
werden.
‚ Rotate 3D
Die Grafik kann anschließend über die Mausbewegung gedreht werden. Es erscheint ein
Hilfskoordinatensystem, das die Orientierung erleichtert.
‚ Move Camera
Die Grafik kann anschließend aus der Sicht einer virtuellen Kamera, deren Position
durch den Mauszeiger vorgegeben wird, betrachtet werden.
‚ Camera Motion
Es erscheint ein weiterführendes Untermenü, das die Art der Kamerabewegung zu
modifizieren gestattet. So kann nicht nur der Blickwinkel (Orbit Camera) sondern es
können beispielsweise auch die Entfernung (Move Forward / Back) oder die Beleuch-
tung (Orbit Scene Light ) geändert werden. Mit Walk wird die Kamera, gesteuert von der
Mausgeschwindigkeit über die Grafik bewegt. Die Bewegung dauert an, so lange die
Maustaste gedrückt bleibt.
‚ Camera Axis
Es erscheint ein Untermenü, das die Wahl der Achse gestattet, die als senkrechte Achse
(also die Achse, die im 3D-Bild in der Bildschirmebene liegt) angenommen werden soll.
‚ Camera Reset
Es werden definierte Startbedingungen für die Ansicht der Grafik eingestellt.
Die über den Toolbar zu erreichenden Werkzeuge sind der folgenden Darstellung zu
entnehmen:

Übergang in den Editiermodus

Freihandverschieben von Grafiken

Zoom: Ein/Aus
2 - 32 Elementare Konstrukte

2.4.4.2 MATLAB-Funktionen zur Steuerung der Grafik-Eigenschaften

Für alle Operationen, die über die interaktiven Werkzeuge möglich sind, gibt es auch ent-
sprechende MATLAB-Funktionen. Die wichtigsten werden im folgenden beschrieben.

‘ axis
Diese Funktion bietet die Möglichkeit, die Koordinatenachsen zu skalieren. Folgende Formen
des Funktionsaufrufs sind von Interesse:

‚ axis
Der Funktionsaufruf liefert die Bereiche für die Koordinatenachsen als Vektor (4 oder
6 Elemente je nach 2D/3D-Darstellung).
‚ axis([xmin xmax ymin ymax])
Die unteren/oberen Grenzen der Koordinatenachsen einer 2D-Grafik werden gesetzt.
‚ axis([xmin xmax ymin ymax zmin zmax])
Die unteren/oberen Grenzen der Koordinatenachsen einer 3D-Grafik werden gesetzt.
‚ axis auto
Die automatische Achsen-Einstellung (die MATLAB aus den Datenbereichen ableitet)
wird vorgenommen.
‚ axis manual
Die aktuellen Achseneinstellungen werden festgehalten; wenn hold on aktiv ist, wird
eine neue Grafik in das aktuelle Achsensystem gezeichnet.
‚ axis tight
Die Grenzwerte der Achsen werden exakt auf die minimalen/maximalen Werte der
Daten gesetzt.
‚ axis xy
Das Koordinatensystem wird in der Kartesischen Standardform gezeichnet. Der Koordi-
natenursprung befindet sich in der linken unteren Ecke; die x-Achse ist aufsteigend
skaliert und horizontal angeordnet, die y-Achse ebenfalls aufsteigend skaliert und
vertikal angeordnet.
‚ axis equal
Alle Achsen werden auf einen gemeinsamen Maßstab skaliert.
‚ axis square
Die Achsen werden so skaliert, dass der Zeichenbereich ein Quadrat bzw. ein Würfel
wird.
‚ axis normal
Die Standardeinstellungen werden angenommen. Die Achsen werden entsprechend den
aus den Daten ableitbaren Grenzen skaliert und das Koordinatensystem wird auf die
Standardorientierung ausgerichtet.
‚ axis off
Alle Achsenlinien, Koordinatenwerte, Markierungen und Beschriftungen der Koordina-
tenachsen werden ausgeblendet.
‚ axis on
Die Koordinatenachsen werden in allen Details wieder dargestellt.
Elementare Konstrukte 2 - 33

‘ axes
Diese Funktion erlaubt die Definition der detaillierten Achseneigenschaften über die Vorgabe
der Eigenschaftswerte. Die wichtigsten Formen des Aufrufs sind:

‚ axes
Es wird ein 2D-Achsenkreuz erzeugt, dass Standardeinstellungen realisiert.
‚ axes(‘eigenschaftsname‘,wert_der_eigenschaft,..)
Es wird ein Achsensystem erzeugt, dessen Eigenschaften sich aus den in Klammern
folgenden Parametern ( Farbe des Hintergrundes, Hilfslinientyp usw. ) ergeben. Es gibt
eine umfangreiche Liste der Möglichkeiten, die der on-line-Hilfe zu entnehmen sind.

‘ xlabel, ylabel, zlabel


Diese Funktionen erlauben die Beschriftung der jeweiligen Koordinatenachse. Die wichtigsten
Formen des Aufrufs (dargestellt für das Beispiel xlabel) sind:

‚ xlabel(‘string‘)
Die durch ‘string‘ kodierte Zeichenkette wird zur Achsenbeschriftung. TeX-Kom-
mandos werden im Standardfall interpretiert.
‚ xlabel(fname)
Der Ausdruck fname muss einen Zeichenkettenwert liefern; dieser Wert wird zur Be-
schriftung der Achse herangezogen.
‚ xlabel(..‘eigenschaftsname‘,wert_der_eigenschaft,..)
Die Eigenschaften der Achsenbeschriftung werden entsprechend gesetzt. Die möglichen
Eigenschaften und ihre Wertedarstellungen sind der on-line-Hilfe zu entnehmen.

‘ text
Mit Hilfe dieser Funktion kann eine grafische Darstellung mit einem Text beschriftet werden.
Die wichtigsten Formen des Aufrufs sind:

‚ text(x,y,'string')
Durch diesen Aufruf wird eine 2D-Grafik beschriftet. Die Koordinaten des Textbeginns
werden durch die Ausdrücke x und y festgelegt. Sind x, y Vektorausdrücke, so markieren
sie den Beginn der Textzeilen, die in der Zeichenkettenmatrix (in der Regel ein zelluläres
Feld von Zeichenketten) enthalten sind. Die TeX-Kommandos werden interpretiert, so
dass auch Formeln und Sonderzeichen im Text auftreten können.
‚ text(x,y,z,'string')
Durch diesen Aufruf wird eine 3D-Grafik beschriftet. Die Bedeutungen der Parameter
sind die gleichen wie bei der 2D-Grafik. Die Koordinate z kommt als weiterer Parameter
noch hinzu.
‚ text(..‘eigenschaftsname‘,wert_der_eigenschaft,..)
Die Texteigenschaften können sehr flexibel festegelegt werden. Die Eigenschaften sowie
die möglichen Werte sind der on-line-Hilfe zu entnehmen.

‘ title
Mit Hilfe dieser Funktion kann eine Grafik mit einer Titelzeile versehen werden. Der Aufruf hat
die Form:
title(string)
2 - 34 Elementare Konstrukte

String ist ein Zeichenkettenausdruck, der als Überschrift des Diagramms ausgegeben wird.

< Beispiel

Im folgenden Beispiel wird die Funktion dargestellt. Im


beschriftenden Text werden u. a. auch TeX-Befehle verwendet, um die Funktion zu kodieren.

% Darstellung einer Funktion als 3D-Plot


[X,Y]=meshgrid(-8:0.2:8);
R=sqrt(X.^2+Y.^2);
Z=sin(R).*exp(-0.1*R);
surf(X,Y,Z);
Xlabel('x'); YLabel('Y'); ZLabel('Z');
text(-2,5,1,'sin(\surd{x^{2} + y^{2}} ) e ^{- 0.1 \surd{x^{2} + y^{2}}}');
title('3D-Graf einer Funktion');

In der folgenden Darstellung ist der 3D-Graf der Funktion als Ergebnis zu sehen.
Elementare Konstrukte 2 - 35

2.5 Daten-Input/Output
2.5.1 Lesen/Schreiben von binären Dateien

Mit im folgenden behandelten Funktionen lassen sich binäre Speicherabbilder von Daten
zwischen Dateien und Arbeitsspeicher übertragen.

‘ Öffnen einer binären Datei


Bevor auf eine Datei zugegriffen werden kann, muss sie geöffnet werden. Mit Hilfe der folgen-
den Funktionsaufrufe kann eine Datei für Datenübertragungen geöffnet werden.

‚ fid = fopen(filename)
Die Datei wird für den Lesezugriff geöffnet. Der Ausdruck filename muss den Namen
der Datei einschließlich Zugriffspfad, sofern nicht auf das Standardverzeichnis zu-
gegriffen wird, enthalten. Unter fid steht der File-Identifikator zur Verfügung, über den
in den folgenden Transferoperationen auf die geöffnete Datei Bezug genommen wird.
‚ fid = fopen(filename,permission)
Zusätzlich zu den obigen Angaben wird bei diesem Aufruf ein Zugriffsrecht gesetzt.
Dieses wird über den Parameter permission als Zeichenkette angegeben. Folgende
Möglichkeiten sind von Bedeutung:

permission Bedeutung
‘r‘ Öffnen nur für Lesezugriff.
‘w‘ Öffnen nur für Schreibzugriff.
‘a‘ Öffnen nur für Anhängen von Daten.
‘r+‘ Öffnen nur für Lese-/Schreibzugriff.

‚ [fid,message] = fopen(filename,permission)
Diese Form des Aufrufs unterscheidet sich von den bisherigen Formen dadurch, dass in
der Variablen message eine Mitteilung im Falle eines Systemfehlers übergeben wird.
Im Fehlerfall wird für fid der Wert -1 zurückgegeben.

‘ Lesen einer binären Datei


Mit der Funktion fread können binär abgelegte Daten wieder gelesen werden. Folgende
Aufrufe sind von Bedeutung:

‚ A= fread(fid)
Aus der unter fid geöffneten Datei wird A gelesen. Dabei werden folgende Annahmen
getroffen:
• A ist Spaltenvektor.
• Die Datei wird bis zum Endezeichen gelesen.
• Die Daten werden als numerisch kodierte Zeichenfolge interpretiert (jedes Byte
wird in einem Vektorelement abgespeichert.
Sind diese Annahmen nicht zutreffend, ist einer der folgenden Aufrufe zu nutzen.
‚ A = fread(fid,size,precision)
2 - 36 Elementare Konstrukte

Dieser Aufruf gestattet es, im Parameter size die Anzahl der zu übertragenden Daten
vorzugeben und im Parameter precision die interne Darstellung zu kodieren. Für den
Parameter size sind folgende Möglichkeiten vorgesehen:

size Bedeutung
n Es werden n Elemente in den Spaltenvektor A übertragen.
inf Es werden alle Elemente der Datei in den Spaltenvektor A über-
tragen.
[n,m] Die Daten werden in die [n x m] - Matrix A übertragen.

Der Parameter precison muss ein Zeichenkettenausdruck sein, der folgende Werte
annehmen kann:

Wert von Bedeutung


precision
'schar' Ganzzahliger Wert eines Zeichens, mit Vorzeichen.
'uchar' Ganzzahliger Wert eines Zeichens, ohne Vorzeichen.
'int8' Ganze Zahl, 8 Bit-Wertebereich.
'int16' Ganze Zahl, 16 Bit-Wertebereich.
'int32' Ganze Zahl, 32 Bit-Wertebereich.
'int64' Ganze Zahl, 64 Bit-Wertebereich.
'uint8' Ganze Zahl, vorzeichenlos, 8 Bit-Wertebereich.
'uint16' Ganze Zahl, vorzeichenlos, 16 Bit-Wertebereich.
'uint32' Ganze Zahl, vorzeichenlos, 32 Bit-Wertebereich.
'uint64' Ganze Zahl, vorzeichenlos, 64 Bit-Wertebereich.
'float32' Reelle Zahl, 32 Bit-Darstellung.
'float64' Reelle Zahl, 64 Bit-Darstellung.
'double' Reelle Zahl, 64 Bit-Darstellung.

‚ [A,count] = fread(fid,size,precision)
Alle Parameter haben die gleiche Bedeutung wie beim vorangegangenen Aufruf. Im
Parameter count wird zusätzlich die Anzahl der übertragenen Datenelemente bereit-
gestellt.

‘ Schreiben einer binären Datei


Mit der Funktion fwrite kann eine binäre Datei auf einen Datenträger geschrieben werden.
Elementare Konstrukte 2 - 37

Die Funktion wird wie folgt aufgerufen:

‚ fwrite(fid,A,precision)
Die Parameter besitzen die bereits eingeführten Bedeutungen; mit A ist das zu über-
tragende Datenfeld bezeichnet.
‚ count = fwrite(fid,A,precision)
Unter count steht die Anzahl der erfolgreich geschriebenen Datenelemente nach der
Abarbeitung der Funktion bereit.

‘ Schließen einer binären Datei


Mit der Funktion fclose lassen sich binäre Dateien abschließen. Die folgenden Formen des
Aufrufs sind von Bedeutung:

‚ status = fclose(fid)
Die Datei mit dem File-Identifikator fid wird geschlossen. Unter status wird der
Zustand nach Abschluss der Datei bereitgestellt. Bei erfolgreichem Abschluss wird der
Wert 0 zurückgegeben; im Falle eines Fehlers der Wert -1.
‚ status = fclose('all')
Alle offenen Dateien werden geschlossen.

‘ End of File
Mit der folgenden Funktion kann getestet werden, ob der Lesezugriff das Ende einer Datei
erreicht hat:

eofstat = feof(fid)
Beim Zugriff auf die Datei mit dem File-Identifikator fid wird getestet, ob bereits das
Ende der Datei erreicht wurde. Die Funktion liefert den Wert 1 (wahr), wenn das Ende
erreicht wurde, sonst den Wert 0 (falsch).

< Beispiel

Im folgenden Beispiel werden zunächst drei Matrizen berechnet und gespeichert. Die Längen der
Zeilen und Spalten stehen als ganze Zahlen am Anfang der Datei.

% Schreiben einer binären Datei


[X,Y]=meshgrid(-8:0.2:8);
R=sqrt(X.^2+Y.^2);
Z=sin(R).*exp(-0.1*R);
[n,m]=size(Z);
fid=fopen('g:\test.dat','w');
fwrite(fid,n,'int16');
fwrite(fid,m,'int16');
count=fwrite(fid,X,'double');
count=fwrite(fid,Y,'double');
count=fwrite(fid,Z,'double');
status=fclose(fid);
2 - 38 Elementare Konstrukte

Die Datei kann in einem anderen Zusammenhang wieder gelesen werden; die Daten werden nun
genutzt, um einen 3D-Grafen zu erzeugen.

% Lesen einer binären Datei


fid=fopen('g:\test.dat','r');
k=fread(fid,1,'int16');
l=fread(fid,1,'int16');
A=fread(fid,[k,l],'double');
B=fread(fid,[k,l],'double');
C=fread(fid,[k,l],'double');
surf(A,B,C);
status=fclose(fid);

2.5.2 Lesen und Schreiben von formatierten Text-Dateien

Durch die im folgenden zu behandelnden Funktionen werden die Daten als Zeichenketten auf
dem Datenträger dargestellt. Das hat zur Folge, dass die Daten beim Lesen und beim Schreiben
konvertiert werden müssen. Die Vorschriften beim Schreiben werden über einen Format-String
kodiert. Beim Lesen wird die formatierte Textdatei nach bestimmten Regeln interpretiert, so dass
die Datenfelder zunächst extrahiert werden und anschließend die Inhalte nach feststehenden
Regeln zu konvertieren sind. Die Textdatei kann auch zeilenweise als ASCII-Text gelesen
werden; dabei werden die Zeilen als Zeichenketten ohne irgendwelche Konvertierungen über-
tragen.

‘ Öffnen / Schließen von Textdateien


Hierfür werden die bereits im Abschnitt 2.5.1 eingeführten Funktionen fopen und fclose
verwendet. Der Parameter fid bezeichnet auch im folgenden den File-Identifikator.

‘ Zeilenweises Lesen einer Textdatei


Für das zeilenweise Lesen einer Textdatei stehen zwei Funktionen zur Verfügung, die wie folgt
aufgerufen werden können:

‚ tline = fgetl(fid)
In tline steht nach dem Aufruf die aktuelle Textzeile der zu lesenden Datei. Mit dem
Öffnen wird der Zugriffszeiger auf den Anfang der ersten Zeile gesetzt. tline enthält
nicht das Endezeichen der Zeile (das Zeichen NewLine).
Wird das Ende der Datei ( End of File ) erreicht, enthält tline den Wert -1. Der
Anwender kann mit Hilfe der folgenden Funktion testen, ob tline eine Zeichenkette
oder ein numerischer Wert ist:
ischar(tline)liefert den Wert 1, wenn tline eine Zeichenkette ist, sonst den
Wert 0.
‚ tline = fgets(fid)
Die Funktion unterscheidet sich von fgetl lediglich dadurch, dass tline das Zeichen
NewLine enthält.
‚ tline = fgets(fid,nchar)
Es werden höchstens nchar Zeichen gelesen. Die NewLine- und die EndofFile-Marke
werden nicht überschritten
Elementare Konstrukte 2 - 39

‘ Formatiertes Lesen von Daten aus einer Textdatei


Die Funktion fscanf erlaubt das Lesen von Daten aus einer Textdatei gemäß vorgegebener
Formatierungsangaben. Dabei werden durch einen Format-String Datenfelder definiert. Als
Trennzeichen zwischen den numerischen Datenfeldern in der Datei ist das Leerzeichen vor-
gesehen. Die Funktion kann wie folgt aufgerufen werden:

‚ A = fscanf(fid,format)
In die Variable A werden die konvertierten Daten übertragen. Diese werden vorher
gemäß der in der Zeichenkette format enthaltenen Formatvorschrift konvertiert. Die
Formatvorschrift besteht aus einer Liste von Formatfeldern. Wird das Ende dieser Liste
erreicht und es sind noch zu übertragende Daten vorhanden, so wird mit der ersten
Vorschrift der Liste erneut begonnen. Die Formatierungsvorschrift wird also gegeben-
falls zyklisch durchlaufen. Die Variable A wird als Spaltenvektor interpretiert. Die
Formatvorschrift folgt der Syntax:

formatvorschrift 6 ‘ formatfeld ...‘


formatfeld 6 % feldlänge.genauigkeit konvertierungs_zeichen

Als Konvertierungszeichen in den Formatfeldern sind vorgesehen:

Konvertierungszeichen Bedeutung / Inhalt des Datenfeldes


c Folge von Zeichen gemäß Feldlänge.
d Ganze Dezimalzahl.
e , f , g Dezimalzahl in Gleitpunktdarstellung
i Vorzeichenbehaftete ganze Zahl.
o Vorzeichenbehaftete Oktalzahl.
s Ein Folge von Leerzeichen.
u Vorzeichenbehaftete ganze Dezimalzahl
x Vorzeichenbehaftete ganze Hexadezimal-Zahl.

‚ [A,count] = fscanf(fid,format,size)
Im Parameter count wird die Anzahl der übertragenen Datenfelder bereitgestellt. Im
Parameter size kann die Anzahl der zu übertragenden Daten festgelegt werden. Dafür
gelten folgende Regeln:

size Bedeutung
n Es werden n Elemente konvertiert und in den Spaltenvektor A
übertragen.
2 - 40 Elementare Konstrukte

inf Es werden alle Elemente der Datei konvertiert und in den Spalten-
vektor A übertragen.
[n,m] Die Daten werden konvertiert und in die [n x m] - Matrix A über-
tragen. Die Matrix wird spaltenweise gefüllt.

‘ Formatiertes Schreiben in eine Textdatei


Mit der Funktion fprintf können Daten in Textketten konvertiert und in eine Datei ge-
schrieben werden. Die Konvertierungsvorschriften sind wiederum in einer Zeichenkette (dem
Format-String) enthalten. Die Funktion kann wie folgt aufgerufen werden:

count = fprintf(fid,format,A,...)
Die Werte der in A enthaltenen Elemente werden als konvertierte Textketten in die
Datei fid übertragen. Die Formatvorschrift, die die Darstellung der Daten in der Text-
datei regelt, besteht wiederum aus einer Liste von Formatfeldern. Wird das Ende dieser
Liste erreicht und es sind noch zu übertragende Daten vorhanden, so wird mit der ersten
Vorschrift der Liste erneut begonnen. Die Formatierungsvorschrift wird also gegebenen-
falls zyklisch durchlaufen. Ist die auszugebende Datenstruktur eine Matrix, so wird diese
spaltenweise abgearbeitet. Die Formatvorschrift folgt der Syntax:

formatvorschrift 6 ‘ formatfeld | steuerzeichen | zeichenfolge...‘


formatfeld 6 % flag feldlänge.genauigkeit konvertierungs_zeichen |
steuerzeichen 6 \ zeichen

Wird in der Zeichenkette, die die Formatvorschrift darstellt, das Zeichen % gefunden, so
werden die folgenden Zeichen als Formatfeld interpretiert. Zeichenfolgen, die keine
Formatfelder sind, werden als Zeichenketten in den Ausgabebereich übertragen. Soll das
Zeichen % in einer solchen Zeichenkette dargestellt werden, so muss %% geschrieben
werden. Wird in der Formatvorschrift das Zeichen \ gefunden, so wird das Folgezeichen
als Steuerzeichen interpretiert. Soll \ als Zeichen ausgegeben werden, so ist \\ zu schrei-
ben.
Für das optionale Flag in einem Formatfeld sind folgende Möglichkeiten vorgesehen:

Flag Bedeutung
+ Es wird in jedem Falle das Vorzeichen dargestellt ( + oder - ).
- Die auszugebende Zeichenkette wird linksbündig im Konver-
tierungsfeld angeordnet.
0 Führende Leerzeichen werden durch Nullen ersetzt.

Der Feldlängen-Parameter gibt die Anzahl der darzustellenden Zeichen im Konvertie-


rungsfeld an. Der Genauigkeits-Parameter gibt an, wie viele Ziffern dem Dezimalpunkt
folgen sollen. Für die Konvertierungszeichen sind die in der folgenden Tabelle angege-
benen Möglichkeiten vorgesehen:
Elementare Konstrukte 2 - 41

Konvertie- Bedeutung / Darstellung der Daten im Ausgabefeld


rungszeichen
c Zeichen
d Ganzzahlige Dezimaldarstellung (mit Vorzeichen)
e Dezimaldarstellung mit Exponenten (e als Exp.-Zeichen)
E Dezimaldarstellung mit Exponenten (E als Exp.-Zeichen)
f Festkommadarstellung [ ganzer Teil . Dezimalteil ]
g Kompakte f- bzw. e-Darstellung; keine führenden Nullen.
G Wie bei g, aber E für den Exponenten.
o Oktaldarstellung (ohne Vorzeichen)
s Zeichenkette
u Ganzzahlige Dezimaldarstellung (ohne Vorzeichen)
x Hexadezimaldarstellung (a-f)
X Hexadezimaldarstellung (A-F)

Die folgenden Zeichen, wenn sie \ folgen, dienen zur Steuerung der Darstellung des
Textes auf dem Speichermedium.

Steuerzei- Bedeutung
chen
b Leerzeichen
f Positionieren des Ausgabezeigers auf die nächste Zeile bei
Beibehaltung der Spaltenposition.
n Positionieren des Ausgabezeigers auf den Anfang der nächs-
ten Zeile (NewLine)
r Positionieren des Ausgabezeigers auf den Anfang der aktuel-
len Zeile.
t Tabulatorsprung.
“ Ein Hochkomma wird ausgegeben.

< Beispiel

Im folgenden Beispiel werden mehrere Polynom-Näherungen einer Funktion bestimmt. Der


Argumentvektor, der zugehörige Vektor der Funktionswerte der anzunähernden Funktion sowie
2 - 42 Elementare Konstrukte

die Vektoren mit den Näherungswerten werden in einer Matrix gespeichert; diese wird an-
schließend in eine Datei abgelegt. An den Anfang der Datei werden die Anzahlen der Zeilen und
Spalten geschrieben.

% Berechnung der anzunähernden Funktion


x=0:0.5:40;
y=x.*exp(-0.1*x);
% Polynomnäherung (3./4./5. Grades) bestimmen
p3=polyfit(x,y,3);
p4=polyfit(x,y,4);
p5=polyfit(x,y,5);
% Anlegen der Datenstruktur in der Matrix A
A=[x;y;polyval(p3,x);polyval(p4,x);polyval(p5,x)];
% Öffnen der Datei
fid=fopen('g:\poly.dat','w');
fprintf(fid,'%5d %5d\n',size(A));
% Speichern der Matrix A (spaltenweise)
fprintf(fid,'%10.3f %10.3f %10.3f %10.3f %10.3f\n',A);
fclose(fid);

Die Datei erscheint als Text (auszugsweise) in folgender Gestalt:

5 81
0.000 0.000 0.739 0.196 0.040
0.500 0.476 0.998 0.591 0.493
1.000 0.905 1.242 0.956 0.906
1.500 1.291 1.473 1.292 1.281
2.000 1.637 1.690 1.601 1.621
2.500 1.947 1.893 1.884 1.927
3.000 2.222 2.084 2.141 2.201
3.500 2.466 2.261 2.375 2.446
4.000 2.681 2.426 2.586 2.663
.............

Die Datei poly.dat könnte in einem anderen Zusammenhang wie folgt gelesen werden:

fid=fopen('g:\poly.dat','r');
m=fscanf(fid,'%d',1);
n=fscanf(fid,'%d',1);
B=fscanf(fid,'%f',[m,n]);
fclose(fid);

2.5.3 Lesen und Schreiben der Standard-Input/Output-Dateien

Die Standard-Input-Datei ist die Tastatur und die Standard-Output-Datei ist der Bildschirm. Die
Standard-Output-Datei hat die fid = 1 und die Standard-Fehler-Datei hat die fid = 2; letztere wird
physisch auch auf dem Bildschirm realisiert. Die folgenden Funktionen sind für den reinen
Kommandobetrieb eigentlich überflüssig; für MATLAB-Skripts bzw. MATLAB-Funktionen
sind sie dagegen durchaus von Bedeutung.
Elementare Konstrukte 2 - 43

‘ Dateneingabe (mit Echo) über die Tastatur


Die Funktion input ermöglicht die Dateneingabe über die Tastatur, wobei die Eingabe
zunächst in einen Puffer erfolgt, dessen Inhalt am Bildschirm angezeigt wird (Echo) und der bis
zum Abschluss der Eingabe über das ENTER-Kommando editiert werden kann. Die folgenden
Formen des Aufrufs sind möglich:

‚ a = input('prompt')
Nach dem Kommando wird eine Dateneingabe über die Tastatur erwartet. Die Zeichen-
kette 'prompt' wird vorher ausgegeben. In dieser Form kann nur ein Wert eingegeben
werden, dessen Typ aus der Darstellung der Eingabe-Zeichenkette abgeleitet wird. Wird
eine numerische Konstante angegeben, so wird diese entsprechend konvertiert und a
enthält den Wert der Konstanten; wird die Eingabe als Zeichenkette ( also in Hoch-
komma eingeschlossene Zeichenfolge) kodiert, so enthält die Variable a diese Zeichen-
kette.
‚ a = input('prompt','s')
Auch nach diesem Kommando wird eine Dateneingabe über die Tastatur erwartet. Die
Zeichenkette 'prompt' wird vorher ausgegeben. Die Variable a enthält aber anschie-
ßend den Inhalt des Eingabebereichs als Zeichenkette.

< Beispiele

>> a=input('Eingabe:');
Eingabe:2e7
>> a
a =
20000000
>> a=input('Eingabe:');
Eingabe: 'a=2e7'
>> a
a =
a=2e7

% Eingabedatum wird im folgenden Kommando als


% Zeichenkette interpretiert.
>> a=input('Eingabe:','s');
Eingabe:b=[ 1.2 3.4 5.6]
a =
b=[ 1.2 3.4 5.6]
% Interpretation der Eingabezeichenkette
>> eval(a)
b =
1.2000 3.4000 5.6000

‘ Unformatierte Datenausgabe auf den Bildschirm


Für die Ausgabe von Daten, die keinen Formatierungsprozessen vor der Ausgabe unterworfen
werden sollen, gibt es die Funktion disp. Diese kann wie folgt aufgerufen werden.

disp(X)
Der Inhalt von X (kann ein skalar Ausdruck , ein Vektorausdruck, ein Matrixausdruck
2 - 44 Elementare Konstrukte

oder ein Zeichenkettenausdruck sein) wird in einem Standardformat auf dem Bildschirm
dargestellt.

‘ Formatierte Datenausgabe auf den Bildschirm


Für die formatierte Datenausgabe auf den Bildschirm kann auch die Funktion fprintf (s.
Abschnitt 2.5.2) genutzt werden. Der Aufruf für die Standard-Output-Datei kann die folgenden
Formen annehmen:

count = fprintf(format,A,...)
count = fprintf(1,format,A,...)

Die Bedeutungen der Parameter sowie die Syntax der Formatierung sind aus 2.5.2 zu übertragen.

2.5.4 Interne Datenkonvertierung

Numerische Daten und Zeichenketten können auch intern konvertiert werden. Das Ergebnis liegt
anschließend im Arbeitsspeicher als Zeichenkette oder als Zeichenkettenfeld vor. Umgekehrt
kann ein Zeichenkettenfeld in ein Feld numerischer Daten konvertiert werden.

‘ Konvertierung aus einer Zeichenkette in die interne Darstellung


Die Funktion sscanf ermöglicht die Umwandlung von Daten, die im Arbeitsspeicher in der
Zeichenkettendarstellung abgelegt wurden, in die interne Darstellung. Folgende Formen des
Aufrufs sind von Bedeutung:

A = sscanf(s,format)
A = sscanf(s,format,size)

Der Parameter s kennzeichnet einen Zeichenkettenausdruck. Die Bedeutung der anderen Para-
meter kann aus der Beschreibung der Funktion fscanf im Abschnitt 2.5.2 übernommen
werden.

‘ Konvertierung aus der internen Darstellung in eine Zeichenkette


Die Funktion sprintf ermöglicht die Umwandlung von Daten aus der internen Darstellung
in eine Zeichenkette, die als Speicherbereich im Arbeitsspeicher liegt. Folgende Form des
Aufrufs ist von Bedeutung:

s = sprintf(format,A,...)

Die Variable s ist eine Zeichenkettenvariable. Die Bedeutung der anderen Parameter kann aus
der Beschreibung der Funktion fprintf im Abschnitt 2.5.2 übernommen werden.

< Beispiel

>> a=input('Eingabe von x: ','s')


Eingabe von x: 1.23 45.6 81.9 237.12
a =
1.23 45.6 81.9 237.12
>> x=sscanf(a,'%f')
Elementare Konstrukte 2 - 45

x =
1.2300
45.6000
81.9000
237.1200

2.5.5 Editieren der Workspace-Daten

Die im Arbeitsbereich des Systems


(Workspace) abgelegten Daten kön-
nen auch mit einem interaktiven
Werkzeug eingesehen und editiert
werden. Neben den Namen der Va-
riablen findet man auch die Anzahl
der Elemente sowie die Größe den
von ihnen belegten Speichers. Der
Typ der Variablen ist ebenfalls ange-
geben. Aus dieser Liste kann man
nun die einzusehenden bzw. zu edi-
tierenden Variablen auswählen; das
ist mit Doppelklick möglich. An-
schließend erscheint der Variablen-
Editor, der die einzelnen Feld-
elemente bereitstellt und diese auch
zu editieren gestattet.

Im folgenden Bild ist der Inhalt des Vektors T zu sehen:


Programmentwicklung 3-1

3. Programmentwicklung mit MATLAB


3.1 MATLAB als Programmierumgebung

In den vorangegangenen Abschnitten wurde MATLAB als interaktiv zu nutzendes System für
wissenschaftlich-technische Berechnungen behandelt, das über eine relativ einfache Komman-
dosprache zu bedienen war. Diese Form ist nur für einfache Berechnungsabläufe effizient.
Schon das wiederholte Ausführen der Kommandos über den Kommandopuffer zeigt sehr
schnell die Grenzen dieser Arbeitsweise. Das System stellt darum eine Programmierumgebung
bereit, die es ermöglicht, MATLAB-Programme interaktiv entwickeln und testen zu können.
MATLAB-Programme als „vorprogrammierte“ Kommandofolgen können in unterschiedlichen
Formen entwickelt werden. Dem Programmierer stehen drei Formen zur Auswahl bereit; welche
er wählt, hängt von der Zielstellung seiner Entwicklungsaufgabe ab. Im folgenden werden diese
drei Formen kurz charakterisiert.

‘ MATLAB-Skript
Es erscheint zweckmäßig, bei größeren und vor allem bei wiederholt abzuarbeitenden Kom-
mandofolgen, diese in Dateien abzulegen und bei Bedarf zur Abarbeitung zu bringen. Derartige
Kommandofolgen werden als Skripts bezeichnet. Ein Skript kann alle Elemente der MATLAB-
Programmiersprache enthalten. Von der MATLAB-Funktion unterscheidet sich das Skript
dadurch, dass es keinen Parameterteil besitzt. Das hat zur Folge, dass evt. notwendige Ver-
änderungen von Parametern nur durch Editieren des Skripttextes vorgenommen werden können.

‘ MATLAB-Funktionen
MATLAB-Funktionen erweitern das Skriptkonzept durch die Einführung eines Abschnittes zur
Definition formaler Parameter. Diese Definition wird dabei für Input- und Output-Parameter
getrennt vorgenommen. Die formalen Parameter werden beim Aufruf durch die Werte der
aktuellen Parameter ersetzt. Damit besitzen Funktionen gegenüber Skripts eine wesentlich
größere Flexibilität. Funktionen können sowohl durch andere Funktionen als auch auf der
Kommandoebene aufgerufen werden. Die MATLAB-Toolboxes werden als Funktionsbibli-
otheken bereitgestellt.

‘ MATLAB-Programme mit grafischer Anwenderoberfläche


Skripts und Funktionen erfordern für ihre Entwicklung lediglich einen Quelltexteditor. Der
Programmierer sieht das Erscheinungsbild des entwickelten Programms erst nach dem Pro-
grammstart. Die Benutzeroberfläche ist alphanumerisch orientiert, d.h. interaktive grafische
Elemente (Menüs, Toolbars usw.) fehlen.
MATLAB stellt aber auch ein Entwicklungswerkzeug bereit, das die Entwicklung von Program-
men mit einer grafischen Anwenderschnittstelle ermöglicht. Dabei werden die Prinzipien der
interaktiven, ereignisorientierten Programmierung unterstützt (im Ansatz vergleichbar mit der
Programmentwicklung mit Delphi bzw. vergleichbaren Entwicklungssystemen). Das Entwick-
lungswerkzeug (es ist unter dem Funktionsnamen guide aufzurufen) stellt in einer Art
Komponentenbibliothek die grafischen Elemente der Anwenderoberfläche bereit. Der Program-
mierer wählt die jeweiligen Elemente aus und positioniert sie im Entwurfsbereich. Durch einen
Eigenschaftsinspektor kann das Erscheinungsbild eines jeden Elements modifiziert werden.
Damit wird die entworfene Anwenderoberfläche bereits zur Entwicklungszeit sichtbar. Zu den
Komponenten gibt es definierte Ereignisse, die zur Laufzeit die vom Programmierer definierten
Ereignisbehandlungsroutinen (in MATLAB als „Callback functions“ bezeichnet) aktivieren.
3-2 Programmentwicklung

Alle Formen von MATLAB-Programmen können als Ausdrucksmittel für die algorithmischen
Strukturen die im Abschnitt 2. eingeführten Konstrukte nutzen. Daneben gibt es weitere An-
weisungstypen (die prinzipiell auch im Kommandobetrieb genutzt werden können), die die
Steuerung der Programmabläufe unterstützen und die im folgenden Abschnitt behandelt werden.

3.2 Anweisungen zur Programmsteuerung


3.2.1 Die Alternativanweisung

Die Alternativanweisung steuert die Programmverzweigung in Abhängigkeit vom Wert eines


logischen Ausdrucks. Es gilt folgende Syntax:

alternativ_anweisung 6 if logischer_ausdruck
anweisung ...
elseif logischer ausdruck
anweisung ...
...
else
anweisung ...
end

Die folgende Semantik ist zu berücksichtigen:


S Der nach dem Schlüsselwort if folgende logische Ausdruck wird ausgewertet. Liefert
der den Wert 1 (für wahr), so werden die nachfolgenden Anweisungen ausgeführt.
S Hat der logische Ausdruck den Wert 0 (für falsch), so sind, wie die Syntaxformel
ausweist, mehrere Fälle möglich:
• Wenn der Anweisungsblock mit dem Schlüsselwort end abgeschlossen wird, so
wird er übersprungen; die Programmabarbeitung wird nach end fortgesetzt
• Enthält der Anweisungsblock einen else - Abschnitt, so werden die dem
Schlüsselwort else folgenden Anweisungen ausgeführt.
• Enthält der Anweisungsblock eine oder mehrere elseif-Klauseln, so werden
die zugehörigen logischen Ausdrücke abgearbeitet. Der Anweisungsblock der
der ersten Klausel folgt, die den Wert 1 liefert, wird abgearbeitet. Wird keine
Klausel gefunden, so wird ein evt. vorhandener else - Abschnitt bearbeitet oder
die Alternativanweisung wird verlassen.
S Der else-Abschnitt sowie die elseif-Klauseln sind fakultativ.
S Im Anweisungsblock der Alternativanweisung können weitere Alternativanweisungen
auftreten. Diese müssen aber streng hierarchisch geschachtelt werden!

< Beispiel

%Test auf Singularität vor Inversion


%
F=[0.3 0.9 0.9 0.1; 0.5 0.6 0.1 0.5; 1.3 7.6 1.9 0.7; 1.1 1.2 9.1 6.5];
y=[2.3 4.5 6.9 9.5]';
C=F*F';
if det(C)>0.0001
b=inv(C)*F*y;
Programmentwicklung 3-3

else
disp('Matrix singulär!');
end
b =
-6.6577
3.6241
0.9069
1.1875

3.2.2 Laufanweisung

Die Laufanweisung ermöglicht die wiederholte Ausführung einer oder mehrerer Anweisungen.
Es gilt folgende Syntax:

laufanweisung 6 for laufvariable = vektorausdruck


anweisung ...
end

Die folgende Semantik ist zu berücksichtigen:


S Die Anweisungen im Gültigkeitsbereich werden für alle Werte der Laufanweisung ausge-
führt, die diese annehmen kann, sofern die Laufanweisung nicht durch eine break-An-
weisung vorher abgebrochen wird (s. Abschnitt 3.2.3.).
S Die Laufvariable nimmt alle Werte an, die durch die Komponenten des Vektorausdrucks
(der in der Regel durch eine Bereichsvariable definiert wird) im Kopf der Laufanweisung
gegeben sind. Die Anzahl der Zyklen ergibt sich damit aus der Länge des Vektors.
S Auf die Laufvariable kann im Anweisungsteil zugegriffen werden. Sie behält nach Ab-
schluss der Abarbeitung ihren letzten Wert.
S Im Anweisungsteil einer Laufanweisung können weitere Laufanweisungen auftreten; diese
müssen aber streng hierarchisch geschachtelt werden.

< Beispiel

%Sortieralgorithmus mit Abspeichern der


%ursprünglichen Indizes
x=[1 3 2 5 1 3];
n=length(x);
index=1:n;
for i=1:n
xmax=-1e20;
for j=i:n
if x(j)>=xmax
xmax=x(j);
imax=j;
end
end
x(imax)=x(i);
x(i)=xmax;
ima=index(imax);
3-4 Programmentwicklung

index(imax)=index(i);
index(i)=ima;
end
>> x
x =
5 3 3 2 1 1
» index
index =
4 6 2 3 1 5

3.2.3 Die Abbruchanweisung

Eine Laufanweisung oder eine Schleifeanweisung kann vor Erreichen der eigentlichen Abbruch-
bedingungen verlassen werden. Es wird dies durch die Abbruchanweisung erreicht. Es gilt
folgende Syntax:

abbruchanweisung 6 break

Die folgende Semantik ist zu berücksichtigen:


S Wird die Abbruchanweisung im Gültigkeitsbereich einer Lauf- oder Schleifeanweisung
aufgerufen, so wird der Gültigkeitsbereich verlassen; die Programmabarbeitung wird
unmittelbar nach dem Gültigkeitsbereich fortgesetzt. Bei geschachtelten Gültigkeitsberei-
chen wird nur der innerste Gültigkeitsbereich verlassen.
S Wird die Abbruchanweisung im Gültigkeitsbereich einer Alternativ-, Fallunterscheidungs-
oder Fehlerreaktionsanweisung aufgerufen, so wird die weitere Bearbeitung abgebrochen
und der Gültigkeitsbereich verlassen.
S Wird eine Abbruchanweisung außerhalb der bisher diskutierten Fälle in einem Skript oder
einer Funktion aufgerufen, so führt das zum Abbruch der weiteren Bearbeitung des Skripts
bzw. zum Rücksprung aus der Funktion.

3.2.4 Die Fallunterscheidungs-Anweisung

Die Fallunterscheidungs-Anweisung ermöglicht die gezielte Verzweigung des Programm-


ablaufs, wobei die Verzweigung über den Wert eines skalaren Ausdrucks gesteuert wird. Es gilt
folgende Syntax:

fallunterscheidungs_anweisung 6 switch skalarer_ausdruck | zeichenkettenausdruck


case werteliste
anweisung ...
...
otherwise
anweisung ...
end

werteliste 6 konstante | { konstante , ... }

Die folgende Semantik ist zu berücksichtigen:


Programmentwicklung 3-5

S Der Wert des skalaren Ausdrucks bzw. des Zeichenkettenausdrucks wird bestimmt. An-
schließend wird in den Wertelisten der case -Klauseln gesucht, ob sich der Wert in einer
der Listen findet. Der Anweisungsteil der case--Klausel in deren Werteliste der Wert
gefunden wird, wird abgearbeitet.
S Wird der Wert in keiner Werteliste gefunden, so wird, falls vorhanden, der Anweisungsteil
nach otherwise abgearbeitet; sonst wird die Programmbearbeitung mit der ersten An-
weisung nach end fortgesetzt.
S Die Wertelisten müssen mit dem Typ des Ausdrucks nach switch kompatibel sein.
S Umfasst die Werteliste nur einen Wert, können die geschweiften Klammern entfallen.
S In den Anweisungsblöcken können weitere Fallunterscheidungs-Anweisungen auftreten;
diese müssen streng hierarchisch geschachtelt werden.

< Beispiel

Im nachfolgenden Programmabschnitt wird eine Messgröße, die primär als elektrischer Span-
nungswert vorliegt, in die indirekt gemessene primäre physikalische Größe umgerechnet. Der
Sensor habe 4 Messbereiche; für jeden gilt eine andere Umrechnungsbeziehung. Im nachfolgen-
den MATLAB-Programmabschnitt wird diese Umrechnung für mehrere Bereiche realisiert.

% Umrechnung einer Messgröße für


% unterschiedliche Messbereiche
switch messbereich
case 1
y=12+2.4*x;
case 2
y=14.5+3.2*x;
case 3
y=16.6+4.5*x;
otherwise
y=21.3+4.9*x;
end

3.2.5 Schleifeanweisung

Durch eine Schleifeanweisung wird eine Anweisungsgruppe so oft wiederholt ausgeführt, bis
eine Abbruchbedingung erfüllt ist. Im Gegensatz zur Laufanweisung liegt damit die Zyklenzahl
zu Beginn der Ausführung noch nicht fest. Es gilt folgende Syntax:

schleifeanweisung 6 while logischer_ausdruck


anweisung ...
end

Die folgende Semantik ist zu berücksichtigen:

S Der logische Ausdruck nach dem Schlüsselwort while definiert die Abbruchbedingung.
Solange dieser Ausdruck den Wert 1 (für wahr) liefert, wird der folgende Anweisungsblock
abgearbeitet; nimmt er den Wert 0 (für falsch) an, wird die Abarbeitung nach end fortge-
setzt.
3-6 Programmentwicklung

S Es handelt sich um eine „abweisende“ Schleifenkonstruktion; hat der logische Ausdruck zu


Beginn bereits den Wert 0, wird die Anweisung als Ganzes übersprungen.
S Der Gültigkeitsbereich kann auch mit einer break - Anweisung (s. Abschnitt 3.2.3)
verlassen werden.
S Treten im Gültigkeitsbereich weitere Schleifeanweisungen auf, so müssen diese streng
hierarchisch geschachtelt werden.

< Beispiel:

Im folgenden Beispiel wird der Reibungsbeiwert für die Rohrströmung nach der Gleichung von
COLEBROOK berechnet. Diese Gleichung hat die Form

Die Gleichung lässt sich nach dem Einsetzverfahren lösen; dazu muss eine Scheinauflösung
gefunden werden, die dem folgenden Programmbeispiel entnommen werden kann. Der Para-
meter r ist die relative Wandrauhigkeit und Re bezeichnet die REYNOLDS-Zahl

% Lösung der Colebrook-Gleichung


% für den Reibungsfaktor der Rohrströmung
Re=1e5;
r=1e-4;
x=0.1;
eps=0.005;
diff=1e3;
while diff > eps
xneu= 1/(0.86*log(r/3.7+2.51/Re/sqrt(x)))^2;
diff=abs((x-xneu)/x);
x=xneu;
end
x =
0.0189

3.2.6 Fehlerreaktions-Anweisung

Diese Anweisung erlaubt es dem Programmierer, beim Auftreten von Fehlern, die durch das
System bei der Programmabarbeitung diagnostiziert werden, in eigener Art und Weise zu
reagieren (die Fehler durch eigene Maßnahmen „abzufangen“). Es gilt folgende Syntax:

fehlerreaktions_anweisung 6 try
anweisung ...
catch
anweisung ...
end

Die folgende Semantik ist zu berücksichtigen:


Programmentwicklung 3-7

S Die zwischen den Schlüsselwörtern try und catch stehenden Anweisungen werden
ausgeführt. Tritt ein Fehler auf, so wird der Anweisungsblock nach dem Schlüsselwort
catch ausgeführt.
S Die Fehlerursache kann durch Aufruf der Funktion lasterr ermittelt werden. Diese
Funktion liefert die letzte MATLAB-Fehlermitteilung.
S Tritt zwischen catch und end ein Fehler auf, so wird die Programmabarbeitung abgebro-
chen, es sein denn, der Abschnitt ist selbst als Fehlerreaktions-Anweisung ausgeführt.

< Beispiel

>> A=[1 2 3; 2 4 6; 1 3 7];


>> B=[1 2; 3 4];
>> try
A*B;
catch
disp('Error!!!');
disp(lasterr);
end;
Error!!!
Error using ==> *
Inner matrix dimensions must agree.

3.3 Skriptprogrammierung

Ein Skript ist eine MATLAB-Kommandofolge, die in einer Textdatei (einem M-File) abgelegt
wird. Diese Kommandofolge wird in der abgelegten Form abgearbeitet; eine Parametervermitt-
lung ist nicht möglich.
Für die Erzeugung eines Skripts kann prinzipiell ein beliebiger Texteditor verwendet werden. Es
empfiehlt sich aber, den von MATLAB bereitgestellten Editor zu verwenden, da dieses Werk-
zeug eine Reihe nützlicher Funktionen bereitstellt. So hebt es einige Sprachelemente farblich
hervor, analysiert die Klammerstruktur in MATLAB-Ausdrücken, strukturiert den Programm-
text bei einigen Anweisungen automatisch und hängt beim Speichern standardmäßig die
Dateierweiterung .M an den Dateinamen an. Außerdem kann das Skript aus dem Editor heraus
gestartet werden; die Debugger-Funktionen sind ebenfalls aus dem Editor heraus aktivierbar.
Soll ein neues Skript erstellt werden ist zunächst der Editor zu aktivieren. Dafür gibt es zwei
Möglichkeiten:
• Über die Kommandozeile wird das Kommando
>> edit
eingegeben. Ein leeres Editorfenster wird anschließend geöffnet.
• Über den Menüpunkt File des Desktop-Menüs wird der Menüpunkt New angewählt; im
erscheinenden Untermenü wird der Menüpunkt M-File aktiviert. Anschließend erscheint
ebenfalls das leere Editorfenster.
• Soll eine bereits vorhandene Skriptdatei geöffnet werden, so ist entweder das Kommando
>> edit(‘dateiname‘) oder >> edit dateiname
einzugeben ( dabei ist lediglich der Dateiname anzugeben; die Erweiterung .M ist weg-
zulassen! ), oder der Menüpunkt Open im File-Menü des Desktop ist zu aktivieren.
3-8 Programmentwicklung

Soll die Kommandofolge des Skripts abgearbeitet werden, gibt es zwei Start-Möglichkeiten:
• Der Name ( es ist wiederum nur der Dateiname anzugeben; die Erweiterung .M ist weg-
zulassen! ) der Datei wird über die Kommandozeile eingegeben. Damit wird die Abarbei-
tung des Skripts gestartet.
• Über den Menüpunkt des Editorfenster wird der Unterpunkt Save and Run bzw. Run
aktiviert.

3.4 Die Programmierung von MATLAB-Funktionen


3.4.1 Syntax der MATLAB-Funktion

Im Gegensatz zum Skript ist die MATLAB-Funktion mehr als eine Kommandofolge. Sie
übernimmt beim Aufruf Parameter und liefert beim Verlassen Ergebnisse, die von anderen
Funktionen übernommen und weiterverarbeitet werden können. Somit muss eine Funktion über
einen speziellen Abschnitt verfügen, der die Parametervermittlung beschreibt. Damit ergibt sich
folgende syntaktische Struktur:

funktion 6
function ergebnisparamter_liste = name_der_funktion (eingabeparameter_liste)
kommando ...

ergebnisparameter_liste 6 [variablenname, ...] | variablenname


eingabeparameter_liste 6 variablenname , ...

Zur Semantik sind folgende Regeln zu beachten:


S Eingabeparameter und Ergebnisparameter sind die formalen Parameter der Funktion, die zur
Laufzeit durch die aktuellen Parameter ersetzt werden.
S Die in der Liste der Eingabeparameter angegebenen Variablen werden im Kommandoteil
zur Laufzeit durch die beim Aufruf übergebenen Parameter ersetzt. Für die aktuellen
Parameter sind auch Ausdrücke zugelassen.
S Die in der Liste der Ausgabeparameter aufgeführten Variablennamen werden beim Aufruf
durch die Namen der aktuellen Ausgabeparameter ersetzt. Als aktuelle Ausgabeparameter
sind wiederum nur Variablen zugelassen.
S Tritt nur ein Ausgabeparameter auf, so können die eckigen Klammern für die Parameterliste
entfallen. In diesem Fall kann der Funktionsaufruf auch in Ausdrücken erfolgen; der Rück-
gabewert der Funktion wird unter deren Namen bereitgestellt.
S Der Name der Funktion ermöglicht ihren späteren Aufruf. Dabei sind die im Abschnitt 3.4.2
beschriebenen Regeln zum Gültigkeitsbereich eines Funktionsnamens zu beachten.
S Die den Funktionshauptteil ausmachende Kommandofolge kann weitere Variablen ein-
führen. Auch für diese Variablen sind die Regeln im Abschnitt 3.4.2 zu beachten.
S Die Kommandofolge, die zur Funktion gehört, wird durch das Ende der Datei oder den
Beginn einer neuen Funktion begrenzt. Wird dieses Ende bei der Abarbeitung erreicht,
erfolgt der Rücksprung in das rufende Programm. Soll der Rücksprung aus einer Funktion
in das rufende Programm von einer anderen Stelle aus erfolgen, ist das Rücksprungkom-
mando
return
anzuwenden.
Programmentwicklung 3-9

S Sollen Funktionen als Parameter an eine Funktion übergeben werden, so ist wie folgt zu
verfahren:
• Der Name der Funktion ist als formaler Parameter in der Liste der Eingabeparameter
aufzuführen. Programmtechnisch steht dieser Name für ein Funktions-Handle.
• Lokal kann die Funktion dann im Unterprogramm wie eine externe Funktion aufgerufen
werden.
• Beim Aufruf der Funktion, die eine Funktion als aktuellen Parameter erfordert, ist dieser
aktuelle Parameter als Funktions-Handle der aktuellen Funktion zu übergeben. Dieses
Handle wird durch das dem Funktionsnamen vorangestellt Zeichen @ (Tastenkombina-
tion <Alt Gr > < Q > ) erzeugt.
• Diese Technik der Parameterübergabe von Funktions-Handles wird von einer Reihe der
Systemfunktionen (s. Abschnitt 3.4.3 ) genutzt, die numerische Standardalgorithmen
realisieren und die dabei auf eine anwenderspezifische Funktion Bezug nehmen müssen
(so z. B. die numerische Integration oder die Lösung von Anfangswertproblemen).
S Die Listen der formalen Parameter können leer sein.
S Die Listen der formalen Parameter werden den Listen der aktuellen Parameter beim Aufruf
einer Funktion von links nach rechts zugeordnet. Die Funktion kann beim Aufruf mit
verkürzter Parameterliste aufgerufen werden. Über die Funktionen
nargin
nargout
kann die Anzahl der aktuellen Parameter zur Laufzeit ermittelt werden.

< Beispiele

Der im Abschnitt 3.2.5 bereits beschriebene Algorithmus zur Berechnung des Reibungsbei-
wertes nach der COLEBROOK-Gleichung läßt sich wie folgt durch eine Funktion realisieren:

function x = fkt_colebrook(r,Re)
% Lösung der Colebrook-Gleichung
% für den Reibungsfaktor der Rohrströmung
x=0.1;
eps=0.005;
diff=1e3;
while diff > eps
xneu= 1./(0.86*log(r/3.7+2.51./(Re.*sqrt(x)))).^2;
diff=abs((x-xneu)/x);
x=xneu;
end

Bei der Programmierung wurde davon ausgegangen, dass die übergebenen Parameter auch
Vektoren sein können. Durch folgende Kommandos lässt sich mit Hilfe der Funktion ein
Diagramm erzeugen, dass den Reibungsbeiwert über der Re-Zahl darstellt.

>>Re=1e4:100:2e5;
>>plot(Re,fkt_colebrook(1e-4,Re))
3 - 10 Programmentwicklung

Im folgenden Beispiel wird die Polynom-Approximation einer Funktion realisiert. Dabei wird
der Name der Funktion als formaler Parameter eingeführt. Die angegebene Funktion zur
Approximation kann also für beliebige MATLAB-Funktionen verwendet werden. Der Para-
meter n bestimmt den Grad des approximierenden Polynoms; die Parameter xu, dx, xo de-
finieren den Bereich, den die unabhängige Variable durchläuft.

function p=fit_polynom(fkt,n,xu,dx,xo)
x=xu:dx:xo;
y=feval(fkt,x);
p=polyfit(x,y,n);
plot(x,y,x,polyval(p,x));

Folgender Aufruf der Funktion würde sich für die Approximation der sin-Funktion durch ein
Polynom 5. Grades im Bereich 0 bis 7 ergeben:

>> fit_polynom(@sin,5,0,0.1,7)

Das Ergebnis sind die Polynomkoeffizienten

ans =
-0.0047 0.0748 -0.3276 0.1215 0.9976 -0.0091

und die Grafik (im folgenden weggelassen) für den Vergleich der Originalfunktion mit der
Approximation.

3.4.2 Gültigkeitsbereiche von Namen in Unterprogrammen

Die Namen von Variablen und Funktionen unterliegen bezüglich ihrer Gültigkeitsbereiche
gewissen Regeln:
S Funktionen werden ( genau wie Skripts ) in Textdateien (M-Files) abgelegt. Die Funktion,
deren Namen mit dem des M-File übereinstimmt, kann über die Kommandoebene oder von
anderen Funktionen aufgerufen werden. Sind in einem M-File weitere Funktionen enthalten,
können diese nur von den lokalen Funktionen aufgerufen werden, die in diesem M-File
definiert wurden.
S Funktionen werden beim Aufruf in den durch die Liste der Suchpfade adressierten Verzeich-
nissen gesucht; das M-File, das die Funktion enthält, muss über einen dieser Suchpfade
erreichbar sein. Die Liste der Pfade kann über den Menüpunkt Set Path des File-Menüs im
Desktop eingesehen bzw. ergänzt werden.
S Die formalen Parameter sowie alle lokalen Variablen, die im Kommandoteil der Funktion
eingeführt werden, sind nur innerhalb der Funktion gültig. Die Namen können also auch in
anderen Funktionen verwendet werden; die Bedeutung eines Namens ist an den Gültigkeits-
bereich der jeweiligen Funktion gebunden. Jede Funktion besitzt damit einen eigenen
Workspace.
S Sollen bestimmte Variablen über den Gültigkeitsbereich einer Funktion hinaus erreichbar
sein, müssen sie als global deklariert werden. Diese Deklaration folgt der Syntax:

deklaration_globaler_variablen 6 global variablenname ...


Programmentwicklung 3 - 11

Alle Funktionen, die die globale Deklaration enthalten, können auf die so eingeführten
Variablen zugreifen. Die Deklaration muss vor der ersten Verwendung der Variablen im
Kommandoteil erfolgen.

< Beispiel

Im folgenden Beispiel verwendet eine Funktion zur Umsatzbestimmung die reaktionskineti-


schen Konstanten als globale Parameter; diese können vor Aufruf der Funktion beispielsweise
im Kommandomodus gesetzt werden. Hier zunächst die MATLAB-Funktion:

function u = umsatz(T,tau)
global k0;
global EA;
k= k0*exp(-EA./(T+273));
u= 1-1./(1+tau.*k);

Der Aufruf kann folgende Form haben:

>> global k0
>> global EA
>> k0=650; EA=3800;
>> T=20:5:80;
>> u=umsatz(T,50);
>> plot(T,u)

3.4.3 Systemfunktionen - Ergänzung

MATLAB enthält neben den Werkzeugen zur Programmentwicklung eine umfangreiche


Funktionsbibliothek, die neben den im Abschnitt 2. bereits behandelten elementaren Funktionen
auch eine Reihe „gehobener“ Funktionen für komplexere Aufgabenstellungen umfasst. Diese
Funktionen entsprechen der im vorangegangenen Abschnitt beschriebenen Syntax; sie können
in anwenderspezifische Programme durch Aufruf eingebunden werden. Wenn zum Basissystem
noch spezielle Toolboxes installiert sind, so werden deren Tools auch in Form von Funktions-
bibliotheken bereitgestellt.
Im folgenden sollen einige Funktionen des Basissystems behandelt werden, die im oben genann-
ten Sinne über die Funktionalität einer gewöhnlichen Programmbibliothek hinausgehen, da sie
die numerische Behandlung komplexerer Aufgabenstellungen unterstützen.

3.4.3.1 Lösung linearer Gleichungssysteme

Bei den Lösungsverfahren für lineare Gleichungssysteme ist zwischen den direkten und den
iterativen Lösungsverfahren zu unterscheiden. Iterative Lösungsverfahren sind für schlecht
konditionierte Systeme sowie für Systeme hoher Ordnung mit schwach besetzten Koeffizienten-
matrizen von Bedeutung.
Den Lösungsvektor x des linearen Gleichungssystems A x = B erhält man über das folgende
MATLAB-Kommando:
3 - 12 Programmentwicklung

x = A \ B

Die Lösung des Systems x A = B wird durch das folgende Kommando gewonnen:

x = A / B

Wenn B eine Matrix ist, so werden die Spalten von B als aufeinander folgende rechte Seiten
behandelt; x wird damit zur Matrix der Lösungen, wobei die Spaltenvektoren von x den jeweili-
gen Spalten von B als Lösungsvektoren zugeordnet sind.
A ist im Standardfall eine [n x n] - Matrix. Für die Anwendung des Operators \ ist das aber
keine notwendige Voraussetzung; A kann eine [m x n]-Matrix sein. Damit sind die folgenden
Spezialfälle für die Bestimmung des Lösungsvektors x zu unterscheiden:

• m = n Die exakte Lösung des Gleichungssystems wird bestimmt.


• m > n Es liegt ein „überbestimmtes System“ vor. Es wird die Lösung bestimmt, die das
System im Sinne der Summe der kleinsten Quadrate erfüllt.
• m < n Es liegt ein unterbestimmtes System vor. Es werden höchstens m von Null ver-
schiedene Basislösungen bestimmt.
Der Lösungsalgorithmus unterscheidet diese Fälle automatisch.
Für die iterative Lösung eines linearen Gleichungssystems steht eine Reihe von Verfahren
bereit; die Liste dieser Verfahren sowie die jeweilige detaillierte Beschreibung sind der on-line
Hilfe (Stichwort: simultaneous linear equations) zu entnehmen.

< Beispiel

>> A=[3 5 9; 26 10 5; 2.4 11.8 30.7];


>> B=[1 5 10; 2.4 2.5 23.7];
>> x=A\B'

x =
0.9949 1.6571
-2.7365 -5.4217
1.2998 2.7264
>> A*x
ans =
1.0000 2.4000
5.0000 2.5000
10.0000 23.7000

% Im folgenden wird ein unterbestimmtes System behandelt


>> A=[3 5 9; 26 10 5];
>> B=[1 5 ; 2.4 2.5 ];
>> x=A\B'

x =
0.1826 0.0479
0 0
0.0502 0.2507
Programmentwicklung 3 - 13

>> A*x
ans =
1.0000 2.4000
5.0000 2.5000

3.4.3.2 Numerische Integration

Für die numerische Ermittlung des Wertes Q des bestimmten Integrals


stehen in MATLAB zwei Funktionen zur Verfügung. Die folgenden
Beschreibungen gehen von der nebenstehenden Darstellung des be-
stimmten Integrals aus.
Die Funktionen werden wie folgt aufgerufen:

‚ q = quad(fun,a,b,tol)
Es wird die adaptive SIMPSON -Regel angewandt, wobei der absolute Fehler kleiner als tol
ist. Dieser Parameter kann auch weggelassen werden; es wird dann der Standardwert von
1.0E-6 angenommen. Die Parameter a und b bestimmen die untere bzw. obere Integrations-
grenze. fun bezeichnet einen Funktions-Handle, der auf die Funktion für den Integranden
verweist. Diese Funktion muss gerade einen Eingangsparameter, der die Integrationsvariable
darstellt, besitzen.
‚ q = quadl(fun,a,b,tol)
Der Wert des Integrals wird nach der LOBATTO -Quadraturformel bestimmt; die Parameter
besitzen die gleiche Bedeutung wie bei der vorangegangenen Funktion.

Mit der folgenden Funktion kann der Wert des neben-


stehend dargestellten Doppelintegrals näherungsweise
bestimmt werden:

‚ q = quadl(fun,a,b,tol)
Die Parameter besitzen die gleichen Bedeutungen wie bei den vorangegangenen Funktionen;
der Integrand muss hier aber eine Funktion mit zwei Eingangsparametern für die zwei
Integrationsvariablen sein.

< Beispiel

Das stationäre Temperaturprofil in einem senkrecht an einer beheizten Platte abströmenden


Flüssigkeitsfilm kann in dimensionsloser Schreibweise wie folgt dargestellt werden:
3 - 14 Programmentwicklung

Die folgende Funktion gestattet die Berechnung des bestimmten Integrals für eine Reihe
vorgegebener Werte der oberen Integrationsgrenze î (die à - Funktion ist als Standardfunktion
in MATLAB verfügbar):

function Theta=t_film(xi)
n=length(xi);
for i=1:n
Theta(i)=1-quad(@fkt_film,0,xi(i))/gamma(4/3);
end

Der Integrand wird durch die folgende Funktion gegeben:

function y = fkt_film(x)
y= exp(-x.^3);

Die folgenden MATLAB-Kommandos führen zur grafischen Darstellung der Funktion È(î):

>> x=0:0.1:2;
>> y=t_film(x);
>> plot(x,y)

3.4.3.3 Systeme gewöhnlicher Differentialgleichungen 1. Ordnung - Anfangswertprobleme

Für die Lösung des folgenden Anfangswertproblems


Programmentwicklung 3 - 15

stellt MATLAB eine Reihe von Lösungsprozeduren bereit, die alle nach dem folgenden Muster
aufgerufen werden ( Modifikationen zum Aufruf sind in der on-line-Hilfe zu finden):

‚ [T,Y] = solver(odefun,tspan,y0,options)
Der Funktionsname solver steht für einen der in der folgenden Tabelle angegebenen
Namen:

Name Geeignet für stei- Genauigkeits- Anwendungsempfehlung


fe DGL-Systeme anforderungen
ode45 nein mittel Sollte immer als erstes Verfah-
ren eingesetzt werden.
ode23 nein niedrig Für orientierende Untersu-
chung bei geringen Genauig-
keitsanforderungen
ode113 nein niedrig ... hoch Bei hohem Berechnungsauf-
wand für die rechten Seiten.
ode15s ja niedrig ...mäßig Als Alternative zu ode45,
wenn das System steif ist.
ode23s ja niedrig Bei geringen Anforderungen
und steifen Systemen.
ode23t ja/nein niedrig Bei geringen Anforderungen
und mäßig steifen Systemen.
ode23tb ja niedrig Bei geringen Anforderungen
und steifen Systemen.

Der Parameter odefun ist ein Funktions-Handle, der auf eine Funktion zeigt, die die
rechten Seiten der Differentialgleichungen bereitstellt. Diese Funktion muss als ersten
Eingangsparameter die Zeit und als zweiten den Vektor der Zustandsvariablen besitzen. Als
Ergebnisparameter muss diese Funktion den Vektor der rechten Seiten liefern
f = odefun(t,x)

Der Parameter tspan bezeichnet den Vektor des Intergrationsintervalls:


tspan = [tanf , tende]
Soll die Lösung zu bestimmten Zeitpunkten ermittelt werden, so sind diese in tspan
aufzulisten:
tspan = [tanf ,t1, t2, ... , tende]
Die Zeilen der Lösungsmatrix Y korrespondieren dann zu diesem Zeitraster.

Der Vektor y0 enthält die Anfangswerte.

Über den Parameter options können bestimmte Eigenschaften des Integrationsverfahrens


sowie die Ergebnisdarstellung beeinflusst werden. Um den Parameter auf die gewünschte
3 - 16 Programmentwicklung

Form zu setzen, ist die Funktion odeset aufzurufen. Die beiden Hauptformen des Aufrufs
sind im folgenden gegeben:

‚ options = odeset('name1',wert1,...)
Die Zeichenketten stellen die Namen der Eigenschaften bereit; den Namen schließen sich
die aktuellen Werte an. Die Liste der möglichen Parameter ist umfangreich (s. on-line-Hilfe
zu dieser Funktion). In der folgenden Liste ist eine Auswahl für die wichtigsten Fälle zu
finden:

Name der Ei- Werte Bedeutung


genschaft
RelTol reelle Kon- Relative Genauigkeit. Der Integrator überprüft in
stante jedem Schritt, ob die folgende Bedingung erfüllt ist:

Standardwert: 1E-3
AbsTol reelle Kon- Vektor der absoluten Genauigkeiten; wird ein Ska-
stante lar angegeben, wird dieser Wert für alle x(i) ange-
nommen. Standardwert: 1E-6
OutputFcn Funktions-H. Funktions-Handle auf eine anwenderspezifische
Funktion, die die Darstellung der Lösung über-
nimmt. Die Einzelheiten zur Struktur dieser Funk-
tion sind in der on-line-Hilfe unter dem Stichwort
ODE-Solver Output Properties zu finden.
@odeplot Diese Funktion ist bereits vorhanden; sie ist zu-
gleich die Standardfunktion für die Ergebnisdar-
stellung. Die Zustandsgrößen werden über der Zeit
dargestellt.
@odephas2 Diese Funktion ist bereits vorhanden. Es wird ein
zweidimensionales Phasendiagramm dargestellt.
@odephas3 Diese Funktion ist bereits vorhanden. Es wird ein
dreidimensionales Phasendiagramm dargestellt.
OutputSel Vektor mit Dieser Vektor enthält die Indizes der Zustandsgrö-
ganzzahligen ßen, die für die Ergebnisdarstellung mit der Aus-
Elementen gabefunktion herangezogen werden sollen.
MaxStep reelle Kon- Größte Schrittweite, die der Integrator verwenden
stante darf. Standardwert: das durch tspan gegebene
Intervall.
InitialStep reelle Kon- Der Integrator wird versuchen, mit diesem Intervall
stante zu beginnen; werden die Toleranzgrenzen verletzt,
wird die Schrittweite verringert.
Programmentwicklung 3 - 17

‚ options = odeset(oldopts,'name1',wert1,...)
Ein bereits existierender Satz von Optionen oldopts wird modifiziert.

Der Ergebnisparameter T enthält die Zeitpunkte, zu denen eine Lösung vorliegt und die
Matrix Y stellt spaltenweise die Lösungen für die einzelnen Zustandsgrößen bereit.

< Beispiel

Das folgende nichtlineare DGL-System, das auch als das LOTKA -VOLTERRA -DGL-System
bezeichnet wird, beschreibt das sogenannte Räuber-Beute-Modell. Dieses DGL-System kann
aber auch für die Beschreibung autokatalytischer Reaktionen herangezogen werden. Es handelt
sich um das folgende Anfangswertproblem:

Für die Kodierung der rechten Seite kann die folgende MATLAB-Funktion angegeben werden:

function f = lotka_volterra(t,x)
% Funktion für die rechten Seiten des
% Lotka-Volterra-Systems
f=[5*x(1)-0.1*x(1)*x(2);
-3*x(2)+0.05*x(1)*x(2)];

Mit den folgenden Kommandos wird das System gelöst; die Zeitverläufe werden dargestellt:

>> y0=[10; 1];


>> tspan=[0:0.1:10];
>> [T,Y]=ode45(@lotka_volterra,tspan,y0);
>> plot(T,Y(:,1),T,Y(:,2))
3 - 18 Programmentwicklung

3.4.3.4 Systeme gewöhnlicher Differentialgleichungen - Randwertprobleme

Das folgende System gewöhnlicher Differentialgleichungen 1. Ordnung beschreibt die kano-


nische Form des Zwei-Punkt Randwertproblems

MATLAB stellt für die Lösung dieses Problems die folgende Funktion bereit:

‚ sol = bvp4c(odefun,bcfun,solinit,options)

Der Parameter odefun ist ein Funktions-Handle auf die Funktion, die die rechten Seiten
der Differentialgleichungen kodieren. Diese Funktion muss die folgende Parameterstruktur
besitzen:
dydx = odefun(x,y)
Der Parameter x liefert die unabhängige Variable; der Parameter y liefert den Vektor der
Zustandsgrößen. Der Ergebnisparameter muss die rechten Seiten der Differentialglei-
chungen ergeben.

Der Parameter bcfun ist ein Funktions-Handle auf die Funktion, die die Randbedingungen
kodiert. Diese werden als Gleichungssystem in der oben angegebenen Form vorausgesetzt.
Programmentwicklung 3 - 19

Die Funktion muss die folgende Parameterstruktur besitzen:


res = bcfun(ya,yb)
Die Parameter ya bzw. yb übergeben die Randwerte der Zustandsgrößen; der Ergebnispara-
meter res stellt die Residuen der Randbedingungen (bei Erfüllung der Randbedingungen
müssen diese verschwinden!) bereit.

Der Parameter solinit ist eine Strukturvariable, die über folgende Datenfelder verfügt:
S solinit.x Liefert das Anfangsraster der unabhängigen Variablen. Dabei muss
gelten: solinit.x(1)=a solinit.x(end)=b.
S solinit.y Matrix der Anfangsschätzungen für die Lösungen. Die Spalte
solinit.y(:,i) stellt die Schätzung der Zustandsgrößen am Ras-
terpunkt solinit.x(i)bereit.
Für die Belegung der Struktur solinit kann die Funktion bvpinit genutzt werden.
Diese wird wie folgt aufgerufen:
solinit = bvpinit(x,v)
Dabei ist x wiederum der Vektor der Stützstellen. Der Vektor v hat für jede Zustandsgröße
eine Komponente, die als Anfangsschätzung auf alle Stützstellen übertragen wird. Das
Unterprogramm belegt somit die Struktur mit konstanten Anfangswerten in der Form, wie
das von der Funktion bvp4c gefordert wird.

Der Parameter options spezifiziert, sofern er angegeben wird, die Eigenschaften des
Lösungsalgorithmus (relative/absolute Genauigkeiten usw.). Die hierfür bestehenden
Möglichkeiten sind der on-line-Hilfe zu entnehmen. Um den Parameter richtig zu belegen,
gibt es die Hilfsfunktion bvpset.

Der Ergebnisparameter sol ist eine Strukturvariable, die über folgende Datenfelder verfügt:
S sol.x Enthält als Vektor die Stützstellen der Lösung. Diese Stützstellen sind die,
die der Lösungsalgorithmus festgelegt hat.
S sol.y Diese Matrix stellt zeilenweise die Lösungsverläufe für die Zustandsgrößen
an den in x mitgeteilten Stützstellen dar.
S sol.yp Diese Matrix stellt die Werte der ersten Ableitungen der Zustandsgrößen an
den Stützstellen dar.

Hinweis: Die Namen der Strukturvariablen können vom Anwender frei gewählt werden;
die Namen der Datenfelder sind jedoch so wie oben angegeben zu wählen.

< Beispiel (Details zum Problem sind in [4] zu finden)

Das Geschwindigkeitsprofil für die Rohrströmung eines nicht-newtonschen Mediums ist zu


bestimmen. Das rheologische Verhalten des Mediums kann nach dem Ansatz von CARREAU
beschrieben werden:
3 - 20 Programmentwicklung

In dimensionsloser Schreibweise folgt aus der Impulsbilanz das folgende Randwertproblem 2.


Ordnung für die Geschwindigkeit:

Dabei gelten folgende Definitionen:

Durch Einführung neuer Zustandsgrößen kann diese DGL 2. Ordnung in ein System von zwei
DGL 1. Ordnung umgeformt werden:

Damit nimmt das DGL-System einschließlich der umgeformten Randbedingungen die neben-
stehende Gestalt an

Die MATLAB-Funktionen für die Lösung des Problems haben die folgende Form:

function dydx=bp_odefun(x,y)
% Rechte Seiten der DGL's
delta_p_L=20000; mu0=102; t1=4.36; n=0.375; R=0.1;
vst=delta_p_L*R*R/mu0;lambda=t1*vst/R;
dydx=[ -(y(1)/(x+0.00001)+(1+lambda*lambda*y(1)*y(1))^(0.5*(1-n))...
/(1-((1-n)*lambda*lambda*y(1))...
/(1+lambda*lambda*y(1)*y(1))));
y(1)];
Programmentwicklung 3 - 21
function res=bp_bcfun(ya,yb)
% Diese Funktion kodiert die Randbedingungen
res=[ya(1);yb(2)];

Der Aufruf der Funktion für die Lösung des Problems und die grafische Darstellung der Lösung
umfasst dann nur noch folgende Kommandos:

>> sol=bvp4c(@bp_odefun,@bp_bcfun,bvpinit(0:0.05:1,[0;0]));
>> plot(sol.x,sol.y(2,:))

3.4.3.5 Integration partieller Differentialgleichungen

MATLAB stellt im Basispaket eine Funktion zur Lösung des folgenden Anfangs-Randwert-
Problems zur Verfügung:

Dabei handelt es sich um ein System partieller Differentialgleichungen (PDGL), wobei die
gesuchten Funktionen, die die Elemente des Vektors u sind, von der Zeit t und von einer
Ortskoordinate x abhängen können. Es gelten folgende Festlegungen:

• definieren die Integrationsbereiche.


• Für den Parameter m gilt folgende Zuordnung
m = 0 eindimensionaler Fall
m = 1 zylindersymmetrischer Falle
m = 2 kugelsymmetrischer Fall
3 - 22 Programmentwicklung

• f ist der Vektor der Fluss-Terme und s der Vektor der Quellterme. C ist eine Diagonalma-
trix, deren Diagonalelemente entweder identisch Null sind (die entsprechende PDGL ist
elliptisch) oder von Null verschieden (die entsprechende PDGL ist parabolisch).
• Die Anfangsbedingungen müssen durch folgende Funktionen gegeben sein:

• Die Randbedingungen müssen an den Stellen x = a und x = b für alle t die Randbedingungen
befriedigen, die in der folgenden Form gegeben sind:

Q ist eine Diagonalmatrix; die Diagonalelemente können auch verschwinden. Es ist zu


beachten, dass diese Formulierung der Randbedingungen von den Flussfunktionen und nicht
von den Gradienten der Zustandsgrößen ausgeht.

Der folgende Funktionsaufruf bestimmt die Lösung eines Systems von PDGL‘s

sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)

• Der Parameter m bestimmt die Ordnung der Symmetrie (s. o.). Es gilt 0 #m #2.

• Der Parameter pdefun ist ein Funktions-Handle auf die Funktion, die die Komponen-
ten der Funktionen-Vektoren bereitstellt, die die konkrete Form des PDGL-Systems
ausmachen. Die Funktion muss die folgende Parameterstruktur besitzen:

[ c , f , s ] = pdefun(x,t,u,dudx)

Die Variablen x und t sind skalare Variablen. Der Vektor u stellt die Werte der Lösungs-
funktionen und der Vektor dudx die Werte der partiellen Ableitungen zum aktuellen
Zeitpunkt t und an der Stelle x bereit. Die Ergebnisparameter c, f, s sind Vektoren, deren
Bedeutungen sich unmittelbar aus der oben gegebenen Schreibweise des PDGL-Systems
ergeben. Der Vektor c stellt dabei die Hauptdiagonale der Matrix C bereit.

• Der Parameter icfun stellt ein Funktions-Handle auf die Funktion bereit, die die
Anfangswerte berechnet. Die Funktion muss die folgende Parameterstruktur besitzen:

u = icfun(x)

Die Anfangswerte, für die Funktionen, die für den Vektor x berechnet werden, stehen als
Spaltenvektoren in u.

• Der Parameter bcfun ist ein Funktions-Handle auf die Funktion, die die Randwerte
berechnet. Diese Funktion muss folgende Parameterstruktur besitzen:
[pl,ql,pr,qr] = bcfun(xl,ul,xr,ur,t)
Die Parameter xl ( entspricht a ), xr ( entspricht b ) sind die Koordinaten des linken bzw.
des rechten Randes; t übergibt den aktuellen Zeitpunkt. Die Vektoren ul und ur überge-
Programmentwicklung 3 - 23

ben die aktuellen Werte der Lösung am linken bzw. rechten Rand.
Die Vektoren pl, ql stellen die Koeffizienten im Gleichungssystem der Randbedingun-
gen (s. o.) am linken Rand bereit, die Vektoren pr, qr entsprechend am rechten Rand.

• Der Parameter xmesh bezeichnet den Vektor der Rasterpunkte für die Ortskoordinate:
xmesh = [x0, x1 , ..., xn ]
wobei x0 = a und xn =b gilt. Die Werte müssen in aufsteigender Folge angegeben
werden. Es sind mindestens drei Rasterpunkte notwendig.

• Der Parameter tspan stellt die Punkte des Zeitrasters bereit:


tspan = [ t0 , t1 , ... tende ]
Auch diese Werte müssen in aufsteigender Folge angegeben werden; es sind wenigstens
drei Zeitpunkte vorzugeben.

• Der optionale Parameter options erlaubt das Setzen von Parametern, die sich auf das
numerische Verfahren beziehen (Genauigkeit usw.). Einzelheiten können der on-line-
Hilfe entnommen werden.

• Der Ergebnisparameter sol ist ein dreidimensionales Feld, das aus so vielen zweidi-
mensionalen „Scheiben“ besteht, wie das System Gleichungen bzw. Zustandsgrößen hat.
Daraus folgt beispielsweise:
S sol (:,:,k) liefert die Werte der Lösung für die k-te Zustandsgröße über dem
vorgegebenen Orts-/Zeitraster.
S sol (i,:,k)liefert das Ortsprofil zum Zeitpunkt tspan(i) für die k-te Zu-
standsgröße.
S sol (i,j,k) liefert den Wert der k-ten Zustandsgröße an der Stelle xmesh(j)
zum Zeitpunkt tspan(i).

< Beispiel (Details zum Prozess sind in [4] zu finden)

Ein Gas A diffundiert in eine Flüssigkeit B und reagiert dabei mit der Flüssigkeit. Die Flüssig-
keitssäule hat die Länge L; der Diffusionskoeffizient sei DAB. Die Transportgleichung für die
Komponente A besitzt die konkrete Form:

Nach Einführung dimensionsloser Koordinaten folgt:

Die Anfangs- und Randbedingungen sind wie folgt gegeben:


3 - 24 Programmentwicklung

Für die Konstanten können folgende Werte angenommen werden:


DAB = 2 10 -9 m2 s -1 L = 0.1 m k = 2 10 -7 s -1
Damit lassen sich die folgenden MATLAB-Funktionen schreiben:

function [c, f, s] = pde_flow(x,t,u,dudx)


% Fluss-Funktion
% Entspricht der Funktion pdefun.
D = 2e-9; L=0.1; k=2E-7;
A=k*L*L/D;
c=1;
f=dudx;
s=-A*u;

function u=pde_init(x)
% Zuweisung der Anfangswerte
% Entspricht der Funktion icfun
u=0;

function [pl,ql,pr,qr]=pde_bound(xl,ul,xr,ur,t)
% Funktion für die Erfüllung der Randbedingungen
% Entspricht der Funktion bcfun.
pl=ul-0.02;
ql=0; pr=0; qr=1;

Die Funktion zur Lösung der PDGL kann nun wie folgt aufgerufen werden:

>> tspan=0:1:10; xmesh=0:0.1:1;


>> sol=pdepe(0,@pde_flow,@pde_init,@pde_bound,xmesh,tspan);
>> surf(tspan,xmesh,sol(:,:,1))
Symbolisches Rechnen 4-1

4. Symbolisches Rechnen mit MATLAB1


4.1. Definition von symbolischen Variablen

Die Symbolic Math Toolbox von MATLAB erlaubt die Ausführung mathematischer Operatio-
nen, wie Differentiation oder Integration in symbolischer Form. Die dafür notwendigen Operan-
den müssen vorher als symbolische Operanden vereinbart werden, um sie von normalen (nume-
rischen) Variablen unterscheiden zu können. Weiterhin ist es notwendig, Ausdrücke definieren
zu können, die als symbolische Verknüpfungen von Konstanten und/oder Variablen interpretiert
werden. Es bestehen die folgenden Möglichkeiten:

‘ Der sym - Befehl

Bei allen Formen des sym - Befehls kann auf der linken Seite der Name einer symbo-
lischen Variablen stehen. Wurde diese nicht bereits an anderer Stelle deklariert, so wird
sie durch den betreffenden sym - Befehl als symbolische Variable eingeführt.

‚ symbolische_variable = sym (‘zeichenkette‘)


Die symbolische Variable, die auf der linken Seite steht, erhält den symbolischen
Ausdruck, der jetzt als Zeichenkette kodiert wird, zugewiesen. In dieser Zeichenkette
können auch Symbole auftreten, die nicht als symbolische Variable definiert wurden.
Diese werden dann wie symbolische Konstanten behandelt. Bei der späteren Verarbei-
tung solcher Ausdrücke können Fehler auftreten, wenn auf diese Konstanten in Zu-
sammenhängen zugegriffen wird, die nur für Variable zulässig sind (z.B. Differentiati-
on). Über den sym-Befehl lässt sich eine symbolische Konstante wie folgt in eine
Variable konvertieren:
symbolische_variable = sym (‘name_der_konstanten‘)
Dabei wird der Name der Variablen so wie der Name der Konstanten gewählt, d.h. der
Name der Variablen stimmt mit dem Inhalt der Zeichenkette überein.

‚ symbolische_variable = sym (symbolischer_ausdruck)


Die symbolische Variable, die auf der linken Seite steht, erhält den symbolischen
Ausdruck zugewiesen. Die Variable auf der linken Seite ist damit als symbolische
Variable definiert. Der symbolische Ausdruck darf nur symbolische Variable und
Konstanten enthalten.

‚ symbolische_variable = sym (MATLAB_ausdruck , flag)


Der MATLAB-Ausdruck wird berechnet und anschließend in eine seinem Typ ent-
sprechende symbolische Form konvertiert. Das Format der Darstellung wird durch den
Parameter flag bestimmt:

1
Im Folgenden wird ausschließlich die Nutzung der Möglichkeiten symbolischen Rechnens
über die Kommandooberfläche behandelt. Die Alternative, Verwendung eines MyPAD
Notbook, wird in diesem Abschnitt nicht beschrieben, da es sich hierbei um ein eigenständiges
Werkzeug handelt. Die notwendigen Details sind in “MuPAD - User’s Guide” zu finden.
4-2 Symbolisches Rechnen

flag Bedeutung
‘r‘ Die Daten werden in eine rationale Darstellung kon-
vertiert.
‘d‘ Es wird eine dezimale Darstellung erzeugt. Die Län-
ge der Dezimalzahl wird durch die vpa-Funktion
festgelegt.
‘f‘ Es wird eine Gleitkommadarstellung erzeugt, wobei
der exponentielle Anteil mit der Basis 2 dargestellt
wird

< Beispiele

% Die Variable x wird als symbolische Variable eingeführt und


% sie erhält einen symbolischen Ausdruck zugewiesen, auf den
% über x zugegriffen werden kann.
% Achtung: a und b sind symbolische Konstanten!

>> x=sym('a+b*b+3');
>> x*x
ans =
(a+b^2+3)^2

% Im folgenden Beispiel wird die symbolische Variable y


% eingeführt; ihr wird die symbolische Konstante 1/2
% zugewiesen. Die Konstante wird aus dem numerischen Wert
% erzeugt.

>> c=0.5;
>> y=sym(c,'r')

y =
1/2

% Im folgenden Beispiel wird die symbolische Variable z


% eingeführt. Sie erhält die Summe x+y zugewiesen.

>> z=sym(x+y)
z =
a+b^2+7/2

% Mit dem sym-Befehl lassen sich nicht nur symbolische


% skalare Variable, sondern auch symbolische Vektoren und
% Matrizen definieren. Die folgenden Befehle liefern als
% Beispiel die symbolische Berechnung der Inversen einer Matrix.
% a ist wieder eine symbolische Konstante.

>> A=sym('[ a 2*a 3*a; 4*a 5*a 6*a; a 2*a 4*a]')


Symbolisches Rechnen 4-3

A =
[ a, 2*a, 3*a]
[ 4*a, 5*a, 6*a]
[ a, 2*a, 4*a]

>> inv(A)

ans =
[ -8/3/a, 2/3/a, 1/a]
[ 10/3/a, -1/3/a, -2/a]
[ -1/a, 0, 1/a]

>> ans*A

ans =
[ 1, 0, 0]
[ 0, 1, 0]
[ 0, 0, 1]

‘ Die syms - Deklaration

Soll eine Reihe symbolischer Variablen deklariert werden ohne dass diesen gleichzeitig
Ausdrücke zuzuweisen sind, so ist die folgende Deklaration dem sym-Befehl vor-
zuziehen:

‚ syms symbolische_variable symbolische_variable ...


Dem Schlüsselwort syms folgt die Liste der Namen, die die symbolischen Variablen
bezeichnen. Das Trennzeichen in dieser Liste ist das Leerzeichen.

‚ syms symbolische_variable symbolische_variable ... typspezifikation


typspezifikation 6 real | unreal
Dem Schlüsselwort syms folgt die Liste der Namen, die die symbolischen Variablen
bezeichnen. Das Trennzeichen in dieser Liste ist das Leerzeichen. Soll für spätere
Operationen angenommen werden, dass die Variablen reell sind, so ist das durch die
Typspezifikation anzugeben. Als Standard gilt unreal.

< Beispiel

% Im folgenden Beispiel wird die symbolische Multiplikation


% zweier Matrizen ausgeführt.

>> syms X Y Z a b c
>> X=[a b c; 2*a 3*b 4*c]

X =
[ a, b, c]
[ 2*a, 3*b, 4*c]

>> Y=[a b; c a ; a c]
4-4 Symbolisches Rechnen

Y =
[ a, b]
[ c, a]
[ a, c]

>> Z=X*Y

Z =
[ a^2+b*c+c*a, 2*a*b+c^2]
[ 2*a^2+3*b*c+4*c*a, 5*a*b+4*c^2]

4.2. Symbolische Ausdrücke


4.2.1 Bildung symbolischer Ausdrücke

Symbolische Ausdrücke entstehen durch die Verknüpfung symbolischer Variablen sowie


Konstanten durch die Operatoren + , - , * , / und ^. Es können ebenfalls die in MATLAB
definierten Standardfunktionen verwendet werden. Die syntaktischen Regeln sind konform zu
denen arithmetischer Ausdrücke in MATLAB.
Wird ein symbolischer Ausdruck einer Variablen zugewiesen, so wird diese implizit als symbo-
lische Variable deklariert.

< Beispiele

% Im Folgenden wird die komplexe Größe a eingeführt.


>> syms X a b c real
>> a=b+i*c
a =
b+i*c

% Die konjugiert komplexe Größe und der Betrag lassen sich


% wie folgt bestimmen.
>> ca=conj(a)
ca =
b-i*c

>> abs_a=sqrt(a*ca)
abs_a =
((b+i*c)*(b-i*c))^(1/2)

% Die Variablen ca und abs_a wurden implizit als symbolische


% Variable eingeführt.
% Die Darstellung des Betrages lässt sich weiter vereinfachen.
% Dafür muss die Funktion simple herangezogen werden.

>> abs_a=simple(sqrt(a*ca))
abs_a =
(b^2+c^2)^(1/2)

% Das gleiche Ergebnis erhält man mit der Standardfunktion abs:


Symbolisches Rechnen 4-5

>> abs_a=abs(a)
abs_a =
(b^2+c^2)^(1/2)

% Eine Matrix, die unterschiedliche Potenzen von a enthält,


% wird durch folgenden Ausdruck definiert:

>> X=a.^((0:2)'*(0:2))
X =

[ 1, 1, 1]
[ 1, b+i*c, (b+i*c)^2]
[ 1, (b+i*c)^2, (b+i*c)^4]

% Die Beträge der Elemente dieser Matrix erhält man wie folgt:
>> abs(X)
ans =
[ 1, 1, 1]
[ 1, (b^2+c^2)^(1/2), b^2+c^2]
[ 1, b^2+c^2, (b^2+c^2)^2]

4.2.2 Umformung symbolischer Ausdrücke

‘ Die „Variablen-Konvention“

Im Zusammenhang mit den Umformungsfunktionen taucht das Problem auf, eine symbolische
Variable als unabhängige Variable innerhalb eines Ausdrucks zu deklarieren. Dafür gilt folgende
Regel:

Wenn keine explizite Deklaration der unabhängigen Variablen erfolgt,


so wird die Variable mit dem Namen x als unabhängige Variable
angenommen. Wenn es keine Variable mit diesem Namen gibt, wird
die Variable angenommen die im Alphabet x am nächsten steht.

Diese Regel gilt auch im Folgenden, wenn in anderen Zusammenhängen eine unabhängige
Variable festgelegt werden muss (z.B. bei der Differentiation oder der Integration).

‘ Ordnen nach Potenzen einer Variablen

‚ collect( S )
Der symbolische Ausdruck S wird nach Potenzen der Variablen sortiert. Welche symbo-
lische Variable für den Sortiervorgang ausgewählt wird, wird nach der oben angegebe-
nen Regel entschieden.

‚ collect( S , v)
Der symbolische Ausdruck S wird nach Potenzen der Variablen v sortiert.
4-6 Symbolisches Rechnen

< Beispiele

>> syms a b x
>> a=(b+x)^3+x^2+4
a =
(b+x)^3+x^2+4

% Der folgende Aufruf von collect sortiert den Ausdruck a


% nach Potenzen von x (implizite Annahme der Variablen)
>> collect(a)
ans =
x^3+(3*b+1)*x^2+3*b^2*x+b^3+4

% Der folgende Aufruf sortiert den Ausdruck a nach Potenzen


% von b (explizite Deklaration der Variablen)
>> collect(a,b)
ans =
b^3+3*b^2*x+3*x^2*b+x^3+4+x^2

‘ Zerlegung in Faktoren / Ausklammern

‚ factor ( S )
Diese Funktion zerlegt den Ausdruck S in Faktoren durch Ausklammern gemeinsamer
Bestandteile von Teilausdrücken.

< Beispiel

% Das folgende Beispiel zeigt, dass als Argumente der Funktionen


% auch Vektoren und/oder Matrizen auftreten können.
>> syms a b x X
>> X=[x^3+b^3 x^2-b^2]
X =
[ x^3+b^3, x^2-b^2]
>> factor(X)
ans =
[ (b+x)*(x^2-x*b+b^2), (x-b)*(b+x)]

‘ Auflösen von Klammerausdrücken

‚ expand ( S )
Alle in S enthaltenen Klammerausdrücke werden aufgelöst; der Ausdruck S „expan-
diert“.

< Beispiel

% Im folgenden Beispiel werden alle Klammerausdrücke aufgelöst


>> syms a b c x
>> a=(x+3)^3*(x+c)
a =
(x+3)^3*(x+c)
Symbolisches Rechnen 4-7

>> expand(a)
ans =
x^4+x^3*c+9*x^3+9*x^2*c+27*x^2+27*x*c+27*x+27*c

‘ Vereinfachung eines Ausdrucks

‚ simplify ( S )
Der symbolische Ausdruck S wird nach gewissen algebraischen Regeln, die auch im
Mathematik-Paket MAPLE zur Anwendung kommen, vereinfacht.

‚ simple ( S )
Es wird versucht, einen Ausdruck zu erzeugen, der kürzer als der ursprüngliche Aus-
druck S ist. Die Zwischenschritte der Umformung werden angezeigt, wenn simple allein
aufgerufen wird. Wird das Ergebnis der Funktionsauswertung einer Variablen zugewie-
sen, werden die Zwischenergebnisse nicht angezeigt.

< Beispiele

% Im folgenden Beispiel liefern beide Funktionen zur


% Vereinfachung das gleiche Resultat
>> syms a b c x
>> a=cos(x)^2+sin(x)^2
a =
cos(x)^2+sin(x)^2
>> simplify(a)
ans =
1

% Die Zwischenschritte, die nach dem Aufruf von simple angezeigt


% werden, wurden im Folgenden weggelassen.
>> simple(a);
............
ans =
1

% Im nachfolgenden Beispiel fallen die Ergebnisse leicht


% unterschiedlich aus. Zwischenergebnisse von simple
% werden angegeben. Die Endergebnisse werden fett hervorgehoben.
>> a=(sin(x)+cos(x))^2

a =
(sin(x)+cos(x))^2

>> simple(a)
simplify:
2*sin(x)*cos(x)+1
radsimp:
(sin(x)+cos(x))^2
combine(trig):
1+sin(2*x)
4-8 Symbolisches Rechnen

factor:
(sin(x)+cos(x))^2
expand:
sin(x)^2+2*sin(x)*cos(x)+cos(x)^2
combine:
1+sin(2*x)
convert(exp):
(-1/2*i*(exp(i*x)-1/exp(i*x))+1/2*exp(i*x)+1/2/exp(i*x))^2
convert(sincos):
(sin(x)+cos(x))^2
convert(tan):
(2*tan(1/2*x)/(1+tan(1/2*x)^2)+(1-tan(1/2*x)^2)/(1+tan(1/2*x)^2))^2
collect(x):
(sin(x)+cos(x))^2
ans =
1+sin(2*x)

>> simplify(a)
ans =
2*sin(x)*cos(x)+1

‘ Zerlegung eines Ausdrucks in Zähler- und Nennerausdruck

‚ [num , den] = numden (S)


Diese Funktion ist nur sinnvoll anzuwenden, wenn der Ausdruck S eine rationale Funkti-
on darstellt. Im Ergebnisparameter num wird der Zählerausdruck und im Ergebnispara-
meter den der Nennerausdruck übergeben.

< Beispiel

>> syms a b c x
>>
>> a=(x+5)^3
a =
(x+5)^3
>> b=x+c
b =
x+c

% Es folgt die Anwendung der Funktion numden auf einen Ausdruck,


% der sich aus den Teilausdrücken a und b zusammensetzt.
>> [z,n]=numden(a+a/(a+b))
z =
(x+5)^3*(x^3+15*x^2+76*x+126+c)

n =
x^3+15*x^2+76*x+125+c
Symbolisches Rechnen 4-9

‘ Symbolische Operationen mit Polynomen

‚ poly2sym ( p )
Es wird ein Polynom als symbolischer Ausdruck in der symbolischen Variablen x
erzeugt, dessen Koeffizienten im Vektor p in numerischer Form vorgegeben werden.

‚ poly2sym ( p , v )
Es wird ein Polynom als symbolischer Ausdruck in der symbolischen Variablen v
erzeugt, dessen Koeffizienten im Vektor p in numerischer Form vorgegeben werden.

‚ p = sym2poly ( S )
Der symbolische Ausdruck S wird als Polynom interpretiert. Im Vektor p werden die
Polynomkoeffizienten in numerischer Form bereitgestellt.

i Hinweis
Wie in MATLAB allgemein üblich, werden in den Koeffizientenvektoren für Polynome
die Koeffizienten so geordnet, dass die Komponente mit dem niedrigsten Index den
Koeffizienten vor der höchsten Potenz der Polynomvariablen darstellt und die mit dem
höchsten Index den Koeffizienten vor der 0-ten Potenz.

< Beispiele

% Es folgen zwei Beispiele für die Erzeugung symbolischer


% Polynome
>> syms x y
>> poly2sym([25 2 25 3])
ans =
25*x^3+2*x^2+25*x+3

>> poly2sym([25 2 25 3],y)


ans =
25*y^3+2*y^2+25*y+3

% Es folgt ein Beispiel für die Rückkonvertierung des % Koeffi-


% zientenvektors aus der symbolischen in die numerische Form.
>> p=sym2poly(3*y^3+6*y^2+y+24)
p =
3 6 1 24

‘ Substitutionsoperationen

‚ pretty ( S )
Der symbolische Ausdruck S wird in eine der mathematischen Notation ähnliche Form
transformiert und angezeigt.

‚ subs ( S )
Alle im symbolischen Ausdruck S enthaltenen symbolischen Konstanten werden durch
numerische Werte ersetzt, wenn unter den Namen der symbolischen Konstanten numeri-
sche Variable im aktuellen Workspace existieren.
4 - 10 Symbolisches Rechnen

‚ subs ( S , s_alt , s_neu )


Der Teilausdruck s_alt wird im symbolischen Ausdruck S durch den Teilausdruck s_neu
ersetzt. Jedes Auftreten von s_alt in S wird bei der Substitution durch s_neu berück-
sichtigt. Die Parameter S, s_alt und s_neu können durch symbolische Ausdrücke oder
durch Zeichenketten gegeben sein.

< Beispiele

% Es folgt ein Beispiel zur Anwendung der pretty-Funktion


>> syms x y t
>> x=sin(5*t)^2+exp(-0.3*t)*cos(3*pi*t)
x =
sin(5*t)^2+exp(-3/10*t)*cos(3*pi*t)
>> pretty(x)
2
sin(5 t) + exp(- 3/10 t) cos(3 pi t)
>> y=sqrt(x);
>> pretty(y)
2 1/2
(sin(5 t) + exp(- 3/10 t) cos(3 pi t))

% Im folgenden Beispiel wird die Variable t durch einen neuen


% Teilausdruck ersetzt, der als Zeichenkette gegeben ist .
y =
(sin(5*t)^2+exp(-3/10*t)*cos(3*pi*t))^(1/2)
>> subs(y,t,'(x+pi/5)')
ans =
(sin(5*x)^2+exp(-3/10*x-3/50*pi)*cos(3*pi*(x+1/5*pi)))^(1/2)

% Im folgenden Beispiel wird zunächst die gleiche Wirkung


% erreicht, obwohl der neue Teilausdruck als symbolischer
% Ausdruck gegeben ist.
>> y=sin(5*t)^2+exp(-0.3*t)*cos(3*pi*t)
y =
sin(5*t)^2+exp(-3/10*t)*cos(3*pi*t))^(1/2)
>> subs(y,t,x+pi/5)
ans =
(sin(5*x)^2+exp(-3/10*x-3/50*pi)*cos(3*pi*(x+1/5*pi)))^(1/2)

% Im folgenden Fall führt die Substitution zu einen anderen


% Ergebnis, da die Variable vorher durch einen Ausdruck
% belegt wurde.
>> x=pi/2
x =
1.5708
>> subs(y,t,x+pi/5)
ans =
0.9189

% Im folgenden Beispiel werden symbolische Konstanten


% durch numerische Variablen des Workspace belegt.
Symbolisches Rechnen 4 - 11

% Zunächst wird die symbolische Matrix X eingeführt. Diese


% enthält die symbolische Konstante a.
>> syms X
>> X=sym('[a 2*a ; 4*a^2 5*a^2 ]')
X =
[ a, 2*a]
[ 4*a^2, 5*a^2]

% Die Variable a wird als numerische MATLAB-Variable definiert.


>> a=3
a =
3

% Der folgende Substitutionsbefehl ersetzt die symbolische


% Konstante durch den momentanen Wert der MATLAB-Variablen.
>> subs(X)
ans =
3 6
36 45

4.2.3. Berechnung und grafische Darstellung von Ausdrücken

‘ Bestimmung des Wertes eines symbolischen Ausdrucks, der aus symbolischen Kon-
stanten besteht

‚ double ( N )
Der symbolische Ausdruck N beschreibe die arithmetische Verknüpfung numerischer
Konstanten. Durch die Funktion double wird der Wert des Ausdrucks berechnet und in
einer reellen Zahlendarstellung bereitgestellt.

< Beispiel

% Die Variable wert wird mit einem Ausdruck belegt, der in


% symbolischer Form nur Konstanten enthält.
>> wert=sym('sqrt(3*pi/2)+sin(0.6*pi)')
wert =
sqrt(3*pi/2)+sin(0.6*pi)

% Mit wert wird zunächst noch eine Operation in der symbolischen


% Ebene ausgeführt.
>> wert=wert*2
wert =
6^(1/2)*pi^(1/2)+2*sin(.6*pi)

% Der numerische Wert des Ausdrucks wird über double bestimmt


>> double(wert)
ans =
6.2437
4 - 12 Symbolisches Rechnen

‘ Bestimmung des Wertes eines symbolischen Ausdrucks über die Substitution der
Variablen durch numerische Konstanten

‚ subs ( S , v , w )
Der Aufruf der Substitutionsfunktion in dieser Form hat zwei Schritte zur Folge:
S Die Variable v im Ausdruck S wird durch den Wert des numerischen Ausdrucks
w ersetzt.
S Der Wert des so entstehenden Ausdrucks wird berechnet.
Der Ausdruck w muss keine Konstante, sondern kann auch ein MATLAB-Ausdruck
sein.

< Beispiel

% Im folgende Beispiel wird zunächst ein symbolischer Ausdruck


% definiert.
>> syms x y
>> y=2*exp(-0.1*x)/sin(x)^2
y =
2*exp(-1/10*x)/sin(x)^2

% Der Wert des Ausdrucks soll für den Wertebereich 1 .. 6


% bestimmt werden. Dafür kann die implizite MATLAB-Schleife
% genutzt werden.
>> subs(y,x,(1:6))
ans =
2.5558 1.9804 74.3985 2.3407 1.3192 14.0589

‘ Grafische Darstellung einer symbolisch definierten Funktion

Es kann an dieser Stelle nur die Funktion ezplot genauer beschrieben werden. Es gibt eine
Reihe weiterer Funktionen zur graphischen Darstellung symbolisch definierter Funktionen, die
die Möglichkeiten der Erzeugung grafischer Funktionsdarstellungen noch wesentlich erweitern1,
deren Beschreibung aber den Umfang dieses Handbuchs sprengen würde.

‚ ezplot ( f )
Der symbolische Ausdruck beschreibe eine Funktion f(x). Die Funktion wird über x im
Standardbereich -2ð < x < 2ð dargestellt. Wenn im Ausdruck f zwei Variable auftreten,
so wird angenommen, dass es sich um eine implizit definierte Funktion f( x , y ) = 0
handelt. Diese Form wird der grafischen Darstellung zu Grunde gelegt. Die Variablen
werden dann in folgenden Bereichen variiert: -2ð < x < 2ð ; -2ð < y < 2ð. Die Varia-
blen müssen nicht mit x und y bezeichnet werden, sondern können mit anderen Namen
bezeichnet werden.

1
Es handelt sich um folgende Funktionen, deren Beschreibungen der Online-Hilfe oder dem Handbuch zu
entnehmen sind:
ezplot3 , ezsurf, ezpolar, ezmesh, ezmeshc, ezcontour, ezcontourf
Symbolisches Rechnen 4 - 13

‚ ezplot ( f , [min,max])
Es gelten die gleichen Festlegungen wie für ezplot nach der obigen Beschreibung.
Lediglich der Wertebereich für die unabhängige Variable wird durch min < x < max neu
festgelegt.

‚ ezplot ( f , [xmin,xmax,ymin,ymax])
Dieser Aufruf modifiziert die Wertebereiche der Variablen x und y bei der Darstellung
einer implizit definierten Funktion.

‚ ezplot (x , y )
Durch diesen Aufruf wird die ebene Kurve, deren Parameterdarstellung durch die beiden
Funktionen x = x(t) und y = y(t) gegeben ist, grafisch dargestellt. Als Wertebereich für
den Parameter wird 0 < t < 2ð angenommen.

‚ ezplot (x , y , [tmin , tmax] )


Es gelten die gleichen Festlegungen wie in der vorangegangenen Beschreibung; der
Kurvenparameter wird jetzt aber im Bereich tmin < t < tmax variiert.

‚ ezplot (.... , handle )


Die Punkte .... stehen für eine der in den vorangegangenen Beschreibungen eingeführten
Parameterlisten. Der Parameter handle verweist auf ein Grafik-Fenster, in das die aktuel-
le Darstellung zu übernehmen ist.

< Beispiele

% Im folgenden Beispiel wird der Graf der Funktion sin(x)/x


% dargestellt.

>> syms x y z
>> z=sin(x)/x
z =
sin(x)/x
ezplot(z,[-5*pi,5*pi])
4 - 14 Symbolisches Rechnen

% Das folgende Beispiel führt die darzustellende Funktion


% in impliziter Form ein.

>> z=sin(x*y)
z =
sin(x*y)
>> ezplot(z)

% Im folgenden Beispiel wird eine Ellipse dargestellt, die in


% der Parameterdarstellung gegeben ist.

>> syms x y t
>> x=2*sin(t);
>> y=cos(t);
>> ezplot(x,y)
Symbolisches Rechnen 4 - 15

4.3. Symbolische Differentiation und Integration


4.3.1 Differentiation

Sowohl für die symbolische Differentiation als auch die symbolische Integration ist die
Variablen-Konvention (s. Abschnitt 4.2.2) zu beachten, wenn nicht eine explizite Definition der
unabhängigen Variablen erfolgt.

‚ diff ( S )
Es wird die erste Ableitung der durch den symbolischen Ausdruck S definierten Funktion
gebildet. Die unabhängige Variable wird gemäß der Variablen-Konvention gewählt.

‚ diff ( S , v )
Es wird die erste Ableitung der durch den symbolischen Ausdruck S definierten Funktion
nach der Variablen v gebildet.

‚ diff ( S , n )
Es wird die n-te Ableitung der durch den symbolischen Ausdruck S definierten Funktion
gebildet. Die unabhängige Variable wird gemäß der Variablen-Konvention gewählt.

‚ diff ( S , v , n )
Es wird die n-te Ableitung der durch den symbolischen Ausdruck S definierten Funktion
nach der Variablen v gebildet.

< Beispiele

% Im folgenden Beispiel wird die erste Ableitung nach der


% Standardvariablen x ermittelt.
>> syms x y
>> y=(x*log(x))^x
y =
(x*log(x))^x

>> diff(y)
ans =
(x*log(x))^x*(log(x*log(x))+(log(x)+1)/log(x))

% Im folgenden Beispiel wird nach der Variablen a differenziert.


% Der Ausdruck und die Variable werden im Zeichenkettenformat
% dargestellt.
>> diff('(x*log(a))^a','a')
ans =
(x*log(a))^a*(log(x*log(a))+1/log(a))

% Im folgenden Beispiel werden Ableitungen unterschiedlicher


% Ordnung eines Ausdrucks ermittelt und in einer symbolischen
% Matrix abgespeichert.
>> syms x y X
>> y=x*exp(-2*x);
4 - 16 Symbolisches Rechnen

>> X=[diff(y) diff(y,2); diff(y,3) diff(y,4)]


X =
[ exp(-2*x)-2*x*exp(-2*x), -4*exp(-2*x)+4*x*exp(-2*x)]
[ 12*exp(-2*x)-8*x*exp(-2*x), -32*exp(-2*x)+16*x*exp(-2*x)]

% Diese Matrix lässt sich noch in der Darstellung modifizieren


>> factor(X)
ans =
[ -exp(-2*x)*(-1+2*x), 4*exp(-2*x)*(x-1)]
[ -4*exp(-2*x)*(-3+2*x), 16*exp(-2*x)*(-2+x)]

4.3.2 Integration

‚ int ( S )
Über die durch den symbolischen Ausdruck S gegebene Funktion wird unbestimmt
integriert. Die Integrationsvariable wird gemäß der Variablen-Konvention gewählt.

‚ int ( S , v )
Über die durch den symbolischen Ausdruck S gegebene Funktion wird unbestimmt
integriert. Die Integrationsvariable ist die Variable v.

‚ int ( S , a , b)
Über die durch den symbolischen Ausdruck S gegebene Funktion wird bestimmt in den
Grenzen a und b integriert. Die Integrationsvariable wird gemäß der Variablen-Konventi-
on gewählt. Die Integrationsgrenzen a und b sind numerische MATLAB-Ausdrücke.

‚ int ( S , v , a ,b )
Über die durch den symbolischen Ausdruck S gegebene Funktion wird bestimmt in den
Grenzen a und b integriert. Die Integrationsvariable ist die Variable v. Die Integrations-
grenzen a und b sind numerische MATLAB-Ausdrücke.

‚ int ( S , unten , oben )


Über die durch den symbolischen Ausdruck S gegebene Funktion wird bestimmt in den
Grenzen unten und oben integriert. Die Integrationsgrenzen unten und oben sind
symbolische Ausdrücke.

< Beispiele

% Im folgenden Beispiel wird eine Funktion unbestimmt


% integriert. Integrationsvariable ist x.
>> syms x y
>> y=sin(x)*exp(-x);
>> int(y)
ans =
-1/2*exp(-x)*cos(x)-1/2*sin(x)*exp(-x)

% Dieser Ausdruck lässt sich noch vereinfachen. Man kann die


% Integration mit der Vereinfachung kombinieren:
Symbolisches Rechnen 4 - 17

>> simple(int(y))
% Die Einzelschritte von simple werden weggelassen.
% Es wird gleich das Ergebnis angegeben.
ans =
-1/2*exp(-x)*(cos(x)+sin(x))

% Es folgt ein Beispiel für die bestimmte Integration


>> syms x y a b
>> y=sin(2*x)^2;
>> int(y,-pi/2,pi/2)
ans =
1/2*pi

% Im folgenden Beispiel wird die bestimmte Integration mit


% symbolischen Grenzen ausgeführt.
>> simple(int(y,a-pi/2,b+pi/2))
ans =
-1/8*sin(4*b)+1/2*b+1/2*pi+1/8*sin(4*a)-1/2*a

4.3.3 Grenzwertberechnung

‚ limit ( S )
Es wird der Grenzwert der durch den symbolischen Ausdruck S gegebenen Funktion
bestimmt. Dabei wird angenommen, dass die unabhängige Variable gegen Null geht. Die
unabhängige Variable wird gemäß der Variablen-Konvention gewählt.

‚ limit ( S , g )
Es wird der Grenzwert der durch den symbolischen Ausdruck S gegebenen Funktion
bestimmt. Die unabhängige Variable geht gegen den Wert g. Die unabhängige Variable
wird gemäß der Variablen-Konvention gewählt.

‚ limit ( S , v , g )
Es wird der Grenzwert der durch den symbolischen Ausdruck S gegebenen Funktion
bestimmt. Die unabhängige Variable v geht gegen den Wert g.

‚ limit ( S , v , g , ‘left‘ | ‘right‘ )


Es wird der Grenzwert der durch den symbolischen Ausdruck S gegebenen Funktion
bestimmt. Die unabhängige Variable v geht gegen den Wert g - 0, wenn der vierte
Parameter auf ‘left‘ gesetzt wird und sie geht gegen g + 0, wenn dieser Parameter auf
‘right‘ gesetzt wird.

< Beispiele

% Im ersten Beispiel wird der Grenzwert einer Funktion für


% x gegen 0 bestimmt.
>> syms x y
>> y=sin(x)/x
4 - 18 Symbolisches Rechnen

y =
sin(x)/x
>> limit(y)
ans =
1

% Im folgenden Beispiel wird für die gleiche Funktion der


% Grenzwert für den Fall, dass x gegen inf geht, bestimmt.
>> limit(y,inf)
ans =
0

% Im folgenden Beispiel wird die Variable h zur unabhängigen


% Variablen deklariert.
>> syms x h
>> limit((sin(x+h)-sin(x))/h,h,0)
ans =
cos(x)

4.3.4 TAYLOR -Reihenentwicklung

‚ taylor ( S )
Es wird die durch den symbolischen Ausdruck S definierte Funktion in eine TAYLOR-
Reihe entwickelt. Als Entwicklungsstelle wird Null angenommen; die Entwicklung wird
bis zum sechsten Reihenterm angegeben. Die unabhängige Variable wird gemäß der
Variablen-Konvention gewählt.

‚ taylor ( S , n , v )
Es wird die durch den symbolischen Ausdruck S definierte Funktion in eine TAYLOR-
Reihe entwickelt. Die unabhängige Variable ist die Variable v. Als Entwicklungsstelle
wird Null angenommen; die Entwicklung wird bis zum n-ten Reihenterm angegeben.

‚ taylor ( S , n , v , a )
Es wird die durch den symbolischen Ausdruck S definierte Funktion in eine TAYLOR-
Reihe entwickelt. Die unabhängige Variable ist die Variable v. Die Entwicklung wird
bis zum n-ten Reihenterm angegeben. Als Entwicklungsstelle wird der Wert des numeri-
schen Ausdrucks a angenommen.

< Beispiele

% Im folgenden Beispiel werden alle Standardannahmen als


% zutreffend vorausgesetzt.
>> syms x y
>> y=taylor(exp(-x^2/2))

y =
1-1/2*x^2+1/8*x^4
Symbolisches Rechnen 4 - 19

% Im folgenden Beispiel werden Ordnung und Entwicklungsstelle


% vorgegeben. Für die Funktion ist die Entwicklungsstelle
% Null nicht anwendbar!
>> simple(taylor(exp(-x)/x,3,x,1))
ans =
1/2*exp(-1)*(11-14*x+5*x^2)

4.3.5 Symbolische Summation

‚ symsum ( S )
Es wird die Summe der Reihe berechnet, deren allgemeines Glied durch den symbo-
lischen Ausdruck S gegeben ist. Als Summationsvariable wird die Variable k bzw. die
ihr lexikalisch nächste Variable im Ausdruck angenommen; die Variablen-Konvention
gilt für diesen Fall demnach bezogen auf k. Die Summation wird von Null bis k-1
ausgeführt.

‚ symsum ( S , v )
Es wird die Summe der Reihe berechnet, deren allgemeines Glied durch den symbo-
lischen Ausdruck S gegeben ist. Als Summationsvariable wird die Variable v angenom-
men. Die Summation wird von Null bis v-1 ausgeführt.

‚ symsum ( S , a , b)
Es wird die Summe der Reihe berechnet, deren allgemeines Glied durch den symbo-
lischen Ausdruck S gegeben ist. Als Summationsvariable wird die Variable k bzw. die
ihr lexikalisch nächste Variable im Ausdruck angenommen; die Variablen-Konvention
gilt für diesen Fall demnach bezogen auf k. Die Summationsvariable durchläuft den
Bereich von a bis b.

‚ symsum ( S , v , a , b )
Es wird die Summe der Reihe berechnet, deren allgemeines Glied durch den symbo-
lischen Ausdruck S gegeben ist. Als Summationsvariable wird die Variable v angenom-
men. Die Summationsvariable durchläuft den Bereich von a bis b.

< Beispiele

% Es folgt zunächst ein bekanntes und zugleich berühmtes


% Beispiel: die Formel für die Summe der natürlichen Zahlen
% von Null bis k-1.
>> syms s k
>> factor(symsum(k))
ans =
1/2*k*(k-1)

% Im Folgenden wird ein Ausdruck für die Summe der Quadrate


% der natürlichen Zahlen von Null bis k-1 bestimmt.
>> s=symsum(k^2)
s =
1/3*k^3-1/2*k^2+1/6*k
4 - 20 Symbolisches Rechnen

% Im folgenden Beispiel wird der numerische Wert einer Summe


% in vorgegebenen Grenzen berechnet.
>> double(symsum(1/k^2, 1 , 100))
ans =
1.6350

4.4 Symbolische Lösung algebraischer Gleichungen


4.4.1 Symbolische lineare Algebra und lineare Gleichungssysteme

Die Grundfunktionen der linearen Algebra stehen auch als symbolische Funktionen bereit. Mit
Hilfe dieser Funktionen lassen sich lineare Gleichungssysteme lösen. Prinzipiell kann für diese
Aufgabe aber auch die solve Funktion genutzt werden, die im Abschnitt 4.4.2 beschrieben
wird.

‘ Symbolische Inverse und Determinante einer Matrix

‚ inv ( A )
Die symbolische Inverse der Matrix A, die als symbolischer Ausdruck gegeben sein
muss, wird ermittelt.

‚ det ( A )
Die symbolische Determinante der Matrix A, die als symbolischer Ausdruck gegeben
sein muss, wird ermittelt.

< Beispiele

% Es werden die Determinante und die Inverse der Matrix A


% in symbolischer Form ermittelt.
>> syms A X
>> A=sym('[T1*T2*T3 T1*T2; T1/T2 T2*T3]')
A =
[ T1*T2*T3, T1*T2]
[ T1/T2, T2*T3]

>> det(A)
ans =
T1*T2^2*T3^2-T1^2

>> X=inv(A)
X =
[ T2*T3/T1/(T2^2*T3^2-T1), -T2/(T2^2*T3^2-T1)]
[ -1/T2/(T2^2*T3^2-T1), T2*T3/(T2^2*T3^2-T1)]

% Das Produkt X*A muss die Einheitsmatrix ergeben


>> simple(A*X)
ans =
[ 1, 0]
[ 0, 1]
Symbolisches Rechnen 4 - 21

‘ Eigenwerte und charakteristische Gleichung einer Matrix

‚ eig ( A )
Diese Funktion liefert in einem symbolischen Vektor die Eigenwerte der Matrix.

‚ [V , D] = eig ( A )
In der symbolischen Matrix V werden die Eigenvektoren der Matrix A übergeben und in
der symbolischen Diagonalmatrix D die Eigenwerte.

‚ poly ( A )
Diese Funktion liefert das charakteristische Polynom der Matrix A in Form eines
symbolischen Ausdrucks. Als Polynomvariable wird x angenommen.

‚ poly ( A , v )
Diese Funktion liefert das charakteristische Polynom der Matrix A in Form eines
symbolischen Ausdrucks. Als Polynomvariable wird die Variable v angenommen.

< Beispiele

% Es werden zunächst die Eigenvektoren und die Eigenwerte der


% Matrix A bestimmt.
>> syms A V D
>> A=sym('[a a^2; 2*a^2 5*a]')

A =
[ a, a^2]
[ 2*a^2, 5*a]
>> [V,D]=eig(A)

% Es folgt die Matrix mit den Eigenvektoren


V =

[ -1/2*(-(3+(4+2*a^2)^(1/2))*a+5*a)/a^2, -1/2*(-(3-(4+2*a^2)^(1/2))*a+5*a)/a^2]
[ 1, 1]

% Es folgt die Diagonalmatrix mit den Eigenwerten


D =
[ (3+(4+2*a^2)^(1/2))*a, 0]
[ 0, (3-(4+2*a^2)^(1/2))*a]

% Das charakteristische Polynom wird erzeugt


>> poly(A)
ans =
x^2-6*x*a+5*a^2-2*a^4
% Die Nullstellen können mit der Funktion solve bestimmt werden
>> solve(ans)
ans =
[ (3+(4+2*a^2)^(1/2))*a]
[ (3-(4+2*a^2)^(1/2))*a]
% Das sind genau die Diagonalelemente der Matrix D!
4 - 22 Symbolisches Rechnen

‘ Symbolische Lösung linearer Gleichungssysteme

Wenn es darum geht, die symbolische Lösung des linearen Gleichungssystems

zu bestimmen, so kann man die oben eingeführte Funktion für die symbolische Inverse inv
anwenden, da gilt:

Es kann aber auch die Notation mit dem Backslash-Operator \ gewählt werden:

Als dritte Möglichkeit kann die solve-Funktion herangezogen werden (s. folgenden Ab-
schnitt).

< Beispiele

% Zunächst werden die Koeffizientenmatrix und der Vektor der


% rechten Seiten definiert
>> syms x A b
>> A=sym('[a a^2; 2*a^2 5*a]')
A =
[ a, a^2]
[ 2*a^2, 5*a]

>> b=sym('[b1; b2]')


b =
[ b1]
[ b2]

% Es folgt die Lösung des Gleichungssystems in der Backslash-


% Notation
>> x=A\b
x =
[ (-5*b1+a*b2)/a/(2*a^2-5)]
[ (2*a*b1-b2)/a/(2*a^2-5)]

% Es folgt die Lösung unter Verwendung der Inversen von A


>> x=simple(inv(A)*b)
x =
[ (-5*b1+a*b2)/a/(2*a^2-5)]
[ (2*a*b1-b2)/a/(2*a^2-5)]

% Es folgt die Anwendung der solve-Funktion


>> X=solve('a*x1+a^2*x2-b1','2*a^2*x1+5*a*x2-b2')

X =
Symbolisches Rechnen 4 - 23

x1: [1x1 sym]


x2: [1x1 sym]
>> X.x1
ans =
(-5*b1+a*b2)/a/(2*a^2-5)
>> X.x2
ans =
(2*a*b1-b2)/a/(2*a^2-5)

4.4.2 Lösung algebraischer Gleichungssysteme

Im Mittelpunkt des Interesses steht im folgenden Abschnitt die symbolische Lösung nicht-
linearer algebraischer Gleichungssysteme. Die dafür verfügbare solve-Funktion ist, wie bereits
im Abschnitt 4.4.1 mehrfach hervorgehoben, prinzipiell auch für die symbolische Lösung
linearer algebraischer Gleichungssysteme anwendbar. Allerdings dürften in diesem Fall die im
vorangegangenen Abschnitt behandelten Methoden effektiver sein.

‘ Allgemeine Hinweise

1. Die zu lösenden Gleichungen können durch symbolische Ausdrücke oder durch Zeichen-
ketten dargestellt werden. In den folgenden syntaktischen Beschreibungen werden die
Gleichungen durch die Parameter eq bzw. eq1, eq2 , ... , eqn bezeichnet.
2. Sollen die Gleichungen durch symbolische Ausdrücke dargestellt werden, so wird
angenommen, dass diese die Form eq1 = 0, ... , eqn = 0 besitzen. Es werden
demzufolge nur die linken Seiten erwartet; das Gleichheitszeichen darf in Gleichungen,
die durch symbolische Ausdrücke kodiert werden, nicht auftreten.
3. Werden die Gleichungen durch Zeichenketten kodiert, so können sie unter Einschluss
des Gleichheitszeichens in üblicher mathematischer Darstellung angegeben werden.
Fehlt das Gleichheitszeichen, so wird angenommen, dass die Zeichenkette die linke Seite
der Gleichung darstellt; die rechte Seiten wird dann zu Null gesetzt.
4. Wenn die Namen der Unbekannten, für die die Lösungen zu bestimmen sind, nicht
explizit angegeben werden, gilt die Variablen-Konvention. Dabei wird die Konvention
so oft angewandt, wie es der Anzahl der Unbekannten bzw. der Anzahl der Gleichungen
entspricht.
5. Wird ein System von Gleichungen gelöst, treten also mehrere Unbekannte auf, so werden
die Lösungen in einer Struktur abgespeichert. Die Namen der Unbekannten bezeichnen
die Namen der Datenfelder, unter denen die Lösungen zu finden sind.
6. Wenn die Gleichungen nach den Unbekannten nicht auflösbar sind, erfolgt eine Fehler-
mitteilung.
7. Wenn die Lösung sich numerisch darstellen lässt, so ist zu beachten, dass diese numeri-
schen Konstanten ebenfalls symbolische Konstanten sind. In die „normale“ Darstellung
müssen sie mit der double-Funktion konvertiert werden.
4 - 24 Symbolisches Rechnen

‘ Formen des Aufrufs der Lösungs-Funktion

‚ solve ( eq )
Der Parameter eq beschreibt eine zu lösende Gleichung; es sind die allgemeinen Regeln
zu beachten.

‚ solve ( eq , v )
Der Parameter eq beschreibt eine zu lösende Gleichung; es sind die allgemeinen Regeln
zu beachten. Die Lösung wird für die Unbekannte v bestimmt.

‚ solve ( eq1 , eq2 ,..., eqn )


Die Parameter eq1 ... eqn, beschreiben die zu lösenden Gleichungen; es sind die all-
gemeinen Regeln zu beachten. Die Lösung wird für n Unbekannte gemäß Variablen-
Konvention bestimmt.

‚ solve ( eq1 , eq2 ,..., eqn , v1 , v2 ,..., vn)


Die Parameter eq1 ... eqn, beschreiben die zu lösenden Gleichungen; es sind die all-
gemeinen Regeln zu beachten. Die Lösung wird für die n Unbekannten v1 ... vn be-
stimmt.

< Beispiele

% Der folgende Aufruf liefert die bekannte Lösungsformel für


% eine quadratische Gleichung
>> syms a b c x y X
>> solve(a*x^2+b*x+c)
ans =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

% Das nachfolgende Gleichungssystem wird für die Unbekannten


% x und y gelöst.
>> X=solve(a*x^2+b*x*y+c,b*y^2+a*x*y-c)
X =
x: [2x1 sym]
y: [2x1 sym]
>> X.x
ans =
[ c/(-c*(-b+a))^(1/2)]
[ -c/(-c*(-b+a))^(1/2)]
>> X.y
ans =
[ 1/(-b+a)*(-c*(-b+a))^(1/2)]
[ -1/(-b+a)*(-c*(-b+a))^(1/2)]

% Die Lösung der folgenden Gleichung ist durch eine numerische


% Konstante darstellbar.
solve('log(x)-exp(-2*x)=0')
Symbolisches Rechnen 4 - 25

ans =
exp(.10778502390377436626197930837265)

% Der folgenden Aufruf führt zu einer modifizierten


% Ergebnisdarstellung
simple(solve('log(x)-exp(-2*x)=0'))
ans =
1.1138082774920142479374572409634

% Im folgenden Fall wird das Ergebnis in einen reellen Wert


% konvertiert und der numerischen Variablen a zugewiesen.
>> a=double(solve('log(x)-exp(-2*x)=0'))
a =
1.1138

% Die folgende Gleichung lässt sich nicht nach der Unbekannten


% x auflösen.
>> a=double(solve('log(x)-exp(-a*x)=0'))
??? Error using ==> solve
Error, (in allvalues/rootseq) cannot evaluate with symbolic
coefficients
% Wenn dagegen a die Unbekannte bezeichnet, kann eine Lösung
% gewonnen werden
>> solve('log(x)-exp(-a*x)=0','a')
ans =
-log(log(x))/x

4.5 Symbolische Lösung von Differentialgleichungen

‘ Allgemeine Hinweise

S Die zu lösenden Gleichungen werden in der Zeichenkettenform dargestellt; die Be-


schreibung durch symbolische Ausdrücke ist hier nicht möglich. In den folgenden
syntaktischen Beschreibungen werden die Gleichungen wiederum durch die Parameter
eq bzw. eq1, eq2 , ... , eqn bezeichnet.
S Als unabhängige Variable ist im Standardfall t angenommen. Soll eine andere Variable
hierfür herangezogen werden, so ist diese explizit anzugeben. Auch diese Angabe muss
in Zeichenkettenform erfolgen.
S Der Buchstabe D innerhalb der Zeichenkette, die eine Gleichung kodiert, steht für den
Differentialoperator. Es gilt die folgende Syntax:

Der dem Symbol D (bzw. D n ) folgende Name bezeichnet die gesuchte Funktion, auf
die sich der Differentialoperator bezieht.
S Die Bezeichnungen der gesuchten Funktionen ergeben sich implizit dadurch, dass sie im
Zusammenhang mit einem Differentialoperator auftreten.
S Die Anfangs- bzw. die Randbedingungen geben die gesuchten Funktionen bzw. deren
Ableitungen an definierten Stellen vor. Es gilt folgende Syntax:
4 - 26 Symbolisches Rechnen

anfangsbedingung_oder_randbedingung 6
variablenname ( konstante ) = konstante |
D ganzzahlige_konstante variablenname ( konstante ) = konstante

Im folgenden Beispiel ist die spezielle Form der differentiellen Bedingung in ihrer
Semantik detaillierter dargestellt:

In den folgenden Funktionsbeschreibungen werden die Anfangs-/Randbedingungen


durch die Parameter cond bzw. cond1, cond2 ,... , condn bezeichnet.
S Die Gleichungen und die Anfangs-/Randbedingungen können jeweils in einem Zeichen-
kettenparameter oder als Einzelgleichungen bzw. Einzelbedingungen in separaten
Zeichenkettenparametern kodiert werden. Werden die Gleichungen und/oder Bedingun-
gen jeweils durch einen Zeichenkettenparameter kodiert, so sind die einzelnen Glei-
chungen bzw. Bedingungen innerhalb der betreffenden Zeichenkette durch Kommas zu
trennen. Die Lösungsfunktion akzeptiert maximal 12 Input-Parameter.
S Wird ein System von Gleichungen gelöst, treten also mehrere gesuchte Funktionen auf,
so werden die Lösungen in einer Struktur abgespeichert. Die Namen der Funktionen
bezeichnen die Namen der Datenfelder, unter denen die Lösungen zu finden sind.
S Fehlt die Angabe der Anfangs-/Randbedingungen werden symbolische Integrationskon-
stanten eingeführt, die mit C1,C2.... bezeichnet werden.

‘ Formen des Aufrufs der Lösungs-Funktion

‚ dsolve ( ‘eq1 , eq2 , ... , eqn‘ )


Das System aus n Differentialgleichungen wird gelöst. Als unabhängige Variable wird t
angenommen. Alle Gleichungen werden durch eine zusammenfassende Zeichenkette
kodiert. Da weder Anfangs- noch Randbedingungen angegeben werden, wird angenom-
men, dass es sich um ein Anfangswertproblem handelt, wobei für t=0 Integrationskon-
stanten C1, ... Cn eingeführt werden.

‚ dsolve ( ‘eq1 , eq2 , ... , eqn‘,‘v‘ )


Das System aus n Differentialgleichungen wird gelöst. Als unabhängige Variable wird
die angegebene Variable v angenommen. Alle Gleichungen werden durch eine zu-
sammenfassende Zeichenkette kodiert. Da weder Anfangs- noch Randbedingungen
angegeben werden, wird angenommen, dass es sich um ein Anfangswertproblem handelt,
wobei für t=0 Integrationskonstanten C1, ... Cn eingeführt werden.

‚ dsolve ( ‘eq1 , ... , eqn‘ ,‘cond1 , ... , condn‘)


Das System aus n Differentialgleichungen wird gelöst. Als unabhängige Variable wird t
angenommen. Alle Gleichungen werden durch eine zusammenfassende Zeichenkette
kodiert. Die zu berücksichtigenden Anfangs- bzw. Randbedingungen werden ebenfalls
in einer gemeinsamen Zeichenkette kodiert.
‚ dsolve ( ‘eq1 ,..., eqn‘ ,‘cond1 ,..., condn‘,‘v‘)
Symbolisches Rechnen 4 - 27

Das System aus n Differentialgleichungen wird gelöst. Als unabhängige Variable wird v
angenommen. Alle Gleichungen werden durch eine zusammenfassende Zeichenkette
kodiert. Die zu berücksichtigenden Anfangs- bzw. Randbedingungen werden ebenfalls
in einer gemeinsamen Zeichenkette kodiert.

‚ dsolve ( ‘eq1‘ ,...,‘eqn‘ ,‘cond1‘,...,‘condn‘,‘v‘)


Das System aus n Differentialgleichungen wird gelöst. Als unabhängige Variable wird v
angenommen. Alle Differentialgleichungen und zu berücksichtigende Anfangs- bzw.
Randbedingungen werden durch separate Zeichenketten kodiert. Die bereits beschriebe-
nen Varianten lassen sich auch in dieser Art der Kodierung angeben. Dabei ist aber die
Maximalzahl von 12 für die Inputparameter zu beachten.

< Beispiele

% Im folgenden Beispiel wird eine lineare Differentialgleichung


% 1. Ordnung unter verschiedenen Voraussetzungen gelöst.
% Zunächst wird die homogene DGL behandelt
>> dsolve('T1*Dy+y=0')
ans =
C1*exp(-1/T1*t)
>> dsolve('T1*Dy+y=0','y(0)=1')
ans =
exp(-1/T1*t)

% Es folgt die heterogene DGL mit unterschiedlichen rechten


% Seiten
>> dsolve('T1*Dy+y=1','y(0)=0')
ans =
1-exp(-1/T1*t)

y=simple(dsolve('T1*Dy+y=exp(-t/T0)','y(0)=0'))
y =
-T0*(exp(-t/T0)-exp(-1/T1*t))/(T1-T0)

% Es folgt die Lösung für den Fall T1=T0.


>> y=simple(dsolve('T1*Dy+y=exp(-t/T1)','y(0)=0'))
y =
exp(-1/T1*t)/T1*t

% Im folgenden Beispiel wird ein Anfangswertproblem gelöst,


% das durch eine homogene lineare DGL 2. Ordnung beschrieben
% wird.
>> y=dsolve('0.5*D2y+Dy+y=0','y(0)=1,Dy(0)=0')
y =
exp(-t)*(sin(t)+cos(t))

% Im folgenden Beispiel wird ein Anfangswertproblem gelöst,


% das durch ein System von zwei DGL‘s 1. Ordnung beschrieben
% wird
>> X=dsolve('Dx1=x1+0.5*x2,Dx2=0.5*x1+x2','x1(0)=1,x2(0)=0.5')
4 - 28 Symbolisches Rechnen

X =
x1: [1x1 sym]
x2: [1x1 sym]
>> X.x1
ans =
1/4*exp(1/2*t)+3/4*exp(3/2*t)
>> X.x2
ans =
3/4*exp(3/2*t)-1/4*exp(1/2*t)

% Im folgenden Beispiel wird ein stationäres Reaktions-


% Diffusions-Problem gelöst
> X=simple(dsolve('D2c-k*c=0','c(0)=c0,Dc(1)=0'))
X =
-c0*sinh(k^(1/2))/cosh(k^(1/2))*sinh(k^(1/2)*t)+c0*cosh(k^(1/2)*t)
% Die Lösung kann für den Fall, dass die Konstanten co und k
% vorgegeben werden, auch sofort grafisch dargestellt werden,
% ohne dass die analytische Darstellung vorher erscheint.
>> ezplot(dsolve('D2c-0.9*c=0','c(0)=0.8,Dc(1)=0','x'),[0,1])
% Die nachfolgend dargestellte Grafik wird erzeugt:
Symbolisches Rechnen 4 - 29

4.6 Ergänzende Funktionen


4.6.1 Berechnung spezieller Funktionen

Die Toolbox stellt eine Reihe spezieller Funktionen bereit, die im Grundumfang von MATLAB
nicht verfügbar sind. Diese Funktionen können hier nicht alle behandelt werden. Das ist auch
nicht erforderlich, da der Zugriff auf diese Funktionen nach einem einheitlichen Schema erfol-
gen kann:
1. Über ein spezielles Kommando kann die Liste der verfügbaren Funktionen angefordert
werden.
2. Der Aufruf der gewünschten Funktion erfolgt mit Hilfe einer speziellen Rahmenfunkti-
on; für den Aufruf sind die Informationen der Liste zu entnehmen.

Im Folgenden werden die beiden Kommandos, die für den Zugriff auf die speziellen Funktionen
erforderlich sind, beschrieben.

‚ mfunlist
Es wird die Liste der verfügbaren speziellen Funktionen erzeugt. Diese Liste enthält in
drei Spalten den Namen des Aufrufs, die Parameter und die Bezeichnung der Funktio-
nen. Im Folgenden ist diese Liste angegeben:
MFUNLIST Special functions for MFUN.
The following special functions are listed in alphabetical order
according to the third column. n denotes an integer argument,
x denotes a real argument, and z denotes a complex argument. For
more detailed descriptions of the functions, including any
argument restrictions, see the Reference Manual, or use MHELP.

bernoulli n Bernoulli Numbers


bernoulli n,z Bernoulli Polynomials
BesselI x1,x Bessel Function of the First Kind
BesselJ x1,x Bessel Function of the First Kind
BesselK x1,x Bessel Function of the Second Kind
BesselY x1,x Bessel Function of the Second Kind
Beta z1,z2 Beta Function
binomial x1,x2 Binomial Coefficients
EllipticF - z,k Incomplete Elliptic Integral, First Kind
EllipticK - k Complete Elliptic Integral, First Kind
EllipticCK - k Complementary Complete Integral, First Kind
EllipticE - k Complete Elliptic Integrals, Second Kind
EllipticE - z,k Incomplete Elliptic Integrals, Second Kind
EllipticCE - k Complementary Complete Elliptic Integral, Second Kind
EllipticPi - nu,k Complete Elliptic Integrals, Third Kind
EllipticPi - z,nu,k Incomplete Elliptic Integrals, Third Kind
EllipticCPi - nu,k Complementary Complete Elliptic Integral, Third Kind
erfc z Complementary Error Function
erfc n,z Complementary Error Function's Iterated Integrals
Ci z Cosine Integral
dawson x Dawson's Integral
Psi z Digamma Function
dilog x Dilogarithm Integral
erf z Error Function
euler n Euler Numbers
euler n,z Euler Polynomials
Ei x Exponential Integral
Ei n,z Exponential Integral
FresnelC x Fresnel Cosine Integral
FresnelS x Fresnel Sine Integral
GAMMA z Gamma Function
harmonic n Harmonic Function
Chi z Hyperbolic Cosine Integral
Shi z Hyperbolic Sine Integral
4 - 30 Symbolisches Rechnen
GAMMA z1,z2 Incomplete Gamma Function
W z Lambert's W Function
W n,z Lambert's W Function
lnGAMMA z Logarithm of the Gamma function
Li x Logarithmic Integral
Psi n,z Polygamma Function
Ssi z Shifted Sine Integral
Si z Sine Integral
Zeta z (Riemann) Zeta Function
Zeta n,z (Riemann) Zeta Function
Zeta n,z,x (Riemann) Zeta Function

Orthogonal Polynomials (Extended Symbolic Math Toolbox only)


T n,x Chebyshev of the First Kind
U n,x Chebyshev of the Second Kind
G n,x1,x Gegenbauer
H n,x Hermite
P n,x1,x2,x Jacobi
L n,x Laguerre
L n,x1,x Generalized Laguerre
P n,x Legendre

See also MFUN, MHELP.

Detaillierte Hinweise und Beschreibungen sind unter den Namen der Funktionen auch
der Online-Hilfe zu entnehmen.

‚ mfun ( name , par1 , par2 , par3 , par4 )


Über dieses Kommando wird eine spezielle Funktion aufgerufen. Der Parameter name
enthält den konkreten Namen der Funktion als Zeichenkette kodiert. Der Name ist der
oben dargestellten Liste zu entnehmen. Die Parameter par1 ,.., par4 sind die konkreten
Parameter der Funktion. Wie viele Parameter anzugeben sind, hängt vom jeweiligen
Funktionstyp ab. Die Funktion mfun liefert den Funktionswert in reeller Darstellung.

< Beispiel

Die folgende Funktion (das sogenannte FRESNELsche Sinus-Integral)

soll für ausgewählte Werte berechnet werden.

% Aufruf von mfun für Berechnung der Funktion


% Name der Funktion nach Tabelle: FresnelS
% Die Funktion hat einen Parameter (hier als Vektor definiert)

>> Y=mfun('FresnelS',(0:0.2:1))
Y =

0 0.0042 0.0334 0.1105 0.2493 0.4383


Symbolisches Rechnen 4 - 31

4.6.2 Spezielle Funktionen für komplexe Ausdrücke

Im Folgenden werden Funktionen, die im Zusammenhang mit komplexen Ausdrücken benötigt


werden, ergänzend behandelt. Es ist zu beachten, dass die Bezeichner i und j in komplexen
Ausdrücken für die imaginäre Einheit stehen können. Weiterhin ist zu beachten, dass die
Variablen, die in komplexen Ausdrücken vorkommen als real-Variable spezifiziert werden
müssen (s. Abschnitt 4.1, syms-Deklaration).

‚ real ( K )
Der Realteil des komplexen Ausdrucks K wird in symbolischer Form bestimmt.

‚ imag ( K )
Der Imaginärteil des komplexen Ausdrucks K wird in symbolischer Form bestimmt.

‚ conj ( K )
Der konjugiert komplexe Ausdruck von K wird in symbolischer Form bestimmt.

< Beispiele

% Im folgenden Beispiel werden verschiedene Kennfunktionen


% eines PT1-Gliedes im Frequenzbereich bestimmt.
% Zunächst wird p durch j*omega substituiert.
>> syms omega T1 real
>> L=subs('1/(1+T1*p)','p','j*omega')
L =
1/(1+T1*(j*omega))
% Im nächsten Schritt wird der Betrag des Frequenzgangs in
% symbolischer Form ermittelt
>> a=abs(L)
a =
1/(1+T1^2*omega^2)^(1/2)

% Der Realteil ergibt sich zu:


>> Re =simple(real(L))
Re =
1/(1+T1^2*omega^2)
% Der Imaginärteil folgt zu:
>> Im=simple(imag(L))
Im =
-T1*omega/(1+T1^2*omega^2)
% Damit kann der Betrag auch wie folgt bestimmt werden:
>> a=simple(sqrt(Re*Re+Im*Im))
a =
1/(1+T1^2*omega^2)^(1/2)

% Die Phasenfunktion ergibt sich wie folgt:


>> phi=asin(Im/Re)
phi =
-asin(T1*omega)
4 - 32 Symbolisches Rechnen

4.6.3 Die symbolische Matrix-Exponentialfunktion

Die Matrix-Exponentialfunktion gibt es auch in symbolischer Form. Sie wird wie folgt aufgeru-
fen:

‚ expm ( A )
Die Funktion bestimmt die symbolische Darstellung der Matrix-Exponentialfunktion.
Der symbolische Ausdruck A muss eine quadratische Matrix darstellen.

< Beispiel

% Die homogene Lösung eines Zustandsgleichungssystems, das


% die Systemmatrix A=[-a 0 ; b -a] hat, ist zu bestimmen.
>> syms a t c0 b
>> X=expm([-a 0; b -a].*t)
X =
[ exp(-a*t), 0]
[ b*t*exp(-a*t), exp(-a*t)]
% Die Lösung ergibt sich durch Multiplikation der Matrix X
% mit dem Vektor der Anfangswerte c0
>> c0=sym('[c01;c02]')
>> x=X*c0
x =
[ exp(-a*t)*c01]
[ b*t*exp(-a*t)*c01+exp(-a*t)*c02]

4.6.4 Ergänzende Operationen mit Funktionen

‘ Die symbolische Bestimmung der Umkehrfunktion

Die folgenden Aufrufe dienen der Ermittlung die Umkehrfunktion f -1(x) zu einer vorgegebenen
Funktion f(x).

‚ finverse ( f )
Der symbolische Ausdruck f beschreibt die Funktion, deren Umkehrfunktion zu er-
mitteln ist. Als unabhängige Variable wird x angenommen. Taucht x nicht auf, gilt die
Variablen-Konvention.

‚ finverse ( f ,v )
Der symbolische Ausdruck f beschreibt die Funktion, deren Umkehrfunktion zu er-
mitteln ist. Als unabhängige Variable wird v angenommen.

< Beispiele
>> finverse(tan(1/x))
ans =
1/atan(x)
>> finverse(log(sin(2*x+a)))
ans =
-1/2*a+1/2*asin(exp(x))
Symbolisches Rechnen 4 - 33

‘ Zusammengesetzte Funktionen

‚ compose ( f , g )
Die beiden symbolischen Ausdrücke f und g beschreiben die beiden Funktionen f(x) und
g(y). Die Festlegungen bezüglich der unabhängigen Variablen erfolgen gemäß Variablen-
Konvention. compose liefert die zusammengesetzte Funktion f(g(y)).

‚ compose ( f , g , z)
Die Variable z wird zur unabhängigen Variablen im Ergebnisausdruck; es wird also
f(g(z)) gebildet. Die Festlegung der unabhängigen Variablen für f und g erfolgt gemäß
Variablen-Konvention.

‚ compose ( f , g , v , w , z )
Die unabhängigen Variablen werden bei dieser Form explizit vorgegeben: v gilt für die
Funktion f und w für die Funktion g.

< Beispiele
>> syms f g x y t
>> f=1/(1+x^2);
>> g=sin(y);
>> compose(f,g)
ans =
1/(1+sin(y)^2)

>> compose(f,g*g,t)
ans =
1/(1+sin(t)^4)

4.6.5 Konvertierung eines symbolischen Ausdrucks in das LaTeX-Format

Für weiterführende Darstellungen ist es mitunter hilfreich, einen symbolischen Ausdruck in das
LaTeX-Format zu konvertieren. Die folgende Funktion realisiert diese Aufgabe:

‚ l = latex ( S )
Der symbolische Ausdruck S wird in das LaTeX-Format konvertiert und als Zeichenkette
unter l abgespeichert.

< Beispiele

>> syms x
>> latex(exp(-x^2/2))
ans =
{e^{-1/2\,{x}^{2}}}

>> latex(taylor(exp(-x^2/2)))
ans =
1-1/2\,{x}^{2}+1/8\,{x}^{4}
4 - 34 Symbolisches Rechnen

4.6.6 Die interaktiven Werkzeuge

Im Folgenden werden zwei interaktive Werkzeuge kurz beschrieben, die für die schnelle Aus-
führung symbolischer Operationen sehr hilfreich sein können, zumal sie mit einer Online-Grafik
versehen sind, die für viele Sachverhalte eine gute Visualisierung gestattet.

‘ Der symbolische „Taschenrechner“

‚ funtool
Diese Funktion aktiviert das folgende Fenster:

Die nachfolgenden Grafikfenster werden ebenfalls geöffnet


Symbolisches Rechnen 4 - 35

In diesen beiden Fenstern werden die in den Eingabefeldern f und g beschriebenen Funktionen
grafisch dargestellt.

Die Eingabefelder haben nachfolgende Bedeutungen:

‚ f,g Funktionen einer Veränderlichen; diese heißt im Standardfall x, kann


aber auch eine andere Bezeichnung erhalten. Diese beiden Funktionen
können über die Funktionstasten miteinander verknüpft werden.
‚ a Eingabefeld für eine Konstante, die über die Funktionstasten mit den
Funktionen in den Feldern f und g verknüpft werden kann.
‚ x In diesem Feld wird der Darstellungsbereich der unabhängigen Ver-
änderlichen angegeben. Diese Bereichsangabe wird bei den grafischen
Darstellungen wirksam.

Die Bedeutungen der Schalter auf der „Tastatur“ ergeben sich aus den Beschriftungen, so dass
eine detaillierte Beschreibung nicht erforderlich sein dürfte. Die Buchstaben f, g und a stehen
dabei stets für die oben beschriebenen Eingabefelder.

‘ Interaktives Werkzeug für die TAYLOR-Entwicklung

‚ taylortool
Nach diesem Kommando erscheint das folgende Fenster:
4 - 36 Symbolisches Rechnen

Die einzelnen Bereiche besitzen folgende Bedeutungen:

‚ f(x) In diesem Feld wird die zu entwickelnde Funktion eingegeben. Die un-
abhängige Variable wird im Standardfall mit x bezeichnet, kann aber
grundsätzlich eine beliebige Bezeichnung besitzen.
‚ TN(x) In diesem Feld wird die Taylor-Reihe entsprechend der gewählten Ord-
nung und der gewählten Entwicklungsstelle formelmäßig dargestellt.
‚ N In diesem Feld wird die Ordnung der Entwicklung vorgegeben.
‚ a Dieses Feld dient der Vorgabe der Entwicklungsstelle.
‚ < x < Die beiden Felder beschreiben den Bereich der grafischen Darstellung.
SIMULINK 5-1

5. Grundfunktionen des Simulationssystems SIMULINK


5.1 Grundlagen

„SIMULINK is a software package that enables you


to model, simulate, and analyze systems whos
outputs change over time.“
(Users‘ Guide)

‘ Was ist SIMULINK?


SIMULINK ist ein auf MATLAB basierendes Werkzeug für die Simulation dynamischer
Systeme. Dabei kann sowohl zeitdiskontinuierliches als auch zeitdiskretes Systemverhalten
angenommen werden. Die Grundfunktionen werden in Gestalt von parametrierbaren Funktions-
blöcken bereitgestellt; das trifft sowohl für die Funktionen zur Abbildung des Systemverhaltens
als auch für die Präsentationsfunktionen und die Funktionen zur Beschreibung der Kopplungen
mit der Umgebung zu. Die Funktionsblöcke werden durch „Signalflusslinien“ miteinander
verknüpft. Das Erscheinungsbild eines SIMULINK-Schemas kommt dem des Signaflussplanes
sehr nahe. SIMULINK-Schemata sind damit im hohen Maße „selbstdokumentierend“. Die
Parametrierung der Blöcke über Formulare unterstützt eine benutzerfreundliche, interaktive
Arbeitsweise mit dem System.

‘ Einsatzgebiete und Hauptmerkmale


Zunächst ist festzustellen, dass SIMULINK in seiner Funktionalität keine spezifische Prozess-
klasse favorisiert. Es ist für ein breites Einsatzspektrum von Simulationsproblemen, die für
dynamische Systeme zu lösen sind, einsetzbar. Die Blockbibliothek unterstützt in besonderer
Weise die Modellierung und Simulation linearer zeitkontinuierlicher und zeitdiskreter Systeme
mit konzentrierten Zustandsgrößen. Das betrifft sowohl die Input-/Output-Darstellung als auch
die Zustandsraumdarstellung. Für die Beschreibung des Systemverhaltens können spezielle
Blöcke für Übertragungsfunktionen bzw. für die Darstellung nach dem linearen Zustands-
raummodell eingesetzt werden. Die Simulation des Verhaltens nichtlinearer Systeme wird von
SIMULINK ebenfalls im breiten Maße unterstützt; die Funktionalität des Werkzeuges ist nicht
auf die Simulation linearer Systeme beschränkt. SIMULINK ist damit für ein breites Spektrum
dynamischer Simulationsprobleme einsetzbar. Die besondere Unterstützung von Beschreibungs-
formen (Übertragungsfunktionen) und Konzepten (Signalflussplan) der Regelungstechnik macht
das System für dieses Gebiet besonders attraktiv.

SIMULINK bildet das Systemverhalten durch Blöcke ab. Ein SIMULINK-Block, der für die
Beschreibung des Systemsverhaltens herangezogen werden kann, lässt sich in allgemeiner Form
wie folgt darstellen:
5-2 SIMULINK

Der Vektor der Ausgangsgrößen y hängt sowohl vom Vektor der Zustandsgrößen als auch von
dem der Eingangsgrößen ab. Für den Vektor der Zustandsgrößen x kann angenommen werden,
dass es ein System von Differentialgleichungen oder Differenzengleichungen gibt, das den
aktuellen Zustand aus den zurückliegenden Zuständen, dem Vektor der Eingangsgrößen u und
der Zeit zu bestimmen gestattet.
Die besondere Form des Zustandsmodells wird durch den jeweiligen Blocktyp berücksichtigt.
Die Blöcke werden durch spezifische Parameter an die konkreten Gegebenheiten angepasst.
Diese Parameter können über ein blockspezifisches Parametrier-Formular vorgegeben werden.
In einem SIMULINK-Schema können sowohl zeitdiskrete als auch zeitkontinuierliche Blöcke
kombiniert auftreten. Darüber hinaus gibt es Blöcke, die je nach dem mit welchen Umgebungs-
blöcken sie gekoppelt sind, zeitkontinuierlich oder zeitdiskret arbeiten.

Die Ausgangssignale eines Blockes können zu Eingangssignalen eines anderen Blockes bzw.
anderer Blöcke werden. Die Verbindungen werden durch Signalflusslinien hergestellt.

Für umfangreichere Probleme werden SIMULINK-Schemata sehr schnell unübersichtlich. Zur


besseren Gestaltung wird darum die hierarchische Strukturierung von SIMULINK-Schemata
unterstützt. Der Anwender kann Blöcke zu Subsystemen zusammenfassen, die sich auf den
höheren Darstellungsebenen wie separate Blöcke verhalten.

Der Anwender kann auch Blöcke mit spezifischer Funktionalität programmieren. Diese anwen-
derspezifischen Blöcke können in der MATLAB-Programmiersprache entwickelt werden (S-
Funktionen).

Die vom Anwender programmierten Blöcke können in anwenderspezifischen Blockbiblio-


theken zusammengefasst werden. Die Blöcke dieser Bibliotheken können dann in neue Sche-
mata übernommen werden.

Bei der Ausführung der Simulation setzt das System gewisse Standardwerkzeuge ein. Der
Anwender kann die Lösungswerkzeuge modifizieren; die in MATLAB verfügbaren Integrato-
ren können hierfür herangezogen werden.

Für die Präsentation der Ergebnisse bzw. für deren weitere Verarbeitung stehen spezielle
Blöcke zur Verfügung. Hierbei sind vor allem die grafischen Blöcke für die Anzeigen der
zeitlichen Verläufe in Form von Diagrammen hervorzuheben.

‘ Literatur

„SIMULINK“ , User’s Guid


The MathWorks., 2014.

ANGERMANN , A. ; BEUSCHEL, M. ; RAU , M.; WOHLFARTH , M


„MATLAB-SIMULINK-STATEFLOW“, München, 2014
SIMULINK 5-3

5.2 Erzeugen eines SIMULINK-Schemas


5.2.1 Das Arbeitsfenster

‘ Start von SIMULINK


SIMULINK kann über das MATLAB-Kommandofenster mit dem Kommando
>> simulink
aktiviert werden. In der Speed-Button-Leiste befindet sich ein Schalter (s. Abschnitt 1.2), über
den SIMULINK ebenfalls aktiviert werden kann. Nach dem Start erscheint der SIMULINK
Library Browser. Damit ist die Grundkonfiguration des Systems verfügbar (s. 5.2.2).

‘ Öffnen eines Arbeitsfensters


Für die Entwicklung eines SIMULINK-Schemas ist als erstes notwendig, ein Arbeitsfenster zu
öffnen. Hierfür gibt es zwei Möglichkeiten:

< Über das Auswahlmenü des New-Schalters im MATLAB-Rahmenmenü ist der Menü-
punkt Simulink Model zu aktivieren.
< Es wird der entsprechende Schalter im Rahmenmenü der Simulink Block-Bibliothek
aktiviert (s. unten 5.2.2).

Ein neues (leeres!) Arbeitsfenster ist im folgenden Bild dargestellt:


5-4 SIMULINK
‘ Die Menüpunkte des Arbeitsfensters
Im Folgenden werden ausgewählte Menüpunkte beschrieben:

Menüpunkt Funktion
File Über diesen Menüpunkt wird ein Menü, das die üblichen File-
Operationen enthält, aktiviert. Dazu gehören:
S New , Open , Close
S Save, Save as..
S Print, Print setup
S Exit
Edit Über diesen Menüpunkt wird ein Menü aktiviert, dessen Funktio-
nen die Veränderung bzw. Anpassung des erzeugten Schemas un-
terstützen. Diese Funktionen (wie Cut, Copy, Clear) beziehen sich
dabei in der Regel auf die markierten Blöcke. Über
Copy Current View to Clipboard
wird das erzeugte Schema in die Zwischenablage kopiert.
View Über die Menüpunkte des Untermenüs, das diesem Punkt zugeord-
net ist, kann das Erscheinungsbild der Werkzeugpalette des Arbeits-
fensters verändert werden. Die Zoom-Funktion wird hier ebenfalls
angeboten.
Simulation Über die drei Menüpunkte, die das zugeordnete Untermenü enthält,
wird der Ablauf eines Simulationslaufs gesteuert:
S Start Der Simulationslauf wird gestartet
S Stop Der Simulationslauf wird abgebrochen
S Step forward Schrittweise Abarbeitung.
Tools Es erscheint ein Menü, das die Aktivierung gewisser Werkzeuge
erlaubt.
Help Es erscheint ein Menü, das die unterschiedlichen Formen der
Online-Hilfe bereitstellt.

Eine Reihe von Menüpunkten kann auch über den Toolbar des Formulars erreicht werden. Im
folgenden Bild werden die Bedeutungen der wichtigsten Schalter kurz erläutert.

Öffnen eines neuen Formulars / Speichern des Inhaltes eine Formulars


Aktivieren der Block-Bibliothek

Einstellen der Parameter für die Simulation


Endzeitpunkt
SIMULINK 5-5

‘ Das Popup-Menü des Arbeitsfensters


Wenn der Mauszeiger sich im leeren Arbeitsbereich befindet und die rechte Maustaste betätigt
wird, erscheint ein Popup-Menü, das eine Reihe von Menüpunkten bereitstellt, über die das
Erscheinungsbild des Arbeitsfensters (Screen Color) eingestellt werden kann, bzw. über die der
Ablauf der Simulation (Simulation parameters ...) gesteuert werden kann.

5.2.2 Die Blockbibliothek des Systems

‘ Öffnen der Blockbibliothek


Nach dem Start des Systems erscheint das folgende Fenster mit dem SIMULINK Library
Browser:
Erzeugung eines neuen Modell-Formulars

Öffnen eines bereits vorhandenen Modells


5-6 SIMULINK

Im linken Abschnitt können die Untergruppen der SIMULINK-Block-Bibliothek ausgewählt


werden; im rechten Teilfenster werden die jeweiligen Einträge angezeigt. Über Maus-Doppel-
klick auf einen Eintrag im rechten Fenster kann man das zugehörige Verzeichnis öffnen. Im
oben dargestellten Bild werden im rechten Browser-Fenster die Unterverzeichnisse der
SIMULINK-Blockbibliothek angezeigt. In diesen Unterverzeichnissen sind die Blöcke zu
finden, die die Grundausstattung des Systems ausmachen (s. Abschnitt 5.3.). In ähnlicher Weise
sind die anderen im rechten Browser-Fenster zu findenden Abschnitte der Bibliothek struk-
turiert.
Um zu den konkreten Blöcken zu gelangen, muss eines der im rechten Browser-Abschnitt
dargestellten Verzeichnisse geöffnet werden. Das geschieht durch
S Maus-Doppelklick auf das Symbol oder
S Klick auf den linken Schalter

Im dargestellten Formular wurde das Unterverzeichnis für die zeitkontinuierlichen Modell-


blöcke (Continuous) geöffnet.

Im linken Teilfenster
erscheint das geöffnete
Unterverzeichnis mar-
kiert.
Im rechten Teilfenster
werden die im gewähl-
ten Unterverzeichnis
verfügbaren Blöcke
angezeigt. Diese kön-
nen aus diesem Ver-
zeichnis heraus in das
Arbeitsfenster einge-
fügt werden.

Durch ein Popup-Me-


nü, das über die rechte
Maustaste aktiviert
werden kann, wird un-
ter Anderem die
Online-Hilfe für den
ausgewählten Blocktyp
verfügbar.
SIMULINK 5-7

‘ Auswahl eines Blocks und Einfügen in das Schema


Der in das Arbeitsfenster einzufügende Block wird per Mausklick im Verzeichnis ausgewählt
und bei gedrückter linker Maustaste in das Arbeitsfenster gezogen; in der gewünschten Position
wird die linke Maustaste gelöst (Drag&Drop). Damit wird im Arbeitsfenster eine Instanz des
jeweiligen Blocktyps erzeugt. Im Folgenden wird der Sachverhalt, dass es sich bei einem Block
im Arbeitsfenster eigentlich um eine Block-Instanz handelt, nicht mehr besonders hervor-
gehoben; die Instanzen werden im Allgemeinen auch als Blöcke bezeichnet. Jeder Block erhält
beim Einfügen in das Schema einen Namen, der später geändert werden kann. Der Name wird
aus der Bezeichnung des Blocktyps und einer laufenden Nummer gebildet.
Für den ausgewählten Blocktyp kann auch mit der rechten Maustaste ein Popup-Menü erzeugt
werden. In diesem Menü gibt es den Menüpunkt Add block to model (es folgt der der Name des
aktuelen Modells). Durch Klick auf diesen Punkt wird ebenfalls eine Instanz des gewählten
Blocktyps in das Arbeitsfenster eingefügt.

‘ Auswahl eines Blockes im Arbeitsfenster


Wenn ein Block als Instanz in das Arbeitsfenster übernommen wurde, reagiert er in charakte-
ristischer Weise auf die Maus-Aktivitäten. Für alle folgenden Erläuterungen wird vorausgesetzt,
dass der Block der „ausgewählte“ Block ist. Das wird durch einen einfachen Mausklick auf das
Blocksymbol erreicht. Der Auswahlzustand ist daran zu erkennen, dass das Blocksymbol durch
eine Umrahmung mit kleinen schwarzen Quadraten hervorgehoben wird. Der ausgewählte
Block kann durch die Bewegung der Maus bei gleichzeitig gedrückter linker Maustaste in seiner
Position innerhalb des Arbeitsfensters verändert werden. Weiterhin werden die blockspezi-
fischen Menüpunkte des Edit-Untermenüs (Cut, Copy ..) für den ausgewählten Block aktiv.

‘ Das Parametrier-Formular eines Blockes


Durch Doppelklick mit der linken Maustaste auf das Symbol eines Blockes im Arbeitsfenster
wird das Parametrierformular aktiviert. Dieses Formular ist für den jeweiligen Blocktyp, als
dessen Instanz der konkrete Block anzusehen ist, charakteristisch aufgebaut. Über dieses
Formular werden die konkreten Parameter der Blockinstanz festgelegt. Im Abschnitt 5.3.
werden die Parametrierformulare für ausgewählte Blocktypen beschrieben.
Im Parametrierformular kann auch auf die Variablen des aktuellen MATLAB-Workspace Bezug
genommen werden.

‘ Das Popup-Menü eines Blockes


Wenn ein Block im Arbeitsfenster über die rechte Maustaste angeklickt wird, so wird er zum
ausgewählten Block und gleichzeitig erscheint ein Popup-Menü. In diesem Menü werden
Funktionen angeboten, die sich auf die Parametrierung und auf das Erscheinungsbild des
Blockes (Format —> Foreground Color, Background Color) beziehen.

5.2.3 Verbinden der Blöcke

‘ Ports
Die in das Arbeitsfenster eingefügten Blöcke stehen zunächst in keinem definierten Zusammen-
hang zu anderen Blöcken. Für die Herstellung der Verbindungen zwischen den Blöcken sind
spezielle Operationen auszuführen. Zunächst ist festzustellen, dass die Blöcke nach ihrem
Einfügen in das Arbeitsfenster definierte Ports besitzen. Diese werden durch Pfeile dargestellt;
durch die jeweilige Pfeilrichtung lassen sich Eingänge von Ausgängen unterscheiden. Es ist zu
5-8 SIMULINK

beachten, dass die meisten Blöcke nur jeweils einen Eingang und einen Ausgang besitzen.
Welche Dimensionen die Ausgänge besitzen (Skalare, Vektoren Matrizen) hängt zum einen
vom Blocktyp und zum anderen (im Allgemeinen) von der Dimension des Eingangs ab.

‘ Verbinden von Blöcken


Um Blöcke, die in das Arbeitsfenster eingefügt wurden, miteinander zu verbinden, gibt es zwei
Möglichkeiten:
S Der Mauszeiger wird auf einen offenen Port eines Blocks bewegt; der Mauszeiger ändert
in dem Augenblick sein Erscheinungsbild (vom Pfeil zum Kreuz). Der Mauszeiger ist
nun bei gedrückter linker Maustaste auf den Zielport zu bewegen. Wenn der Port
erreicht wird, ist die linke Maustaste zu lösen. Die Herstellung der Verbindung ist an der
durchgezogenen Signalflusslinie zu erkennen. Bei dieser Art der Herstellung einer
Kopplung zwischen zwei Blöcken kann die Verbindung vom Eingang zum Ausgang
oder umgekehrt hergestellt werden.
S Der Block, dessen Ausgangsport mit dem Eingangsport eines anderen Blockes verbun-
den werden soll, ist mit der linken Maustaste anzuklicken. Anschließend ist die <Strg>-
Taste zu drücken. Der Mauszeiger ist auf den gewünschten Block, mit dem die Kopp-
lung herzustellen ist, zu bewegen. Wenn eine Kopplung hergestellt werden kann, ändert
der Mauszeiger sein Erscheinungsbild (vom Pfeil zum Kreuz). Mit einem Klick der
linken Maustaste wird die Verbindung hergestellt.

‘ Manipulation der Signalflusslinien


Die Signalflusslinien können wie folgt in der Linienführung verändert werden:
S Der Mauszeiger ist auf die gewünschte Signalflusslinie zu setzen; anschließend ist die
linke Maustaste zu drücken.
S Bei gedrückter linker Maustaste kann die Linienführung über die Mausbewegung
verändert werden.
S Wenn die Maustaste gelöst wird, wird die dann aktuelle Linienführung fixiert.
Eine Signalflusslinie kann wie folgt gelöscht werden:
S Der Mauszeiger wird auf die Signalflusslinie bewegt; die Linie wird mit Klick der linken
Maustaste ausgewählt.
S Über die <Entf>-Taste oder den Menüpunkt Clear des Popup-Menüs wird die Signal-
flusslinie gelöscht.
Wenn eine Signalflusslinie mit der rechten Maustaste ausgewählt wird, erscheint ein Popup-
Menü, das weitere Funktionen für die Manipulation der Signalflusslinie bereitstellt.

‘ Verzweigungen von Signalflusslinien


Wenn in eine Signalflusslinie ein Verzweigungspunkt eingefügt werden soll, ist wie folgt zu
verfahren:
S Der Mauszeiger ist auf den Punkt der zu verzweigenden Signalflusslinie zu bewegen, an
dem die Verzweigung eingefügt werden soll.
S Die rechte Maustaste ist zu drücken; die neu entstehende Signalflusslinie ist bei ge-
drückter rechter Maustaste auf den Eingangsport zu ziehen, mit dem die verzweigte
Signalflusslinie zu verbinden ist.
SIMULINK 5-9

5.3 Ausgewählte Blöcke der SIMULINK-Bibliothek

Die folgende Auswahl hat orientierenden Charakter. Für die Blocktypen werden neben der
Funktionsbeschreibung das Symbol, wie es im Browser und im konkreten Schema erscheint,
sowie das jeweilige Parametrierformular angegeben. In den Überschriften wird in Klammern die
Bezeichnung des Blocktyps, wie sie im Browser erscheint, angegeben.

5.3.1 Die Modellblöcke mit zeitkontinuierlichem Verhalten (Continuous)

‘ Differenzierer (Derivative)

Der Differenzierblock liefert als Ausgangssignal die Ableitung des Ein-


gangssignals.
Eine spezielle Parametrierung des Blockes ist nicht erforderlich.

‘ Integrierer (Integrator)

Der Integrierblock liefert als Ausgangssignal das Integral über das


Eingangssignal.
Der Block kann an unterschiedliche Situationen über das Parametrierfor-
mular angepasst werden. Das folgende Bild zeigt dieses Formular. Die
wichtigsten Eingabefelder werden im
Folgenden erläutert:

External reset:
Der Nutzer kann festlegen, ob der In-
tegrationsprozess bei Erscheinen eines
bestimmten Signals mit dem Anfangs-
wert beginnend fortgesetzt werden
soll.

Initial condition source:


In diesem Feld kann festgelegt wer-
den, ob der Anfangswert über das For-
mular angeben wird (internal), oder ob
ein zusätzlicher Port für den Anfangs-
wert vorzusehen ist (external).

Initial condition:
In diesem Feld wird der Anfangswert
für die Integration angegeben.
Die weiteren Felder sind bei begrenz-
ten Ausgangssignalen von Interesse.
5 - 10 SIMULINK

‘ Zustandsraummodell-Block (State-Space)

Dieser Blocktyp beschreibt das Verhalten eines linearen zeitkonti-


nuierlichen Übertragungsgliedes in der Zustandsraumdarstellung:

Die das Verhalten kennzeichnenden Matrizen sowie die Anfangswerte können über folgendes
Parametrierformular festgelegt werden:

‘ Übertragungsfunktion (Transfer Fcn)

Über diesen Blocktyp lässt sich das Verhalten eines linearen Über-
tragungsgliedes durch die Übertragungsfunktion beschreiben. Die
Übertragungsfunktion wird bei diesem Blocktyp durch Zähler- und
Nennerpolynom beschrieben. Für die Kennzeichnung des Übertra-
gungsverhaltens müssen die Polynomkoeffizienten als Vektoren gemäß der MATLAB-Konven-
tion angegeben werden.
SIMULINK 5 - 11

‘ Totzeitglied (Transport Delay)

Das Ausgangssignal ist das um eine festgelegte Totzeit verschobene Ein-


gangssignal.

Die einzelnen Felder besitzen fol-


gende Bedeutungen:

Time delay:
In diesem Feld wird die Totzeit im
Maßstab der Simulationszeit einge-
geben.
Initial input:
Der in diesem Feld vorgegebene
Wert wird zwischen dem Anfangs-
zeitpunkt und dem durch die Totzeit
markierten Zeitpunkt angenommen.
Initial buffer size:
Dieser Parameter stellt die maxima-
le Speicheranforderung für die Spei-
cherung der Zwischenwerte dar.
5 - 12 SIMULINK

‘ Übertragungsfunktion in Pol-Nullstellendarstellung (Zero-Pole)

Über diesen Blocktyp lässt sich das Verhalten eines linearen Über-
tragungsgliedes durch die Übertragungsfunktion beschreiben. Die
Übertragungsfunktion wird bei diesem Blocktyp durch ihre Nullstellen
und Pole (das sind die Nullstellen des Nennerpolynoms) sowie durch
einen Verstärkungsfaktor beschrieben. Die Übertragungsfunktion
nimmt damit die folgende Form an:

Die das Übertragungsverhalten kennzeichnenden Parameter können im folgenden Formular


festgelegt werden:

Die Eingabefelder haben folgende


Bedeutungen:

Zeros:
Die Nullstellen der Übertragungs-
funktion sind in Vektornotation an-
zugeben.

Poles:
Die Pole der Übertragungsfunktion
sind in Vektornotation anzugeben.

Gain:
Die Verstärkung K ist anzugeben.

Hinweis zu den Blöcken für Übertragungsfunktionen:

Die Blöcke zur Darstellung des Übertragungsverhaltens durch Übertragungsfunktionen (Zero-


Pole, Tranfer Fcn) können auch für Mehrgrößensysteme herangezogen werden. Für die Null-
stellen sind dann Matrixausdrücke zugelassen und für die Pole und die Verstärkung Vektoraus-
drücke.
SIMULINK 5 - 13

5.3.2. Modellblöcke mit unstetigem Verhalten (Discontinuities)

In diesem Unterverzeichnis der SIMULINK-Bibliothek sind Blöcke zu finden, die gewisse


unstetige Vorgänge nachzubilden gestatten. Hier sollen nur zwei Blöcke ausgewählt und be-
schrieben werden.

‘ Schalter mit Hysterese (Relay)

Dieser Schalter liefert ein oberes oder ein unteres konstantes Ausgangssignal, je
nachdem, ob das Eingangssignal größer oder kleiner als eine vorgegebene Schran-
ke ist. Diese Schranke kann sich für den Einschaltvorgang von der für den Aus-
schaltvorgang unterscheiden; damit kann eine Schalthysterese nachgebildet
werden.

Die Felder haben folgende Bedeutungen:

Switch on point:
Ab diesem Wert des Eingangssignals
wird der On-Outputwert angenommen.

Switch off point:


Ab diesem Wert des Eingangssignals
wird der off-Outputwert angenommen.

Output when on / Output when off:


Das sind die Werte am Ausgang des
Schalters, die in den betreffenden Schalt-
situationen angenommen werden.

‘ Begrenzer (Saturation)

Der Begrenzer lässt das Eingangs-


signal nur in einem definierten Be-
reich passieren. Wenn dieser Bereich
verlassen wird, so wird das Ausgangssignal durch
den vorgegebenen oberen bzw. unteren Grenzwert
ersetzt.
Die Blockparameter sind nebenstehender Darstel-
lung zu entnehmen.
5 - 14 SIMULINK

5.3.3 Die Modellblöcke für zeitdiskretes Verhalten (Discrete)

‘ Übertragungsfunktion eines zeitdiskreten Übertragungsgliedes


(Discrete Transfer Fcn)

Dieser Blocktyp gestattet die Beschreibung des Übertragungsverhaltens


eines zeitdiskreten Übertragungsgliedes durch seine Z-Übertragungsfunkti-
on. Dabei ist zu beachten, dass das Zähler- und das Nennerpolynom in
positiven Potenzen von z angenommen werden. Die Vektoren der
Polynomkoeffizienten werden, der MATLAB-Konvention entsprechend,
mit der höchsten Potenz beginnend angeordnet. Im Bild ist das Parametrierformular des
Blocktyps dargestellt.

Die Felder besitzen die folgenden Bedeutungen:


Numerator / Denominator:
In diese Felder sind die Koeffizienten des Zähler- bzw. Nennerpolynoms einzutragen.
Initial states
Festlegung der Anfangszustände.
Sample time:
In diesem Feld ist die Abtastzeit einzugeben. Wird in dieses Feld ein negativer Wert eingetragen,
so wird die Abtastzeit des Input-Blocks übernommen.
SIMULINK 5 - 15

‘ Übertragungsfunktion eines zeitdiskreten Übertragungsgliedes in Filter-Darstellung


( Discrete Filter )

Dieser Blocktyp gestattet die Beschreibung des Übertragungsverhaltens


eines zeitdiskr e te n Übe rtr a gungsglie de s dur c h se ine Z-
Übertragungsfunktion. Dabei ist zu beachten, dass das Zähler- und das
Nennerpolynom mit negativen Potenzen von z angenommen werden.
Die Vektoren der Polynomkoeffizienten werden auch hier, der
MATLAB-Konvention entsprechend, mit dem größten Exponenten (das
ist hier -1!) beginnend angeordnet.

Im nebenstehenden Bild
ist das Parametrierformu-
lar für den Blocktyp dar-
gestellt.
Numerator / Denomina-
tor:
In diese Felder sind die
Koeffizienten des Zähler-
bzw. Nennerpolynoms
einzutragen, wobei auf
die korrekte Ordnung der
Koeffizienten zu achten
ist.
Sample time:
In diesem Feld ist die Ab-
tastzeit einzugeben. Wird
in dieses Feld ein negati-
ver Wert eingetragen, so
wird die Abtastzeit des
Input-Blocks übernom-
men.

‘ Zeitdiskretes Zustandsraummodell ( Discrete State-Space )

Dieser Blocktyp beschreibt das Verhalten eines linearen zeitdiskreten


Übertragungsgliedes in der Zustandsraumdarstellung:
5 - 16 SIMULINK

Im nebenstehenden Bild ist das


Parametrierformular dargestellt.
A: , B: , C: , D:
Diese Felder nehmen die Matrizen der
Zustandsraumdarstellung auf.
Initial conditions:
In diesem Feld werden die Anfangs-
bedingungen vorgegeben.
Sample time:
Für die Vorgabe der Abtastzeit gelten
die gleichen Regeln wie für die ande-
ren zeitdiskreten Blocktypen.

‘ Speicherblock (Memory)

Der Speicherblock liefert als Ausgangssignal das Eingangssignal des vor-


angegangenen Zeittaktes.

Das Parametrierformular ist im


nebenstehenden Bild dargestellt.
Es ist nur ein Parameter vorzuge-
ben:

Initial condition:
In diesem Feld ist der Anfangs-
wert vorzugeben.
SIMULINK 5 - 17

‘ Verschiebungsblock (Unit Delay)

Dieser Blocktyp liefert als Ausgangssignal das um die festgelegte Abtastzeit


verschobene Eingangssignal (entspricht der Multiplikation des Eingangs-
signals mit z -1 im Z-Bereich)

Im nebenstehenden Bild ist das


Parametrierformular für den
Blocktyp dargestellt.
Initial condition:
In diesem Feld ist der Anfangs-
wert vorzugeben.
Sample time:
Für die Vorgabe der Abtastzeit
gelten die gleichen Regeln wie
für die anderen zeitdiskreten
Blocktypen.

‘ Halteglied 0-ter Ordnung (Zero-Order Hold)

Dieser Blocktyp realisiert das Halteglied 0-ter Ordnung. Das Eingangssignal


wird erfasst und über die Dauer der Abtastzeit gehalten; das Ausgangssignal
ist dieser gehaltene Signalwert.
Zur Parametrierung ist nur die Abtastzeit vorzugeben bzw. zu übernehmen;
es gelten die gleichen Regeln wie für die anderen zeitdiskreten Blocktypen.

< Beispiel Halteglied 0. Ordnung als Abtaster

Das SIMULINK-Schema beschreibt diese Abta-


stung eines Sinus-Signals. Im Scope-Fenster wird
das abgetastete Signal dargestellt.
5 - 18 SIMULINK

5.3.4. Blöcke für Mathematische Operationen (Math Operations)

Im Folgenden werden ausgewählte Modellblöcke des Unterverzeichnisses Math Operations


beschrieben; die Funktionalität der Blöcke dieser Gruppe erschließt sich in der Regel aus der
Bezeichnung des Blocktyps.

‘ Block zur Erfüllung algebraischer Bedingungen (Algebraic Constraint)

Dieser Blocktyp realisiert als Ausgangszustand das Signal, das sich


aus der Bedingung ergibt, dass das Eingangssignal den Wert Null
annimmt. Mit diesem Blocktyp lassen sich algebraische Gleichungen
mit Systemen von Differentialgleichungen verbinden.

Im Parametrierformular ist lediglich die An-


fangsschätzung für die Lösung vorzugeben
(Standardvorgabe: Null).

< Beispiel
Das folgende SIMULINK-Schema löst das lineare Gleichungssystem:
SIMULINK 5 - 19

‘ Skalarer Verstärker (Gain) / Matrix-Verstärker (Matrix Gain)

Bei diesen beiden Blocktypen wird das Ausgangssignal aus dem mit einem
Verstärkungsfaktor bzw. einer Verstärkungsmatrix multiplizierten Eingangs-
signal bestimmt. Beide Blocktypen lassen sich durch die Parametrierung
ineinander überführen. Obwohl die beiden Typen als separate Typen in der
Bibliothek enthalten sind, handelt es sich also um unterschiedlich voreinge-
stellte Versionen eines gemeinsamen Grundtyps.

Im folgenden Bild ist das Parametrierformular für diese Blocktypen dar-


gestellt:

Die Eingabefelder besitzen die


Bedeutungen:

Gain:
In diesem Feld sind der Verstär-
kungsfaktor bzw. die Ver-
stärkungsmatrix anzugeben.
Multiplication:
In diesem Feld wird die konkrete
Ausführung der Verstärkung ein-
gestellt. In der folgenden Tabelle
sind die Einträge der Pickliste
dieses Feldes und die zugehörigen
Funktionen angegeben.

Eintrag der Pickliste Beschreibung der Funktion


Element-wise (K.*u) Das Eingangssignal (Skalar, Vektor) wird elementweise mit K
multipliziert.
Matrix (K*u) Das Eingangssignal wird in der angegebenen Weise mit der
Verstärkungsmatrix multipliziert; der Input ist also der zweite
Operand.
Matrix (u*K) Das Eingangssignal wird in der angegebenen Weise mit der
Verstärkungsmatrix multipliziert; der Input ist hierbei der erste
Operand.
Matrix (K*u)(u vector) Das Eingangssignal wird in der angegebenen Weise mit der
Verstärkungsmatrix multipliziert; Eingang- und Ausgangssi-
gnal sind Vektoren.
5 - 20 SIMULINK

Als Eingangssignale können sowohl Skalare als auch Vektoren bzw. Matrizen auftreten. Der Typ
des Ausgangssignals hängt somit vom Typ des Eingangssignals und vom Typ der gewählten
Verknüpfung ab.

‘ Block für Standardfunktionen (Math Function)

Der Block liefert als Ausgangssignal den Wert der gewählten Standard-
funktion für das Argument, das durch das Eingangssignal gegeben ist.
Die Anzahl der Eingänge folgt aus der Anzahl der Argumente der gewählten
Standardfunktion (pow hat z.B. zwei Eingänge) .
Im folgenden Bild ist das Parametrierformular des Blocktyps angegeben:

Die einzelnen Datenfelder besitzen folgen-


de Bedeutung:
Function:
In dieser Pickliste ist der Funktionstyp aus-
zuwählen.
Output signal type:
In dieser Pickliste ist der gewünschte Typ
des Ausgangssignals auszuwählen. Die sich
für die einzelnen Funktionen ergebenden
Möglichkeiten sind der folgenden Tabelle
zu entnehmen:

‘ Block für trigonometrische Standardfunktionen (Trigonometric Function)

Der Block liefert als Ausgangssignal den Wert der gewählten trigonometrischen
Standardfunktion für das Argument, das durch das Eingangssignal gegeben ist.
Das Parametrierformular hat eine analoge Struktur wie das für die Standard-
funktionen. Folgende Funktionen werden im Feld Function angeboten:
sin, cos, tan,
asin, acos, atan, atan2,
sinh, cosh, tanh, cos + j sin
SIMULINK 5 - 21

‘ Minimum/Maximum-Auswahl (MinMax)

Mit Hilfe dieses Blocktyps lassen sich Minimum oder Maximum


• der Komponenten eines Signalvektors oder
• der Eingangssignale, wenn mehrere anliegen
bestimmen.

Im nebenstehenden Bild ist das Parame-


trierformular dargestellt:
Die Eingabefelder haben folgende Bedeu-
tungen:

Function:
In diesem Feld ist einzustellen, ob das
Minimum oder das Maximum zu bestim-
men ist.

Number of input ports:


In diesem Feld ist anzugeben, wie viele
Eingänge der Block haben soll.

‘ Summierer (Sum)

Dieser Blocktyp
liefert als Aus-
gangssignal die
Summe der Ein-
gangssignale.
Die Darstellung
kann zwischen
Kreis und Recht-
eck umgeschaltet werden.
Die Anzahl der Eingänge kann para-
metriert werden. Die Vorzeichen der
Summanden können ebenfalls para-
metriert werden, so dass mit diesem
Blocktyp auch die Differenzbildung
realisiert werden kann.
Im nebenstehenden Bild ist das Para-
metrierformular dargestellt.
5 - 22 SIMULINK

Die Eingabefelder besitzen folgende Bedeutungen:


Icon shape:
In dieser Pickliste kann man das Erscheinungsbild des Blocksymbols einstellen.
List of signs:
In diesem Feld kann man
S die Vorzeichenfolge der Eingänge angeben oder
S über eine ganze Zahl die Anzahl der Summiereingänge angeben (wenn diese Zahl Eins
ist, werden die Komponenten des Eingangsvektors addiert).

‘ Polynomfunktion (Polynomial)

Das Eingangssignal wird als Argument der durch den Block definierten
Polynomfunktion interpretiert; das Ausgangssignal ergibt sich als
zugehöriger Funktionswert. Das Polynom wird durch seinen Koeffi-
zientenvektor definiert, wobei gemäß MATLAB-Konvention die Koef-
fizienten von links nach rechts mit fallender Potenz angeordnet werden.
Im folgenden Bild ist das Parametrierformular dargestellt:

Es gibt nur das Eingabefeld:

Polynomial coefficients:
In diesem Feld ist der Vektor der Polynomkoeffizienten einzutragen.
SIMULINK 5 - 23

5.3.5. Blöcke für Signalverzweigungen (Signal Routing)

‘ Multiplexer (Mux)

Eine Multiplexer fasst mehrere Eingangssignale zu einem Ausgangssignal-Vektor


zusammen. Als Eingangssignale können skalare oder vektorielle Signale auftreten.
Die Anordnung der Vektorkomponenten folgt der Reihenfolge der Ports am Ein-
gang des Multiplexers.
Dieser Blocktyp eröffnet die Möglichkeit, für die Blocktypen, die Eingangssignal-
Vektoren zulassen, diese Vektoren flexibel zusammenstellen zu können.
Im folgenden Bild ist das Parametrierformular dargestellt:

Die Eingabefelder besitzen folgende


Bedeutungen:
Number of inputs:
In diesem Feld kann man die Anzahl
der Eingänge als ganze Zahl oder die
Liste der Namen der Eingänge einge-
ben.
Display option:
Über die Pickliste kann man das Er-
scheinungsbild des Blocks einstellen.

‘ De-Multiplexer (Demux)

Dieser Blocktyp ist der zum Multiplexer inverse Typ. Ein Eingangssignalvektor
wird in seine Komponenten zerlegt; diese Komponenten werden als separate
Ausgangssignale bereitgestellt. Dabei können die Ausgangssignale skalare Signale
oder Signalvektoren sein.

Im folgenden Bild ist das Parametrierformular dargestellt:

Number of outputs:
In diesem Feld werden Anzahl und
Struktur der Ausgangssignale festge-
legt.
Wenn die Eintragung mit der Anzahl
der Eingangssignal-Komponenten
übereinstimmt, so werden entspre-
chend viele skalare Ausgangssignale
erzeugt. Die Anzahl der Komponen-
ten bei vektoriellen Ausgangssignalen
kann als Dimensionsvektor vorgege-
ben werden.
5 - 24 SIMULINK

‘ Manuell zu bedienender Schalter (Manual Switch)

Der Schalter gestattet zwischen zwei Eingangssignalen umzuschalten. Das


jeweils aktive Eingangssignal wird zum Ausgangssignal. Die Umschaltung
erfolgt nach Doppelklick mit der linken Maustaste auf das Block-Symbol; die
Umschaltung ist auch während eines Simulationslaufs möglich. Eine Parame-
trierung ist nicht erforderlich.

‘ Bedingter Schalter (Switch)

Der Schalter gestattet zwischen zwei Eingangssignalen umzuschalten. Das


jeweils aktive Eingangssignal wird zum Ausgangssignal. Die Umschaltung
erfolgt zwischen dem ersten und dem dritten Eingangssignal in Abhängigkeit
davon, ob das zweite Eingangssignal eine vorgegebene Bedingung erfüllt oder
nicht. Ist die Bedingung erfüllt, wird der erste Eingang durchgeschaltet, sonst
der zweite. Im folgenden Bild ist das Parametrierformular dargestellt:

Criteria for passing first input:


In diesem Feld wird die Bedingung eingestellt. In den Bedingungen können Schranken als
numerische Werte eingeführt werden.
Threshold:
In diesem Feld ist der konkrete Werte der Schranke, die in der Bedingung auftreten kann,
festzulegen.
SIMULINK 5 - 25

5.3.6. Signalsenken-Blöcke (Sinks)

In diesem Unterverzeichnis sind die Anzeigeblöcke und die Abschlussblöcke für Signalfluss-
linien zusammengefasst. Diese Blöcke haben gemeinsam, dass sie nur Eingangssignale besitzen.

‘ Numerisches Display (Display)

Über Blöcke dieses Typs können die Momentanwerte des Ein


gangssignals in numerischer Form dargestellt werden. Das An-
zeigeformat ist parametrierbar. Im folgenden Bild ist das Parame-
trierformular dargestellt:

Die Felder besitzen folgende


Bedeutungen:
Format:
In diesem Feld wird das Format
der numerischen Anzeige einge-
stellt.
Decimation:
In diesem Feld wird angegeben,
aller wie vieler Simulationstakte
die Anzeige aufgefrischt werden
soll.

‘ Diagrammblock (Scope, Floating Scope)

Dieser Blocktyp
realisiert die gra-
fische Anzeige von
Signalverläufen.
Dabei kann die Zu-
ordnung der anzu-
z ei gen den S i gnal e d u r ch d i e
Signalflusslinie fest vorgegeben wer-
den (Blocktyp Scope) oder variabel
vor einem Simulationslauf durch
Auswahl festgelegt werden (Blocktyp
Floating Scope). Beide Formen las-
sen sich (durch das Setzen/Rücksetz-
en eines Auswahlschalters) ineinan-
der überführen. Das Anzeigefenster
wird durch Doppelklick mit der lin-
ken Maustaste auf das Blocksymbol
geöffnet. Das Fenster hat nebenste-
hendes Erscheinungsbild.
5 - 26 SIMULINK

‚ Toolbar des Anzeigefensters


Das Anzeigefenster besitzt ein Toolbar, über dessen Schalter verschiedene Funktionen aktiviert
werden können. Im folgenden Bild werden die wichtigsten Schalter erläutert:

Druck des Diagramms


Aktivieren des Parametrierformulars
Zoom-Schalter
Schalter für die automatische Achsenskalierung
Schalter für Floating Scope

‚ Parametrierformular

Wenn man den nebenstehend abgebildeten Schalter des Toolbar anklickt,


erscheint das unten dargestellte Parametrierformular für ein Diagrammfenster.
Das Formular hat drei Unter-Formulare: General, History und Style

Nebenstehend ist das Unter-Formular


General abgebildet. Im Folgenden
werden die wichtigsten Felder in ihrer
Bedeutung erläutert:

Number of axes:
In diesem Feld wird die Anzahl der
Ordinatenachsen angegeben. Das
Diagrammfenster wird in eine ent-
sprechende Anzahl von Diagrammen
zerlegt. Diese haben alle die gleiche
Zeitachse aber unterschiedliche Ordi-
naten. Es ist zu beachten, dass die
Anzahl der Achsen mit der Anzahl
der Scope-Ports übereinstimmen
muss.

Time range:
In diesem Feld wird der Zeitbereich modifiziert. Wenn die Zeichenkette auto eingetragen wird,
wird der Standard-Zeitbereich der Simulation angenommen.
Tick labels:
Über dieses Feld kann die Achsenbeschriftung ein- oder ausgeschaltet werden.
SIMULINK 5 - 27

Sampling:
In diesem Feld kann eingestellt werden, ob alle berechneten Werte dargestellt werden sollen
oder ob nur jeder n-te Wert darzustellen ist. Im letzteren Fall ist Decimation in der Pickliste
auszuwählen und der Faktor n ist im benachbarten Feld anzugeben. Sollen alle Werte dargestellt
werden, ist in diesem Feld Sample time auszuwählen.
floating scope:
Wenn dieser Schalter gesetzt wird, so wird das Anzeigegerät zum Floating Scope deklariert.
Umgekehrt kann durch Rücksetzen der Typ Scope eingestellt werden.

Im folgenden Bild ist das Unter-Formular History dargestellt:

Dieses Formular dient der Steuerung


der Menge der gespeicherten Daten.
Im Folgenden werden die EIngabe-
felder in ihrer Beduetung erläutet.

Limit data points to last:


Wird dieser Schalter gesetzt, so wer-
den nur die letzten n Datenpunkte zur
Anzeige gebracht; der Parameter n
wird im benachbarten Feld angege-
ben.

Save data to workspace:


Wird dieser Schalter gesetzt, so werden die Daten im Workspace unter dem dann anzugebenden
Namen abgelegt. In diesem Falle sind auch die folgenden Eingabefelder relevant:

Variable name: Der Name der Variablen, unter der die Ergebnisse abzulegen sind, wird
angegeben.

Format: In diesem Feld kann die Art der Speicherung gewählt werden. Drei
Formate sind vorgesehen:
Array: Die Verläufe werden im Matrix-Format abgespei-
chert.
Structure with time: Die Verläufe werden in einer Struktur abgespei-
chert; die Zeit wird in einem Datenfeld abgelegt.
Structure: Die Verläufe werden in einer Struktur abgespei-
chert; die Zeit wird nicht abgelegt.

Das dritte Unter-Formular Style dient der Festlegung der Darstellungen der einzelnen Kurven im
Diagrammfenster. Das Formular erscheint wie folgt:
5 - 28 SIMULINK

Über die Picklisten des ersten


Abschnittes lässt sich das Erschei-
nungsbild des Diagrammfensters ein-
stellen.

Die Picklisten des zweiten Abschnit-


tes erlauben, die Farbe, den Stil, die
Linienstärke und die Darstellung oh-
ne/mit Marker der einzelnen Kurven
zu verändern. Der Index des betref-
fenden Signalverlaufs ist als erstes
festzulegen.

Es gelten folgende Standardfestlegungen:


< Linientyp: Durchgezogene Linie
< Linienstärke: 0.5
< Marker: keiner
< Linienfarbe: Für die Signallinien werden folgende Standardfarben vergeben (Wenn
mehr als sechs Komponenten angezeigt werden sollen, wiederholt sich
dieser Zyklus.):
Linienindex Farbe
1 gelb
2 violett
3 zyanblau
4 rot
5 grün
6 dunkelblau

‚ Achsenskalierung

! Skalieren über das Skalierformular


Durch Anklicken der Achsen mit der rechten
Maustaste wird das nebenstehende Formular
geöffnet.
In die Min/max-Felder sind die unte-
ren/oberen Achsenbegrenzungen einzutragen.
Im Feld Title ist die Zeichenkette
%<SignalLabel>
durch die Achsenbezeichnung zu ersetzen.
SIMULINK 5 - 29

! Skalieren über die Schalter des Toolbar


Jedes Diagrammfenster besitzt ein Toolbar, über dessen Schalter bestimmte Funktionen
aktiviert werden können. Dazu gehören auch Skalierfunktionen; die entsprechenden
Schalter sind (als Ausschnitt des Toolbar) im folgenden Bild dargestellt:.

Über den ersten Schalter wird die Zoomfunktion für einen rechteckigen Bereich akti-
viert. Mit dem Mauszeiger kann im Diagrammbereich ein beliebiger Bereich markiert
werden, auf den dann die Diagrammdarstellung vergrößert wird.
Wenn der zweite Schalter aktiv ist, kann ein Bereich in Richtung der Zeitachse mit dem
Mauszeiger markiert werden; dieser Bereich wird der Darstellung zu Grunde gelegt.
Wenn der dritte Schalter aktiv ist, kann ein Bereich in Richtung der Ordinate mit dem
Mauszeiger markiert werden; dieser Bereich wird der Darstellung zu Grunde gelegt.
Mit Anklicken des vierten Schalters wird die automatische Skalierung hergestellt.; die
Achsenskalierung wird so gewählt, dass die grafischen Verläufe optimal den Diagramm-
bereich ausfüllen.

‚ Signal-Selektion (bei Floating Scope)

Für den Fall, dass der Diagrammblock als Floating Scope betrieben wird, sind die Zuordnungen
zwischen dem Block und den anzuzeigenden Signalverläufen vor einem Simulationslauf
festzulegen.
Im Toolbar des Diagrammfensters gibt es einen Schalter, mit dem der Blocktyp von Scope in
Floating Scope umgestellt werden kann.

Für die Parametrierung eines Floating Scope - Blockes ist ein Parametrierformular erforderlich.
Dieses kann über den entsprechenden Schalter des Diagramm-Toolbar aktiviert werden. Das
Formular kann auch über das Popup-Menü im Diagrammfenster aktiviert werden; der Menü-
punkt hat die Bezeichnung Signal selection.

Das Formular hat die im folgenden Bild dargestellte Struktur:


5 - 30 SIMULINK

Im linken Teilfenster wird die Modellhierarchie, die die evt. vorhandene Schachtelung der
Modellblöcke darstellt (im Beispiel gibt es nur eine Ebene) angezeigt. Es ist die gewünschte
Modellebene auszuwählen.
Im rechten Teilfenster werden die Signale angezeigt, die für eine Anzeige im Diagramm zur
Auswahl stehen. Durch das Setzen der Auswahlschalter werden die darzustellenden Signale
gekennzeichnet. In der hinter List contents: erscheinenden Pickliste kann die Liste der angebote-
nen Signale gefiltert werden. Die bezüglich der einzelnen Signale darzustellenden Details lassen
sich über die Schaltelemente steuern.

‘ XY-Diagrammblock (XY Graph)

Dieser Blocktyp gestattet


die Darstellung einer
Funktion, wobei sowohl
Abszissen als auch Ordi-
nate durch Eingangssi-
gnale vorgegeben werden. Das Ergebnis-
diagramm wird automatisch erzeugt und
ist in seinem Format praktisch vorgege-
ben. Im nebenstehenden Bild ist das Para-
metrierformular eines XY-Diagramm-
blocks dargestellt.

Die Bedeutungen der Eingabefelder er-


klären sich aus den Beschriftungen, so
dass hier nicht weiter darauf eingegangen
werden muss.
SIMULINK 5 - 31

‘ Stop-Block (Stop Simulation)

Dieser Block führt zum Abbruch der Simulation, wenn sein Eingang einen
Wert verschieden von Null aufweist. Wenn der Eingang ein Signalvektor ist,
so reicht es für den Abbruch der laufenden Simulation aus, dass eine Kompo-
nente verschieden von Null ist.

‘ Abschlussblock (Terminator)

Dieser Blocktyp ist dann nützlich, wenn Signalflusslinien auftreten, die keinen
Abschluss als Eingangssignale anderer Blöcke finden. Diese „offenen“ Signal-
flusslinien erzeugen bei der Simulation eine Warnung. Durch Abschluss mit
einem Terminator lassen sich diese Meldungen unterdrücken.

‘ Speichern in eine Datei (To File)

Die Eingangssignalwerte werden als Matrix in ein MAT- File geschrie-


ben. Die Matrix ist wie folgt strukturiert:

Im nebenstehenden Bild ist das Para-


metierformular dargestellt. Die Ein-
gabefelder sind:

Filename:
Name der Datei, in die die Matrix
gespeichert werden soll.

Variable name:
Name der Matrix, in die die Daten
geschrieben werden.
5 - 32 SIMULINK

Save format:
Es gibt folgende Speicher-Formate:
Array - Die Daten werden in Matrixform wie folgt abgespeichert

Dieses Format ist nur für reelle Vektoren anwendbar.

Timeseries:
Die Daten werden als MATLAB-Timeseries Objekte gespeichert. Dieses Format ist für beliebi-
ge Datentypen anwendbar.
Decimation:
In diesem Feld kann angegeben werden, aller wie vieler Takte die Werte gespeichert werden
sollen.

‘ Schreiben in den Workspace (To Workspace)

Dieser Blocktyp realisiert die Übertragung des Eingangsvektors in den


Workspace. Die Darstellung kann dabei in unterschiedlichen Formaten
erfolgen. Das Parametrierformular ist im folgenden Bild dargestellt:

Variable name:
Unter dem hier eingetragenen Namen
wird der Eingangsvektor des Blocks
im Workspace abgelegt.

Limit data points to last:


Liegen mehr Datensätze vor, als in
diesem Feld angegeben, so werden nur
die letzten n Sätze übertragen (n ist der
Eintrag im Feld).

Die Felder Decimation: und Save for-


mat: sind in ihren Bedeutungen den
entsprechenden Feldern des To File-
Blocktyps vergleichbar.
SIMULINK 5 - 33

5.3.7. Signalquellen-Blöcke (Sources)

‘ Block zur Erzeugung eines weißen Rauschsignals (Band-Limited White Noise)

Mit diesem Blocktyp lässt sich ein Signal erzeugen, das näherungsweise dem
Modell des weißen Rauschens folgt. Es wird eine Zufallsfolge erzeugt, die den
„Korrelationshorizont“ berücksichtigt. Für das „ideale“ weiße Rauschen hat
dieser den Wert Null. Da sich das technisch nicht realisieren lässt, wird der
Horizont zwar endlich aber sehr viel klei-
ner als die kleinste Zeitkonstante gewählt.

Noise power:
Dieser Parameter beschreibt die konstante
Leistungsdichte des Signals.
Sample time:
Dieser Parameter definiert den Korrela-
tionshorizont. Er sollte wie folgt gewählt
werden:

‘ Uhrzeit-Block (Clock)

Dieser Blocktyp liefert


als Output die Simula-
tionszeit. Es ist nützlich
für Blöcke, die die
Simulationszeit als Ein-
gangssignal benötigen.
Im folgenden Bild ist das Parametrier-
formular dargestellt:
Display time:
Ist der Schalter gesetzt, so wird im
Block die aktuelle Simulationszeit ange-
zeigt.
Decimation:
Der Faktor in diesem Feld bestimmt, aller wie vieler Takte die Zeit aktualisiert wird.

‘ Digitaluhr-Block (Digital Clock)

Dieser Blocktyp liefert die Simulationszeit in einem durch den Parameter


Sample time im Parametrierformular festgelegten Zeitraster.
5 - 34 SIMULINK

‘ Konstanten-Block (Constant)

Mit diesem Blocktyp werden Konstanten erzeugt. Es können Skalare, Vektoren


und Matrizen definiert werden. Im folgenden Bild ist das Parametrierformular
dargestellt.

Constant value:
In diesem Feld wird der Wert der Konstan-
ten angegeben. Die Darstellung bestimmt
den Typ der Konstanten.

Interpret vector parameters as 1-D:


Ist dieser Schalter gesetzt, wird der Inhalt
von Constant value wie ein eindimensiona-
les Feld behandelt.

‘ Rampenfunktion-Block (Ramp)

Durch diesen Blocktyp lassen sich Rampenfunktionen erzeugen. Das Parame-


trierformular ist im folgenden Bild dargestellt:

Slope:
Dieser Parameter gibt den Anstieg der Gera-
den an.
Start time:
Dieser Parameter markiert den
Startzeitpunkt, mit dem der lineare Anstieg
des Ausgangssignals beginnt.
Initial output:
Dieser Parameter gibt den Anfangswert das
Ausgangssignals an.

‘ Leerblock (Ground)

Mitunter besitzen Blöcke Eingangsports, die für ein aktuelles Problem nicht
benötigt werden. Diese offenen Ports verursachen Warnungen zur Laufzeit.
Sollen diese vermieden werden, sind diese Ports mit einem Block des Leer-
blocktyps zu verbinden. Dieser Block erzeugt Signale mit dem konstanten
Wert Null, wobei das Format des Eingangsports vom Leerblock realisiert
wird.
SIMULINK 5 - 35

‘ Sprungfunktions-Block (Step)

Dieser Blocktyp dient der Realisierung von Sprungfunktionen. Im folgenden


Bild ist das Parametrierformular dargestellt:

Step time:
Dieser Parameter gibt an, zu welchem
Zeitpunkt der Sprung ausgeführt werden
soll.

Initial value:
Dieser Parameter beschreibt den Wert
des Ausgangssignals vor dem Sprung.

Final value:
Dieser Parameter beschreibt den Wert
des Ausgangssignals nach dem Sprung

‘ Sinusfunktions-Block (Sine Wave)

Dieser Blocktyp reali-


siert ein Ausgangs-
signal, das einer Sinus-
Funktion folgt:

Die Parameter werden im Zusammenhang


mit dem Parametrierformular, das im fol-
genden Bild dargestellt ist, erläutert:

Sine type:
Dieser Parameter bestimmt die Art der
Funktionsberechnung.
Time (t):
Dieser Parameter gibt an, ob als Zeitmaß
die Simulationszeit oder eine externe Uhr
verwendet werden soll. Im letzteren Fall
wird ein Input-Signal angezeigt.
5 - 36 SIMULINK

Amplitude:
Dieser Parameter spezifiziert den Wert von A.
Bias:
Dieser Parameter spezifiziert den Wert von b.
Frequency:
Dieser Parameter spezifiziert den Wert von ù.
Phase:
Dieser Parameter spezifiziert den Wert von ö.
Sample time:
Dieser Parameter ist nur für den Berechnungsmodus Sample-based von Bedeutung.

‘ Block zur Erzeugung normalverteilter Zufallszahlen (Random Number)

Blöcke dieses Typs erzeu-


gen normalverteilte Zu-
fallszahlen. Das Parame-
trierformular ist im folgen-
den Bild dargestellt:

Mean:
In diesem Feld wird der Erwartungswert der
normalverteilten Zufallsgröße vorgegeben.
Variance:
In diesem Feld wird die Varianz der normal-
verteilten Zufallsgröße vorgegeben.
Seed:
Hier wird der Anfangswert der normalverteil-
ten Folge vorgegeben.

‘ Block zur Erzeugung gleichverteilter Zufallszahlen (Uniform Random Number)

Blöcke dieses Typs erzeu-


gen gleichverteilte Zufalls-
zahlenfolgen. Das Parame-
trierformular ist im folgen-
den Bild dargestellt:

Minimum: / Maximum:
In diesen Feldern werden die Grenzen des
Intervalls angegeben, innerhalb dessen die
Werte der gleichverteilten Zufallsgröße liegen
sollen.
Seed:
Dieser Parameter beschreibt den Anfangs-
wert, mit dem die Zufallsfolge beginnt.
SIMULINK 5 - 37

‘ Signalgenerator-Block (Signal Generator)

Blöcke dieses Typs können für die Erzeugung periodischer Signale, die unter-
schiedlichen Klassen angehören können, eingesetzt werden.
Im folgenden Bild ist das Parametrierformular dargestellt:

Wave form:
Über diese Pickliste kann die
Signalform ausgewählt wer-
den. Folgende Einträge sind
vorhanden:
sine
Es wird ein sinusförmiges Si-
gnal erzeugt.
square
Es werden angenäherte Recht-
eckimpulse erzeugt.
sawtooth
Es wird ein sägezahnförmiges
Signal erzeugt.
random
Es wird ein Zufallssignal er-
zeugt.

Time (t)
Dieser Parameter gibt an, ob als Zeitmaß die Simulationszeit oder eine externe Uhr verwendet
werden soll. Im letzteren Fall wird ein Input-Signal angezeigt.

Amplitude: /Frquency:
Diese Parameter spezifizieren Amplitude und Frequenz des Ausgangssignals. Über das Feld
Units kann eingestellt werden, ob die Frequenz oder die Kreisfrequenz vorgegeben werden soll.

‘ Lesen aus einer Datei (From File)

Dieser Blocktyp ist das Gegenstück zum Blocktyp „Schreiben in


eine Datei“. Er realisiert das Lesen von Daten aus einem MAT-File.
Die Einträge in der Datei beschreiben die Werte der Ausgangssigna-
le.
Die Parameterfelder im unten dargestellten Parametrierformular besitzen folgende Bedutungen:
File name:
Name (einschließlich einer evt. notwendigen Pfadangabe) des .MAT-File, das die Daten enthält.
Outpu data type:
Hier wird der Typ der Daten gewählt, die der Block als Output-Daten leifert. Mit dem Standard-
Eintrag Inherit: auto wird der Typ aus der Darstellung der Daten in der Datei abgeleitet; eine
Typ-Überprüfung findet nicht statt. Wird dagegen ein konkreter Datentyp ausgewählt, wird ein
Typ-Test ausgeführt. Über den dem Parameterfeld folgenden Schalter >> kann ein Assistent zur
5 - 38 SIMULINK

Unterstützung für die Wahl des Daten-


typs aktiviert werden.

Werden die Daten in Matrixform be-


reitgestellt, so wird die folgende Dar-
stellung erwartet:

Sample time:
Der Standardwert 0 setzt eine kontinu-
ierliche Zeit voraus.

Data extrapolation/interpolation ...


Her können die Extrapolations- bzw.
Interpolationsmethoden gewählt wer-
den, die anzuwenden sind, wenn das
Zeitraster der Daten und die Simula-
tionszeitpunkte nicht zusammenfallen.

‘ Lesen vom Workspace (From Workspace)

Dieser Blocktyp ist das Gegenstück zum Blocktyp „Schreiben in den


Workspace“. Die Daten, die in unterschiedlichen Formaten bereit-
gestellt werden können, werden aus dem Workspace übertragen; sie
bilden die Ausgangssignale des Blockes.
Wenn die Daten im Array-Format bereitstehen, müssen sie so strukturiert sein, wie im Falle des
From File-Blocktyps beschrieben. Sollen Matrixdaten geladen werden, so müssen sie als Struk-
tur bereitgestellt werden, wobei das erste Datenfeld die Zeit und das zweite die Daten für den
jeweiligen Zeitpunkt enthält. Für skalare oder vektorielle Ausgangssignale kann das Feld- oder
das Strukturformat genutzt werden.

Im unterstehenden Bild ist das Parametrierformular dargestellt. Die einzelnen Parametrierfelder


besitzen folgende Bedeutungen:

Data:
In diesem Feld wird der Name der zu übertragenden Datenstruktur, den diese im Workspace hat,
angegeben.
SIMULINK 5 - 39

Outpu data type:

Hier wird der Typ der Da-


ten gewählt, die der Block
als Output-Daten leifert.
Mit dem Standard-Eintrag
Inherit: auto wird der Typ
aus der Darstellung der Da-
ten in der Datei abgeleitet;
eine Typ-Überprüfung fin-
det nicht statt. Wird dage-
gen ein konkreter Datentyp
ausgewählt, wird ein Typ-
Test ausgeführt. Über den
dem Parameterfeld folgen-
den Schalter >> kann ein
Assistent zur Unterstützung
für die Wahl des Datentyps
aktiviert werden.

Interpolate data:
Ist dieser Schalter gesetzt,
so wird zwischen den Si-
gnalstützstellen interpoliert,
wenn zur Simulationszeit
Zwischenwerte benötigt
werden. Ist der Schalter
nicht gesetzt, so wird der
nächstgelegene Zeitpunkt
als Näherung herangezogen.

Form output after final data value by:


Aus dieser Pickliste ist die Methode auszuwählen, die anzuwenden ist, wenn die Simulationszeit
den vorgegebenen letzten Zeitpunkt überschreitet.

Die Einträge und ihre Bedeutungen sind der folgenden Tabelle zu entnehmen:

Elemente der Liste Funktionen


Extrapolation Von den letzten Werten ausgehend wird der weitere
Signalverlauf extrapoliert.
Setting to zero Die Signalwerte werden auf Null gesetzt.
Holding final value Die letzten Signalwerte werden festgehalten.
Cyclic repetition Die Signalverläufe werden zyklisch wiederholt.
5 - 40 SIMULINK

5.3.8. Nutzerdefinierte Blöcke (User-Defined Functions)

‘ Nutzerdefinierte Funktion (Fcn)

Mit diesem Blocktyp können spezifische Funktionen, die die Verknüpfung


zwischen Ein- und Ausgangssignal beschreiben, definiert werden. Das
Ausgangssignal ist in jedem Falle ein Skalar.
Es sind die folgenden Regeln für die Bildung der Ausdrücken, die die Ein-
gangssignale zum Ausgangssignal verknüpfen, zu beachten:

! Als Eingangssignale sind Skalare, die in den Ausdrücken mit u bezeichnet werden
müssen, oder Vektoren zugelassen, deren Komponenten in den Ausdrücken mit u(1),
u(2) ... zu bezeichnen sind. Der Bezeichner u steht entweder für ein Skalar oder für das
erste Element von u (also für u(1)).
! Folgende Operatoren sind innerhalb der Ausdrücke zugelassen:
< Numerische Konstanten.
< Aritmetische Operatoren (+ - * /)
< Vergleichsoperatoren ( == != < > <= >=). Der Ausdruck liefert den Wert 1,
wenn der Vergleich zutrifft, sonst liefert er den Wert 0.
< Logische Operatoren (&& || !) Zur Bildung logischer Ausdrücke. Die logischen
Ausdrücke liefern 1, wenn sie wahr sind, sonst liefern sie den Wert 0.
< Klammern.
< Standardfunktionen (abs, acos, asin, atan, atan2, ceil, cos, cosh, exp, floor,
hypot, log, log10, power, rem, sgn (äquivalent zu sign in MATLAB), sin, sinh,
sqrt, tan, and tanh).
! In den Ausdrücken können Variable, die im Workspace gespeichert sind, verwendet
werden. Bei Vektoren und Matrizen muss auf einzelne Elemente Bezug genommen
werden.

Das Parametrierformular des Blocktyps ist im folgenden Bild dargestellt:

Expression:
In dieses Feld ist der Aus-
druck, der die Berechnung des
Ausgangssignals aus den Ein-
gangssignalen beschreibt, ein-
zutragen.
SIMULINK 5 - 41

‘ Nutzerdefinierte MATLAB-Funktion (MATLAB Function)

Mit diesem Blocktyp können MATLAB-Funktionen,


die die Verknüpfung zwischen Ein- und Ausgangs-
signal beschreiben, definiert werden. Diese Beschrei-
bung basiert auf den Elementen der Programmier-
sprache MATLAB. Doppelklick auf das Blocksym-
bol öffnet den Function-Script-Editor; für einen lee-
ren Block hat dieser die folgende Gestalt:

Die Outputsignale entsprechen den Er-


gebnisparametern der Funktion und die
Inputsignale den Eingangsparameter.

< Beispiel: Berechnung des Mittelwertes der Komponenten eines Vektors


5 - 42 SIMULINK

Das SIMULINK-Schema zeigt die Verknüpfung des MATLAB-Funktionsblocks mit Ein- und
Ausgangsblöcken.
Das Ergebnis der Abarbeitung des Modells ist zu erkennen.

Die MATLAB-Funktion erscheint im Editor in folgender Gestalt:

5.3.9 Erzeugen von Subsystemen (Ports & Subsystems)

Die Subsysteme in Simulink sind das blockorientierte Äquivalent zu den Unterprogrammen in


der textorientierten Programmierung. Innerhalb eines vorhandenen Modells können Blöcke zu
Subsystemen zusammengefasst werden, wobei das Subsysteme im Modell als einzelner Block
erscheint. Es kann aber auch ein Subsystem als eigenständiger Block entwickelt werden. Die in
die Subsysteme eintretenden bzw. aus ihnen austretenden Signale werden im Subsysteme durch
Ports dargestellt. Über diese Port können dann beim Einfügen des Subsystems in ein Modell die
konkreten Input- bzw. Outputsignale zugeordnet werden. Im Folgenden werden lediglich
ausgewählte, besonders häufig anzutreffende Fälle der Subsystem-Technik von Simulink
dargestellt. Für eine umfassende Information sind die Originaldokumentation und die Online-
Hilfe heranzuziehen.

Wenn innerhalb eines existierenden Schemas ein Subsystem durch Zusammenfassung von
bestimmten Blöcken erzeugt werden soll, ist wie folgt zu verfahren:
SIMULINK 5 - 43

S Die zum Subsystem zusammenzufassenden Blöcke sind durch den Mauszeiger (bei
gedrückter linker Maustaste) als rechteckiger Bereich zu markieren.
S Wenn die linke Maustaste gelöst wird, erschein ein (blau hinterlegtes) Toolbar für die
Erzeugung des Subsystems. Das erste Button bewirk die Erzeugung eines (einfachen)
Subsystems.
S Wird dieses Button gewählt, so werden die markierten Blöcke zum Subsystem zu-
sammengefasst und erscheinen im aktuellen Modell als ein einzelner Block.
S Durch Doppelklick auf den Subsystemblock wird die innere Struktur des Subsystem-
blocks in einem neuen Fenster zur detaillierten Anzeige bringen; in diesem Fenster kann
der Block auch intern weiter editiert werden. Die ein- bzw. austretenden Signale werden
durch Ports dargestellt.

< Beispiel

Im dargestellten Mo-
dell sollen der Block
für eine nutzerdefi-
nierte Funktion und
der Integrator zu ei-
nem Subsystem zu-
sammengefasst wer-
den.

Es wird der recht-


eckige Bereich abge-
grenzt, der die beiden
Blöcke umfasst. Es
erscheint das
Auswahl-Button für
die Erzeugung des
Subsystems (Create
Subsystem)
5 - 44 SIMULINK

Nach Ausführung der


Funktion erscheint
nebenstehende Dar-
stellung.
Das Subsystem ver-
h ält sich wi e ei n
Block; es könnte nun
auch kopiert und ein-
gefügt werden.

Wird das Subsystem


doppelt angeklickt, so
erscheint nebenste-
hendes Bild. Es ist zu
erkennen, dass es sich
um die innere Struk-
tur handelt. Die Ein-
und Ausgänge werden
durch die Ports In1
und Out1 dargestellt.

Wenn man den Subsystem-Block auswählt und das Popup-Menü mit der rechten Maustaste
aktiviert, findet man den Menüpunkt Subsystem & Model Refernce. Dieser Menüpunkt aktiviert
ein weiteres Untermenü. In diesem findet man den Menüpunkt Expand Subsystem. Wird dieser
Menüpunkt aktiviert, so wird das Subsystem mit den konkreten Eingangs und Ausgangssignalen
komplett in seiner Block-Struktur in das Modell eingefügt.

In der Blockbibliothek-Gruppe Ports & Subsystems findet man unter anderem die folgenden
Blocktypen, mit deren Hilfe Subsysteme direkt entwickelt werden können.

‘ Definition eines Subsystems


Dieser Blocktyp erlaubt die Definition eines Subsystems durch
Nutzung der Blockbibliothek. Nach Doppelklick auf den Block
erscheint das folgende Fenster, das ein “leeres” Subsystem
bereitstellt:
SIMULINK 5 - 45

Das “leere” Subsystem besteht aus


einem “Kurzschluss” zwischen
dem Inputsignal und dem Output-
signal.

Das leere Subsystem lässt sich nun


wie ein eigenständiges
SIMULINK-Modell weiterentwi-
ckeln. Dafür steht die Blockbibli-
othek zur Verfügung. Im Bild wird
das gleiche Beispiel-Subsystem wie
oben dargestellt.

Das Subsystem erscheint als eigen-


ständiger Block im übergeordneten
Modell. Auch für diesen Block gibt
es im Popup-Menü den Menüpunkt
zur Expansion des Subsystems.
5 - 46 SIMULINK

‘ Definition eines Inputports

Dieser Blocktyp definiert ein Inputsignal innerhalb eines Subsystems. Im


Subsystemblock können dann aktuelle Signale über diesen Port auf das
Subsystem wirken.

Im Parametrierformular kann die Portnummer vorgege-


ben werde. Außerdem kann die Anzeige zwischen
Portnummer und Signalnamen umgeschaltet werden
(Pickliste Icon display).

‘ Definition eines Outputports

Dieser Blocktyp definiert ein Outputsignal innerhalb eines Subsystems.


Der Subsystemblock liefert über diesen Port aktuelle Signale, die im
Rahmenmodell weiter verarbeitet werden können.

Die Bedeutungen der Parameterfelder entsprechen


denen im oben angegebenen Formular für den Input-
port.
SIMULINK 5 - 47

5.4 Start und Verfolgung eines Simulationslaufs


5.4.1 Der Menüpunkt Simulation

Im folgenden Bild ist ein SIMULINK-Arbeitsblatt dargestellt, bei dem der Menüpunkt Simu-
lation aufgeblättert wurde.

Über die folgenden Menüpunkte wird der Ablauf einer Simulation gesteuert:

S Run: Die Simulation wird gestartet.


S Step Foorward Ausführung eines Simulationsschrittes.
S Stop: Die Simulation wird abgebrochen.

Im Toolbar sind für diese Funktionen auch Schal-


ter verfügbar. Im nebenstehenden Bild ist der Aus-
schnitt der Werkzeugleiste dargestellt, der diese
Schalter enthält.

Stop-Button (wird während der Simulation aktiv)


Ausführung eines Simulationsschrittes
Run-Button
Aktivierung des Parametrierformulars für den Schrittbetrieb
5 - 48 SIMULINK

Wenn die Simulation läuft, so ändert das Run-Button seine Funktion; er wird zum Pause-
Schalter. Das wird dadurch angezeigt, dass das Symbol zu zwei senkrechten Balken verändert
wird. Wenn man den Pauseschalter betätigt, so wird die Simulation angehalten, kann aber
jederzeit über das Run-Button fortgesetzt werden.

5.4.2 Der Browser für die Simulationsparameter

Über den Menüpunkt Model Configuration Parameters im


Simulation-Menü können verschiedene Einstellungen, die sich
auf die Ausführung der Simulation beziehen, verändert werden.
Es erscheint ein Browser-Fenster, über das der Zugang zu den
Simulationsparametern ermöglicht wird.

Das Browser-Fenster kann auch über dieses Button aktiviert werden.

Das Erscheinungsbild des Browser wird im folgenden Bild mit der Seite Solver dargestellt:

Im linken Fenster kann zwischen den einzelnen Seiten navigiert werden; im rechten Fenster
werden die jeweils ausgewählten Seiten mit den zugehörigen Parametrierfeldern dargestellt.
Wie aus der Abbildung zu erkennen ist, gestattet diese Formularseite Solver die Einstellung der
Rahmenbedingungen eines Simulationslaufs, insbesondere die
S Vorgabe des Zeitintervalls für die Simulation,
S Einstellung des Integrationsverfahrens,
S Parametern für das Integrationsverfahren.
Wenn sich in einem Feld der Eintrag auto befindet, so wird der Parameter vom System vor-
gegeben.
SIMULINK 5 - 49

Die folgende Seite erlaubt die Wahl der Systemreaktionen in gewissen Ausnahmensituation. Die
voreingestellten Reaktionen (warning, error, non) können über die Items der Picklisten geändert
werden.

5.5 S-Funktionen1

Für komplexere Problemstellungen ist es mitunter notwendig, dass ein Algorithmus als
SIMULINK-Block zu realisieren ist, der sich nicht aus den vorhandenen Blöcken der Bibliothek
zusammensetzen lässt. Derartige Blöcke heißen S-Funktionen. Der von einer S-Funktion zu
realisierende Algorithmus ist nach bestimmten Regeln als MATLAB- oder C-Funktion zu
programmieren.

1
Hierfür gibt es das spezielle Handbuch “Developing S-Functions”.

Das könnte Ihnen auch gefallen