Sie sind auf Seite 1von 182

TECHNISCHE UNIVERSITÄT DRESDEN Fakultät Maschinenwesen Institut für Verfahrenstechnik & Umwelttechnik Professur für Verfahrensautomatisierung

HANDBUCH

MATLAB & SIMULINK

zum Gebrauch in den Lehrveranstaltungen

des Vertiefungsfachs

Verfahrensautomatisierung

Dresden, Oktober 2009

Prof. 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. Die folgenden Tool-Boxes sind am Institut 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 die Version 6 und für SIMULINK die Version 4 angenom- men. 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., 2009 Es sind dies die Originalhandbücher des Systementwicklers.

[2]

Überhuber, Ch. ; Katzenbeisser, St. „MATLAB 7 - eine Einführung“ Springer, Wien, 2004 In dieser einführenden Darstellung sind die grundlegenden Programmiertechniken sowie die wichtigsten Funktionen von MATLAB 7 kurz und übersichtlich dargestellt worden.

[3]

Angermann, A. ; u.a. “Matlab, Simulink, Stateflow” Oldenbourg, München, 2009, (6. Aufl.) Das Buch bietet eine ausführliche Einführung mit vielen Beispielen, auch aus dem Bereich der Automatisierungstechnik.

[4]

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.

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
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.
S
Command History Hier werden die Befehle, die in der Vergangenheit ausgeführt
wurden, angezeigt. Der Benutzer kann über markieren/kopieren
zurückliegende Befehle wieder in das Kommandofenster holen.
Die folgenden Fenster lassen sich wahlweise aktivieren
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 View des Hauptmenü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

File-Menü - Über das entsprechende Pull-Down-Menü lassen sich u. a. Dateien öffnen, neue Dateien erzeugen, Standardeinstellungen verändern.

In diesem Menü werden die Funktionen für die Editierung von Texten bereitgestellt.

Über dieses Menü kann das Erscheinungsbild der Benutzeroberfläche geändert werden. SIMULINK wird aktiviertDas
Über dieses Menü kann das Erscheinungsbild der Benutzeroberfläche geändert
werden.
SIMULINK wird aktiviertDas aktuelle Verzeichnis
wird angezeigt

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:

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

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:

das Erscheinungsbild ist folgender Abbildung zu entnehmen: Die in der Menüleiste angebotenen Funktionen lassen

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:

S

File

Die üblichen File-Funktionen wie Öffnen, Speichern, Drucken usw. werden hier definiert.

S

Edit

Die Editierfunktionen für Texte werden definiert.

S

View

Das Erscheinungsbild des Editors kann verändert werden.

S

Debug Es erscheinen Menüpunkte, die die schrittweise Programmbearbeitung ermöglichen oder über die die Abarbeitung gestartet werden kann.

Über die Buttons des Toolbar lassen sich bestimmte Funktionen sehr schnell aktivieren (so die Anzeige ausgewählter Funktionen oder das Suchen von Textabschnitten).

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:

Nach dieser Aktivierung erscheint das folgende Fenster: Über dieses Fenster wird die Modell-Bibliothek von SIMULINK

Ü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-Menüpunkt im File-Menü oder über das entsprechende Button des Toolbar dieses Fensters ein neues, leeres Fenster für den Arbeitsbereich 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 < > und < > 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

S

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 Syntaxformel lässt sich die Definition wie folgt schreiben:

1

zeilenvektor [ element ,

]

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 [ element ;

]

|

[ element ,

]‘

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 [ 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 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 ganzzahliger_ausdruck | indexbereich indexbereich : | ganzzahliger_ausdruck : ganzzahliger_ausdruck | ganzzahliger_ausdruck : ganzzahliger_ausdruck : ganzzahliger_ausdruck

1

S

S

S

S

S

S

Für Syntaxformeln gelten folgende Regeln:

Alle beschreibenden (metasprachlichen) Begriffe werden in Kleinschreibung notiert.

Die definierten Begriffe (linke Seite der Formel) werden durch das Zeichen abgeschlossen.

Alle Elemente der zu definierenden Sprache (Schlüsselwörter , Opereratoren) werden fett dargestellt.

Mögliche Wiederholungen eines Konstruktes werden durch

Optionale Konstrukte werden in Kursivschrift dargestellt.

Alternative Konstrukte werden als Liste notiert, wobei als Trennzeichen | verwendet wird.

angegeben.

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

6

16

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 strukturbezeichner ( index, index ) . feldbezeichner feldbezeichner 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 die Bezeichner der Datenfelder.

 

Feld

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- riable in ein zelluläres Feld.

 

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 { element ,

}

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

zell_zugriff 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,

kennzeichnet den Namen des Feldes f als Zeichenkette.

cn für Zellen des Feldes sowie f1,

fn

für Datenfelder in einer strukturierten Variablen; ‘f‘

Funktion

Ergebnistyp

Bedeutung

cell(n)

zelluläres

Es wird ein n x n - zelluläres Feld erzeugt, dass aus leeren Feldern besteht.

Feld

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]

>> problemdaten{1} ans =

Messungen

>> problemdaten{3}

ans =

1.4000

2.3000

1.8000

2.8000

2.0000

3.4000

2.4000

4.1000

[4x2 double]

>> 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

e

x

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

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 ./
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 .*
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 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

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

wird bestimmt. Wird für p

die Konstante Inf gewählt, so wird die Maximal-

norm

bestimmt.

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

>>

ans = 2.0228e+002 -1.2650e+002i

>> x=-pi/2:0.2*pi:pi/2 % Definition durch Bereichsvariable

x =

v*w' % Das ist das Skalarprodukt der Vektoren v , w!

 

-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 n, m , p

Vektoren ganzzahlige Ausdrücke

 

Funktion

Typ des Resul- tats

Bedeutung

chol(A)

Matrix

CHOLESKY-Faktorisierung (A muss positiv definit sein!). Diese Zerlegung liefert eine Matrix C, so dass gilt A = C C T

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 d = eig(A) [V D ] = eig(A)

Eigenwerte und Eigenvektoren von A.

In

d wird der Vektor der Eigenwerte bereitgestellt.

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

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

>> b=randn(1,5)'

b =

0.1139

>> a>=b ans = 0

0

1.0668

0

>> any(a==b) ans = 0

>> any(a<=b) ans = 1

2.3.5

Zeichenkettenausdrücke

-0.5883

2.1832

-0.1364

 

0.0593

-0.0956

-0.8323

1

1

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, S x, n

cn

Zeichenkettenkonstanten Char-Matrix 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:

im zweiten, usw. Es besteht also folgende Korrespondenz: Für die Addition und Subtraktion von Polynomen können
im zweiten, usw. Es besteht also folgende Korrespondenz: Für die Addition und Subtraktion von Polynomen können

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

>> r=roots(p) r =

3.3333

+ 1.4907i

3.3333

- 1.4907i

4.0000

-0.5971 + 1.1306i -0.5971 - 1.1306i

-0.3059

1.0000

>> % 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

>> py=polyval(p,x); >> plot(x,y,x,py)

-0.0000

0.9858

0.0000

Das Resultat ist im folgenden Bild dargestellt (die beiden Kurven fallen praktisch zusammen):

-0.0000 0.9858 0.0000 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 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 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.

Die Markergröße wird ganzzahlig in Punkten vorgegeben.

Marker Size

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

Elementare Konstrukte 2 - 23 Die beiden Kurven können mit subplot auch in Teildiagramme gezeichnet werden:

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,'-^')

>> 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 ,

enthalten. Die Bedeutungen der Aufrufe lassen sich in Analogie zu denen von plot erschlie-

sind Vektoren oder Matrizen, die die Punkte der Kurvenverläufe

ß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)

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)

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)

>> [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).

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

Öffnen eines neuen Grafik-Fensters

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

die folgenden Form:

alle weiteren Grafikkommandos beziehen sich auf dieses Fenster. Der Aufruf hat

h.

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:

Diese Folge wird im ersten Grafikfenster dar- gestellt: >> t=0:0.1:10; >> y=rand(1,length(t));

>> 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)

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:

folgenden Bild dargestellte Menüzeile bzw. Werkzeugleiste: Im folgenden werden die wichtigsten Menüpunkte mit ihren

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 letzten 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:

ist das Formular für die Achsen-Eigenschaften dargestellt: Die anderen Formulare haben eine ähnliche Gestalt. Die

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 Einfügen eines Pfeils bzw. einer Linie in die Grafik

Einfügen eines Pfeils bzw. einer Linie in die Grafik Zoom: Ein/Aus Einfügen eines Textes (mit Maus

Zoom: Ein/Aus

Einfügen eines Textes (mit Maus wird der Startpunkt markiert)

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.

Die Standardeinstellungen werden angenommen. Die Achsen werden entsprechend den

aus den Daten ableitbaren Grenzen skaliert und das Koordinatensystem wird auf die Standardorientierung ausgerichtet.

Alle Achsenlinien, Koordinatenwerte, Markierungen und Beschriftungen der Koordina- tenachsen werden ausgeblendet. axis on Die Koordinatenachsen werden in allen Details wieder dargestellt.

axis normal

axis off

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.

Die Texteigenschaften können sehr flexibel festegelegt werden. Die Eigenschaften sowie die möglichen Werte sind der on-line-Hilfe zu entnehmen.

text( ‘eigenschaftsname‘,wert_der_eigenschaft, )

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

der als Überschrift des Diagramms ausgegeben wird. Beispiel Im folgenden Beispiel wird die Funktion beschriftenden Text

Im folgenden Beispiel wird die Funktion

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

dargestellt. Im

% 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.

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.

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.

Öffnen einer binären Datei

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.

Mit der Funktion fwrite kann eine binäre Datei auf einen Datenträger geschrieben werden.

Schreiben einer binären Datei

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.

Mit der Funktion fclose lassen sich binäre Dateien abschließen. Die folgenden Formen des

Aufrufs sind von Bedeutung:

Schließen einer binären Datei

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.

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

End of File

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.

Für das zeilenweise Lesen einer Textdatei stehen zwei Funktionen zur Verfügung, die wie folgt

aufgerufen werden können:

Zeilenweises Lesen einer Textdatei

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.

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

tline = fgets(fid)

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 formatfeld

formatfeld % 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 formatfeld | steuerzeichen | zeichenfolge

formatfeld %

steuerzeichen \ zeichen

flag feldlänge.genauigkeit konvertierungs_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.

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.

a = input('prompt','s')

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) abge- legten Daten können auch mit einem interaktiven Werkzeug eingesehen und editiert wer- den. Dazu ist im Desktop das Fenster mit den Zugriffspfa- den (Launch Pad) umzuschal- ten auf Workspace. Damit ge- winnt man die nebenstehende Übersicht. Neben den Namen der Variablen findet man auch die Anzahl der Elemente sowie die Größe den von ih- nen belegten Speichers. Der Typ der Variablen ist eben- falls angegeben. Aus dieser Liste kann man nun die ein- zusehenden bzw. zu editieren- den Variablen auswählen; das ist mit Doppelklick möglich.

Anschließend erscheint der Variablen-Editor, der die ein- zelnen Feldelemente bereitstellt und diese auch zu editieren gestattet. Im folgenden Bild ist der Inhalt der Matrix A zu sehen:

Feldelemente bereitstellt und diese auch zu editieren gestattet. Im folgenden Bild ist der Inhalt der Matrix
Feldelemente bereitstellt und diese auch zu editieren gestattet. Im folgenden Bild ist der Inhalt der Matrix

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 Entwic- klungswerkzeug (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 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 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

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

switch skalarer_ausdruck | zeichenkettenausdruck

case werteliste

anweisung

otherwise

anweisung

end

werteliste

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 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: