Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... ·...

91
Skript Ingenieurinformatik Teil 2 MATLAB Simulink Teil 1 : Vorlesung Teil 2 : Praktikum Teil 3 : Klausuren Wintersemester 2013/14

Transcript of Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... ·...

Page 1: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

 

Skript  

Ingenieurinformatik ‐Teil 2 

MATLAB ‐ Simulink  

 

Teil 1 :  Vorlesung 

Teil 2 :  Praktikum 

Teil 3 :  Klausuren  

 

 

 

 

 

Wintersemester 2013/14 

Page 2: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Ingenieurinformatik – Teil II – MATLAB‐Simulink

Vorlesung

Einleitung

Praktikum

Prakt‐1 EntwicklungsumgebungEinleitung

Kap1 Einführung in MATLAB

Kap2 Felder und Arrays

Prakt 1 Entwicklungsumgebung

Prakt‐2 Ein‐Ausgabe‐Debugger

Prakt‐3 Graphik und Dateienp y

Kap3 Funktionen und Skripte

Kap4 Kontrollstrukturen, Bedingungen

p

Prakt‐4 Eigenwerte‐Eigenvektoren

Prakt‐5 Numerik von DGLnp , g g

Kap5 Datentypen

Kap6  Anwendungen aus der Analysis

Prakt‐6 Simulink

p g y

Kap7  Lineare Algebra

Kap8  Numerische Lösung von DGLn

Kap9  Einführung in Simulink

1

IngenieurinformatikIngenieurinformatikTeil II

Einführung in MATLAB/Simulink

2

Ingenieurinformatik  – Teil II

Ingenieurinformatik  ‐ Teil II

Lernziele :

• Einführung in eine numerische Simulationsumgebung

• Numerische Verfahren und deren Anwendung

• Umgang mit MATLAB und Simulink

• Lösung ausgewählter Probleme aus dem Maschinenbau, d F h t h ik d L ft d R f h tt h ikder Fahrzeugtechnik, der Luft‐ und Raumfahrttechnik mit Hilfe von MATLAB und Simulink

V tVoraussetzungen :

• Beherrschung einer Programmiersprache ( Ingenieurinformatik ‐ Teil I )

h k ( d )• Ingenieurmathematik ( 1. und 2. Semester )Lineare Algebra :  Vektoren, Matrizen, Eigenwerte und Eigenvektoren Analysis :   Differential‐ und Integralrechnung, 

3

Gewöhnliche Differentialgleichungen

Was ist MATLAB / Simulink ?

Typisches Problem, das einfach mit MATLAB oder Simulink gelöst werden kann :yp , g

Federschwingung mit Dämpfung 

DGL für eine gedämpfte Schwingung 

0)t(x)t(x2)t(x 20

g p g g( siehe Hollburg : Maschinendynamik, Formel 4.14 )

0)t(x)t(x2)t(x 0

Anfangsbedingung :

00 v)0t(xx)0t(x

)t(v)t(x

DGL zweiter Ordnung in ein System von zwei DGLn erster Ordnung umschreiben

)t(x)t(y )t(y)t(y 21

)t(x)t(v2)t(v

)t(v)t(x20

)t(v)t(x

)t(y)t(y

)t(y2

1

)t(y)t(y2)t(y

)t(y)t(y

12022

21

402

01

v)0t(yx)0t(y

Page 3: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Was ist MATLAB / Simulink ?

Lösung mit MATLAB ‐ Programmieren )t()t(

% Parameter der DGL

ösu g t og a e e

MATLAB‐Skript:  feder.m)t(y)t(yD2)t(y

)t(y)t(y

12022

21

global w0 D;T = 2; %Periodendauerw0 = 2*pi/T; %Eigenfrequenz

function dy_dt = dglfeder(t, y)global w0 D;dy dt(1 1)= y(2);D = 0.5; %Dämpfung

% Anfangsbedingungenx0 = 2;

dy_dt(1,1)= y(2);dy_dt(2,1)=-2*D*y(2)-w0^2*y(1);end

MATLAB‐Funktion: dglfeder mx0 2; v0 = 0; y0 = [x0; v0]; %Vektor mit 2 Zeilen% Lö d DGL it d 45

erg(:,1) erg(:,2)t x(t) v(t)

MATLAB‐Funktion:  dglfeder.m

% Lösung der DGL mit ode45[t,erg]=ode45(@dglfeder,[0,20],y0);plot(t erg)

0.0000 2.0000 0.00000.0002 2.0000 -0.00370 0010 2 0000 0 0188

t x(t) v(t)

plot(t, erg)[t, erg] % Ausgabe von t, x und v

0.0010 2.0000 -0.01880.0016 2.0000 -0.03130.0032 1.9999 -0.06260 0064 1 9996 -0 1251V i bl t i i V k

5

0.0064 1.9996 -0.1251. . . . . . . . .Variable t ist ein Vektor

Variable  erg ist eine Matrix mit 2 Spalten!

Was ist MATLAB / Simulink ?

Lösung mit Hilfe von  Simulink – Graphisches Programmierenösu g t e o S u G ap sc es og a e e

0)t(x)t(x2)t(x 20

5.02TT/pi20

0)t(x)t(x)t(x 2

0)0t(v2)0t(x

0)t(x)t(x)t(x

Simulink‐Modell:  gedschwing.slx2 Signale :  v und x

Integration von v ergibt x

S u ode : gedsc g.s

6

Integration der Beschleunigung ergibt v

Was ist MATLAB / Simulink ?

MATLAB ‐ Abkürzung für MATrix LABoratoryb ü u g ü o ato y

• Programmierumgebung, die in den 1970er Jahren entwickelt worden ist, um auf einfache und komfortable Weise die numerischen Funktionsbibliotheken LINPACK d EISPACK t (S ft bibli th k P bl dLINPACK und EISPACK zu nutzen (Softwarebibliotheken um Probleme aus der Linearen Algebra zu lösen, z.B. Gleichungssysteme, Eigenwert‐ und Eigenvektorprobleme)"Cleve Moler is chief mathematician, chairman, and cofounderof MathWorks. Moler was a professor of math and computerscience for almost 20 years at the University of Michigan, Stanford University and the University of New Mexico.""In addition to being the author of the first version of MATLAB, Moler is one of the authors of the LINPACK and EISPACK scientific subroutine libraries."the authors of the LINPACK and EISPACK scientific subroutine libraries.

• zunächst in der Programmiersprache FORTRAN geschrieben, später in C

• The MathWorks, Inc. entwickelt und vertreibt MATLABwww.mathworks.com www.mathworks.de

• Kostenlose Alternativen ( ? ) zu MATLABScilab – www scilab org Octave – www octave org

7

Scilab www.scilab.org Octave   www.octave.org

Was ist MATLAB / Simulink ?

MATLAB/Simulink ist besonders geeignet fürMATLAB/Simulink ist besonders geeignet für

• Numerische Berechnungen

• Visualisierung von Daten 

• Modellierung und Simulation technischer Probleme

Im Gegensatz zu Maple oder Mathematica arbeitet MATLAB nicht symbolisch sondern numerisch Die Lösung einer quadratischen Gleichung wird mit MATLABsondern numerisch. Die Lösung einer quadratischen Gleichung wird mit MATLAB nicht analytisch berechnet sondern numerisch – das Ergebnis ist eine Zahl und keine geschlossene Formel. Symbolische Berechnungen können aber trotzdem it MATLAB d h füh t dmit MATLAB durchgeführt werden.

Beispiel : 

0cba 2 0132 20cxbxa 2 01x3x2 2

SymbolischeBerechnung

NumerischeBerechnung

ca4bbba2

1x 2/1 1x5.0x 21

Berechnung Berechnung

8

a2

Page 4: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Was ist MATLAB / Simulink ?

MATLAB kann auf verschiedene Weise genutzt werdenMATLAB kann auf verschiedene Weise genutzt werden

• interaktiv (als „Taschenrechner“) direkte Eingabe von Anweisungen/Befehlen und sofortige Ausführung

fü h i f h P bl dbnur für sehr einfache Probleme anwendbar

• ProgrammierspracheAnweisungen/Befehle werden in einer Datei (M‐File) gespeichert –MATLAB‐Programm. Dieses Programm wird anschließend ausgeführt.

MATLAB/Simulink bietet bereits eine Vielzahl von fertigen Lösungen für ver‐

hi d P bl d I i N d Fi i h fschiedenste Probleme aus den Ingenieur‐ , Natur‐ und Finanzwissenschaften.Toolboxen (Programmbibliotheken) für

• Entwurf und Analyse von Steuerungs‐ und Regelungssystemeny g g g y

• Test‐ und Messtechnik

• Rapid Prototyping und HIL‐Simulation

C d i d V ifik i• Codegenerierung und Verifikation

• Signalverarbeitung und Kommunikation

• Bildverarbeitung und Computer Vision

9

g p

• Parallel Computing, Mathematik, Statistik und Optimierung, Computational Finance

L i h i d P üf

Ingenieurinformatik  – Teil II

Leistungsnachweise und Prüfung

Anwesenheit bei den Praktikumsterminen (6 Termine)

Bearbeitung und Abgabe von Studienarbeiten

• Studienarbeiten müssen spätestens am offiziellen Abgabetermin vorgeführt werden !vorgeführt werden !

• Sie müssen zeigen, dass Sie die Studienarbeiten verstanden haben ! Es reicht nicht aus nur funktionierende Lösungen vorzuführen.

• Sie müssen zeigen, dass Sie mit MATLAB/Simulink umgehen können!

i f l i h b b d di b i il d il iDie erfolgreiche Abgabe der Studienarbeiten aus Teil I und Teil II ist Voraussetzung für die Teilnahme an der Klausur !

Die Prüfung besteht aus 2 Teilen :Die Prüfung besteht aus 2 Teilen :

• Teil I – C‐Programmierung

• Teil II – MATLAB/Simulink

10

Teil II  MATLAB/Simulink

Zeitaufwand

Ingenieurinformatik  – Teil II

Zeitaufwand

Sie müssen jede Vorlesung mindestens zwei Stunden nachbereiten. D.h. den Vorlesungsstoff noch einmal durcharbeiten und die Beispiele aus der VorlesungVorlesungsstoff noch einmal durcharbeiten und die Beispiele aus der Vorlesung ausprobieren. Ebenso sollten Sie kleinere Änderungen an den Beispielen vor‐nehmen. Für jeden Praktikumstermin gilt das gleiche.

d d b h lFür die Studienarbeiten müssen Sie noch extra Zeit einplanen. Das Kopieren von Lösungen spart nicht wirklich Zeit.

Wenn Sie meinen, mit weniger eigenem Aufwand auszukommen, dann täuschen e S e e e , t e ge e ge e u a d aus u o e , da täusc eSie sich meistens selbst oder merken gar nicht, dass Sie den Stoff nicht verstan‐den haben. In der ersten Stunden kann das noch gut gehen, aber am Ende werden Sie die Studienarbeiten nicht selbst lösen können und dann müssen Siewerden Sie die Studienarbeiten nicht selbst lösen können und dann müssen Sie die Studienarbeiten kopieren.

Wenn Sie in den Mathematik‐Prüfungen eine 3.0 gehabt haben oder schlechter, werden Sie noch erheblich mehr Zeit verwenden müssen, da Sie noch Stoff aus der Mathematik nachholen müssen.

Wenn Sie den Stoff aus der C‐Programmierung nicht beherrschen, sollten Sie

11

Wenn Sie den Stoff aus der C Programmierung nicht beherrschen, sollten Sie vielleicht besser noch einmal in die Vorlesung für das zweite Semester gehen. Die C‐Programmierung wird hier vorausgesetzt.

Skript 

Ingenieurinformatik  – Teil II

p

Teil 1 ‐ Vorlesung,  Teil 2 – Praktikum ,  Teil 3 ‐ Klausuren

Lehrbücher zur Vorlesung

hBeucher

MATLAB und SimulinkPearson Studium, 4. Auflage, 2008

Stein

Einstieg in das Programmieren mit MATLABHanser 2 Ausgabe 2009Hanser, 2. Ausgabe, 2009 

Angermann, Beuschel, Rau, Wohlfahrt 

MATLAB – Simulink ‐ StateflowOldenbourg Verlag, 7. Auflage, 2011

Kutzner, Schoof 

MATLAB/Simulink ‐ Eine EinführungMATLAB/Simulink Eine EinführungRRZN‐Handbuch, 3. Auflage, 2011

Homepage

12

www.lrz.de/~reichl

Page 5: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

MATLAB – Simulink Dokumentation Seiten

Ingenieurinformatik  – Teil II

MATLAB  Simulink Dokumentation                          SeitenMATLAB Primer 214

MATLAB Programming Fundamentals 862

MATLAB Mathematics 598

MATLAB Graphics 679

MATLAB 3D‐Visualization 216

MATLAB Object Oriented Programming 621

MATLAB Desktop Tools and Development Environment 288

MATLAB Creating Graphical User Interfaces 719MATLAB Creating Graphical User Interfaces 719

MATLAB External Interfaces 866

MATLAB Function Reference 5429

.  .  .Simulink Getting Started Guide 93

Simulink User‘s Guide 2839

Simulink Reference Guide 3515

Simulink Graphical User Interfaces 717

Simulink Developing S‐Functions 604

13

Stateflow User‘s Guide    1538

. . .

Download und Installation von MATLAB/Simulink

http://w3-o.hm.edu/rz/download-matlab/

R2007b kein Zugriff auf das Internet notwendig

R2013b Z iff f d I t t t diR2013b Zugriff auf das Internet notwendig

Speicherplatzbedarf :  500MB ‐ 3GB

14

Gliederung

1 Einführung in MATLAB 

2 Felder – Arrays2 Felder – Arrays

3 Funktionen und Skripte

4 Kontrollstrukturen und Bedingungen4 Kontrollstrukturen und Bedingungen

5 Datentypen

6 Anwendungen aus der Analysis

7 Lineare Algebra

8 Numerische Lösung von Differentialgleichungen

9 Einführung in Simulinkg

15

Kapitel 1 – Einführung in MATLAB

Kapitel 1 – Einführung in MATLAB

1.1   MATLAB ‐ Entwicklungsumgebung

1.2   MATLAB ‐ Interaktiv

1 3 MATLAB ‐ Variablen1.3   MATLAB ‐ Variablen

1.4   MATLAB ‐Matrizen

1.5   MATLAB ‐M‐Files

16

Page 6: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.1   MATLAB ‐ Entwicklungsumgebung

Toolstrip

C d Wi dWorkspace

Command Window

• Eingabe von Befehlen• Ergebnisse ausgeben

Current Folder

• Arbeitsverzeichnis

• Liste der vorhandenen Variablen

• Eigenschaften von• Ergebnisse ausgeben• Fehlermeldungen anzeigen

• Aufruf von Skripts und 

• Dateiverwaltung• Zugriff auf M‐Files

Skripts

Eigenschaften von Variablen anzeigenund ändern 

pFunktionen

Command History

‐ Skripts‐ Funktionen

Command History• Liste der bisher ein‐gegebenen BefehleB f hl ähl d

17

• Befehle wählen und erneut ausführen

1.2   MATLAB ‐ Interaktiv

Fü i f h P bl k MATLAB i i A T h h dFür einfachste Probleme kann MATLAB wie eine Art Taschenrechner verwendet werden. Der Anwender gibt einen Befehl (Ausdruck) im Command‐Windowein, MATLAB führt diesen Befehl aus und zeigt das Ergebnis an, gegebenenfalls 

18

auch eine Fehlermeldung. Das Ergebnis wird in der Standardvariablen ans ( answer ) gespeichert oder in Variablen mit vorgegebenem Namen (hier : x, y, z).

1.2   MATLAB ‐ Interaktiv

Sine  ‐ Sinus

radians – Bogenmaßradians Bogenmaß

Was bedeutet „elements“ ?

X darf Skalar, Vektor oder Matrix sein!

19

1.2   MATLAB ‐ Interaktiv

Das Ergebnis eines Ausdrucks wird, falls nicht anders vorgegeben, in der g , g g ,Standardvariablen mit dem Namen ans (Answer) abgelegt.

Grundrechenarten :    + - * / ^ (Potenzierung)         %Elementare Funktionen :

tanexploglog10sqrtsqrtabsmod

20

sign

Page 7: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.3   MATLAB ‐ Variablen

In der Programmiersprache C muss eine Variable vor der ersten Verwendung g p gexplizit definiert werden. Hierzu wird ein geeigneter Variablentyp gewählt und ein Variablenname.

Beispiel :

int i;i = 5;

Beispiel :

// Anweisung ist korrekt;i[3] = 7;i = "Hallo";

// Anweisung erzeugt beim Compilieren einen Fehler

// Anweisung erzeugt beim Compilieren einen Fehler

Durch die explizite Deklaration werden Programme sicherer, da eine Reihe von Fehlern bereits durch den Compiler erkannt werden. Durch implizite Typumwand‐lungen können sich aber dennoch Fehler einschleichen.lungen können sich aber dennoch Fehler einschleichen.

i = 5.6; // Anweisung erzeugt beim Compilieren eine Warnung

Vektoren und Matrizen in C :

double x[3]; // Vektor mit 3 Elementen ‐ x[0], x[1], x[2]double mat[3][4]; // Matrix mit 3 Zeilen und 4 Spalten

mat[0][0] mat[2][3]

21

mat[0][0] ... mat[2][3]Die Größe eines Vektors oder einer Matrix wird bei der Definition festgelegt und kann danach nicht mehr verändert werden! 

1.3   MATLAB ‐ Variablen

Bei MATLAB gilt (etwas vereinfacht, später genauer) folgendes :g ( , p g ) g

a) Eine MATLAB‐Variable ist immer eine Matrix mit n Zeilen und m Spalten –jede MATLAB‐Variable ist eine n*m‐Matrix 

b) Variablen müssen nicht explizit definiert werden – häufig wird eine Variable beib) Variablen müssen nicht explizit definiert werden  häufig wird eine Variable bei der ersten Verwendung erzeugt z.B. durch eine Wertzuweisung; MATLAB legt dabei die Anzahl der Zeilen und Spalten automatisch fest

c) Die Elemente einer Matrix sind vom Typ double d h der Wert eines Elementsc) Die Elemente einer Matrix sind vom Typ double, d.h. der Wert eines Elements einer Matrix ist vom Typ double (64‐Bit, ca. 15‐16 führende Stellen)

d) Es gibt drei wichtige Spezialfälle von Matrizen:1*1 – Matrix ‐ Variable, die einen einzelnen Wert speichert ( Skalar ) 1*n – Matrix ‐ Zeilenvektor  ‐ Matrix mit genau einer Zeilen*1 – Matrix ‐ Spaltenvektor  ‐ Matrix mit genau einer Spalte

e) Es gibt eine Vielzahl von Operatoren und Funktionen, mit denen Matrizen einfach definiert, initialisiert, verändert und verarbeitet werden können. Die meisten Operatoren sind bereits für Matrizen definiert.meisten  Operatoren sind bereits für Matrizen definiert.

f) Die Anzahl der Zeilen und Spalten einer Matrix kann sich während des Programmablaufs ändern ( beabsichtigt oder unbeabsichtigt aufgrund eines Fehlers) Die Dimension einer Matrix kann vergrößert (mehr Zeilen oder mehr

22

Fehlers). Die Dimension einer Matrix kann vergrößert (mehr Zeilen oder mehr Spalten) oder verkleinert (Zeilen oder Spalten löschen) werden.

g) Zeilen‐ und Spaltenindizes beginnen bei 1 (nicht bei 0 wie in C)

1.4   MATLAB ‐Matrizen

>> A [2 3 4 5] Alle MATLAB‐Variablen sind Matrizen !>> A = [2,3; 4,5]A =

2 34 5

Die Variable A ist hier eine 2*2Matrix. Diese Variable wird bei der Initialisierung erzeugt.

d i d S lt kt (2*1 M t i )4 5>> x = [6; 7]x =

6

x und y sind Spaltenvektoren (2*1‐Matrizen)

; trennt  Zeilen voneinander

,  oder Leerzeichen trennen Spalten in einer Zeile67

>> y = A * xy =

, p

A = [2 3; 4 5] identisch mit  A = [2, 3; 4, 5]Der Vektor x wird bei der Initialisierung erzeugt.

D V kt i d l E b i i Z i ty

3359

>> whos

Der Vektor y wird als Ergebnis einer Zuweisung erzeugt.

Name Size Bytes ClassA 2x2 32 double x 2x1 16 double y 2x1 16 double

Der Operator * (Multiplikationsoperator) ist auch für Vektoren und Matrizen definiert. Zeilen‐ und Spaltenzahl der Operanden müssen natürlich zueinander

23

definiert. Zeilen und Spaltenzahl der Operanden müssen natürlich zueinander passen. Bei 1*1Matrizen (Skalaren) bewirkt der Operator * eine „ganz normale Multiplikation“.

1.4   MATLAB ‐Matrizen

Zugriff auf die Elemente einer Matrix :

A(zeile, spalte)Für eine 1*1‐Matrix (Skalar) gilt : 

z(1,1) z(1) z und z=[5] z = 5z(1,1) z(1) z und    z [5] z 5Für Spaltenvektoren (n*1‐Matrix) gilt :

x(zeile,1) x(zeile)

24

Für Zeilenvektoren (1*n‐Matrix) gilt :

y(1,spalte) y(spalte)linear Indexing !

Page 8: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.4   MATLAB ‐Matrizen

Die Größe oder Dimension (Anzahl der>> x = 2 Die Größe oder Dimension (Anzahl der Zeilen und Spalten) der Variablen x wird hier durch geeignete Wertzuweisungen, die der Anwender eingegeben hat von

x =2

>> whos xdie der Anwender eingegeben hat, von MATLAB automatisch verändert. 

• zuerst ist x eine 1*1Matrix ( Skalar )

Name Size Bytes Class x 1x1 8 double

>> x(1)• dann wird x zu einer 1*2Matrix (Zeilenvektor)

• danach wird x zu einer 2*3Matrix

ans =2

>> x(2) = 12danach wird x zu einer 2 3Matrix bei der Erweiterung von x zu einer 2*3Matrix werden nicht explizit initialisierte Matrixelemente automatisch auf 0

x =2 12

>> whos xName Si e B tes Class Matrixelemente automatisch auf 0

gesetztName Size Bytes Class x 1x2 16 double

>> x(2,3) = 17x =

Die automatische Erweiterung von Zeilen oder Spalten kann leicht zu Fehlern führen; Schreibfehler sind oftmals schwer

x =2 12 00 0 17

>> whos x

25

führen; Schreibfehler sind oftmals schwer zu finden.

>> whos xName Size Bytes Class x 2x3 48 double

1.5   MATLAB ‐M‐Files

M‐Files enthalten MATLAB‐Befehle und müssen auf m enden Es handelt sichM Files enthalten MATLAB Befehle und müssen auf .m enden. Es handelt sich dabei um einfache ASCII‐Dateien (Text‐Dateien), die mit einem beliebigen ASCII‐Editor geschrieben werden. Die MATLAB‐IDE enthält bereits einen komfortablen Editor zum Schreiben von M FilesEditor zum Schreiben von M‐Files. 

Man unterscheidet zwei Typen von M‐Files

• SkriptsSkriptsSkripts enthalten eine Folge von Befehlen, die hintereinander ausgeführt werden; gibt man den Dateinamen ohne Endung im Command‐Fenster ein, dann werden die Befehle nacheinander ausgeführt genauso als hätte man diedann werden die Befehle nacheinander ausgeführt, genauso als hätte man die Befehle direkt im Command‐Fenster eingegeben.siehe Beispiel  scr_quadgl.m

• Funktionen oder ProzedurenFunktionen oder Prozeduren haben die gleiche Aufgabe wie Funktionen in der Programmiersprache C. Funktionen bearbeiten eine ganz bestimmte Aufgabe. Funktionen besitzen normalerweise Eingabeparameter und geben ein oder mehrere Ergebnisse zurück. Funktionen werden im Command Fenster aufge‐rufen oder von anderen Funktionen oder von Skripts.

26

rufen oder von anderen Funktionen oder von Skripts.siehe Beispiel  f_quadgl.m

1.5   MATLAB – M‐Files – Skript scr_quadgl.m

Die MATLAB‐Anweisungen sind hier in einem Skript mit dem Namen scr quadgl.m gespeichert. Der Name der Datei ist frei wählbar, muss aber _q g g p ,auf .m enden. Der oben gezeigte M‐File enthält zwei Kommentarzeilen und fünf Anweisungen. Die Anweisungen werden nacheinander ausgeführt, wenn man den Namen des Skripts ‐ scr quadgl ‐ im Command‐Window eingibt.

27

den Namen des Skripts  scr_quadgl im Command Window eingibt.

Das Zeichen % leitet einen Kommentar ein.Der Befehl  help M-Filename zeigt die ersten Kommentarzeilen an.

1.5   MATLAB – M‐Files ‐ Funktion f_quadgl.m

Die Datei f_quadgl.m speichert eine Funktion mit dem Namen f_quadgl. An diese Funktion werden 3 Parameter übergeben. Die Funktion berechnet dann die Lösungen der zugehörigen quadratischen Gleichung und gibt die Lösungen zurück. Beim Aufruf der Funktion werden 3 Parameter übergeben. Auf der linken Seiten des Funktionsaufrufes wird festgelegt, in welchen Variablen die Ergebnisse ge‐

28

des Funktionsaufrufes wird festgelegt, in welchen Variablen die Ergebnisse gespeichert werden. Mit dem oben gezeigten M‐File lassen sich beliebige quadra‐tische Gleichungen lösen, auch solche, die komplexe Lösungen besitzen.

Page 9: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Kapitel 2  Felder ‐ Arrays

Kapitel 2  Felder ‐ Arrays

2.1   Begriffe : Array – Matrix – Vektor – Skalar 

2 2 Arrays erzeugen2.2   Arrays erzeugen

2.3   Operatoren und Arrays

2.4   Multiplikation von Matrizen 

2.5   Arbeiten mit Vektoren

2.6   Skalarprodukt

2 7 Nüt li h F kti fü V kt d M t i2.7   Nützliche Funktionen für Vektoren und Matrizen

29

2   Felder – Arrays

Eine n*m‐Matrix ist die zentrale Datenstruktur bei MATLAB.

Beispiel : 34‐Matrix

1 2 ‐3 4

Spalte

8 9 5 6

11 12 0 9

Zeile

• Alle Elemente einer Matrix besitzen immer den gleichen Datentyp, d.h. alle 

Element( 2 , 3 )

Elemente sind vom Typ double oder vom Typ uint8 , float …

• Die Elemente einer Matrix sind stets vom Typ double, außer der Typ der  Matrix wird explizit anders festgelegt (später genauer)wird explizit anders festgelegt (später genauer).

• Der Zugriff auf ein einzelnes Element einer Matrix erfolgt normalerweise durch Angabe von Zeile (erster Index) und Spalte (zweiter Index) z.B.  A(2,3). 

• Der Zugriff auf ein Element kann auch mit einem einzigen Index ( linear indexing)erfolgen. Hierzu werden die Elemente der Matrix spaltenweise durchnum‐meriert, beginnend bei 1. Daher gilt im obigen Beispiel :

30

meriert, beginnend bei 1. Daher gilt im obigen Beispiel :A(2,3) ≡ A(8) A(3,3) ≡ A(9) A(1,4) ≡ A(10)

2.1   Begriffe :  Array  – Matrix  – Vektor  – Skalar 

Array  oder  Feld :y

Bezeichnet ganz allgemein ein mehrdimensionales Objekt;  ein Element eines n‐dimensionalen Arrays wird durch n Indizes ( k1, k2, k3, … , kn ) eindeutig fest‐gelegt ( n>=1 )gelegt  ( n>=1 ).

A(k1,k2,k3,…,kn)Spezielle ArraysSpezielle Arrays

• Matrix2‐dimensionales Array  – nm-Array   oder   nm-Matrix 

( )A(z,s) A(2,3) A(n) ( A(n) :  linear indexing )

• Vektor2‐dimensionales Array mit genau einer Zeile ( 1n-Array – Zeilenvektor ‐ row2 dimensionales Array mit genau einer Zeile ( 1 n Array  Zeilenvektor rowvector) oder genau einer Spalte ( n1-Array – Spaltenvektor – column vector )A(1,k) ≡ A(k) A(k,1) ≡ A(k) ( A(k) :  linear indexing )

Sk l• Skalar 2‐dimensionales Array mit genau einer Zeile und einer Spalte ( 11-Array )A(1,1) ≡ A(1) ≡ A

31

2.1   Begriffe :  Array  – Matrix  – Vektor  – Skalar 

Matrizen  werden oft für völlig verschiedene Anwendungen genutzt :g g g

• um mathematische oder physikalische Objekte darzustellen

Drehung in der Ebene : Darstellung durch eine  22-MatrixD h i R D t ll d h i 3 3 M t iDrehung im Raum :  Darstellung durch eine  33-MatrixDrehstreckung : Darstellung durch eine  33-MatrixTrägheitsmatrix  : Darstellung durch eine  33-Matrixn Gleichungen mit m Unbekannten :  nm-Matrix - Koeffizientenmatrix

42x

652543

46522z5y4x3

Bei diesen Matrizen ist es von Bedeutung ob sie symmetrisch sind schiefsym‐

34

zy

743652

3z7y4x34z6y5x2

Bei diesen Matrizen ist es von Bedeutung, ob sie symmetrisch sind, schiefsymmetrisch,  diagonal,  quadratisch, … . Für diese Matrizen kann man den Rang bestimmen, Eigenwerte und Eigenvektoren berechnen oder die Determinante. Diese Eigenschaften der Matrix haben auch immer eine bestimmte mathemaDiese Eigenschaften der Matrix haben auch immer eine bestimmte mathema‐tische oder physikalische Bedeutung (z.B. Eigenwert  Eigenfrequenz).  

• um verschiedene Größen zusammenzufassen (Datenspeicher), damit diese 

32

Größen bequem gespeichert und verarbeitet werden können

Prüfung : speichere Semester und die Noten in Informatik, Elektronik und CAD 

Page 10: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.1   Begriffe :  Array  – Matrix  – Vektor  – Skalar 

Prüfung : speichere Semester und die Noten in Informatik, Elektronik und CADg p ,

• Spalte 1 (Zeile 1)  speichert das Semester des Teilnehmers

• Spalte 2 (Zeile 2)  speichert die zugehörige Note in Informatik

• Spalte 3 (Zeile 3)  speichert die zugehörige Note in Elektronik

• Spalte 4 (Zeile 4)  speichert die zugehörige Note in CAD

Sem Info Elekt CADSem Info Elekt CAD

4 2.3 1.7 1.7 4 4 5 7 Semester

4 1.7 1.7 1.3 2.3 1.7 2.0 2.7 Info

5 2.0 2.3 1.7 1.7 1.7 2.3 2.0 Elektronik

7 2.7 2.0 2.3 1.7 1.3 1.7 2.3 CAD

Für n‐Prüfungsteilnehmer benötigt man eine n4‐Matrix oder eine 4n‐Matrix. 

Bei 4 Teilnehmern haben wir eine 44‐Matrix. Für diese Matrix könnte man die Eigenwerte oder die Determinante ausrechnen. Aber das ist Unsinn! Beide Größen haben in diesem Beispiel überhaupt keine Bedeutung. Das Einzige, was Bedeutung hat, sind die Zeilen oder Spalten. Hinter dieser Matrix steckt kein mathematisches 

33

oder physikalisches Objekt. Man könnte die Information auch in 4 einzelnen Vektoren abspeichern. Das ist aber oft unpraktisch.

Kapitel 2  Felder ‐ Arrays

Kapitel 2 Felder ‐ ArraysKapitel 2  Felder  Arrays

2.1   Begriffe : Array – Matrix – Vektor – Skalar 2 2 Arrays erzeugen2.2   Arrays erzeugen2.2.1 Explizite Angabe der Elemente

2.2.2 Zugriff auf nicht existierende Elementeg

2.2.3 Arrays aus bestehenden Arrays erzeugen

2.2.4 Colon‐Operator 

2.2.5 Zugriff auf Teile eines Arrays

2.2.6 Transponieren einer Matrix oder eines Vektors

2.2.7 Funktionen

2.3   Operatoren und Arrays

2.4   Multiplikation von Matrizen 

2.5   Arbeiten mit Vektoren

k l d k

34

2.6   Skalarprodukt

2.7   Nützliche Funktionen für Vektoren und Matrizen

2.2.1   Explizite Angabe der Elemente

Matrizen mit wenigen Elementen werden zeilenweise durch explizite Angabe der g p gWerte erzeugt. Dabei wird der Concatenation –Operator[ ] verwendet.

• Zeilen werden durch einen Semikolon  ; voneinander getrennt

• Elemente in einer Zeile werden durch oder Space (Leerzeichen) getrennt• Elemente in einer Zeile werden durch  ,  oder  Space (Leerzeichen) getrennt

>> A = [ 1,2,-3,4; 8,9,5,6; 11 12 0 9 ]AA =

1 2 -3 48 9 5 6 Matrix :

11 12 0 9>> A = [ 1, 2, -3, 4;

8, 9, 5, 6;A :  34‐Matrix

, , , ;11 12 0 9 ]

A =1 2 3 41 2 -3 48 9 5 6

11 12 0 9 Vektoren :

x : Zeilenvektor ‐ 13‐Vektor

35

>> x = [ 1 4 8 ];>> y = [ 2; 5; 9 ]; y : Spaltenvektor ‐ 31‐Vektor

Der lesende Zugriff auf ein Element eines Arrays, das nicht existiert, erzeugt einen 

2.2.2   Zugriff auf nicht‐existierende Elemente

g y , , gFehler. Lesender Zugriff bedeutet, dass das (nicht existierende) Element auf der rechten Seite des Zuweisungsoperators steht.

>> B [ 1 2 3 4 8 9 5 6 ]>> B = [ 1, 2,-3, 4; 8, 9, 5, 6 ]B =

1 2 -3 48 9 5 6

>> x = 1 + B(3,2)Attempted to access B(3,2); index out of

Steht das nicht existierende Element dagegen links vom Zuweisungsoperator, wird d A i h i E i d d W d h S i i

bounds because size(B)=[2,4].

das Array automatisch erweitert. Es wird der Wert der rechten Seite zugewiesen.  Eingefügte Elemente ohne explizite Wertzuweisung werden mit 0 belegt. Die Größe der Matrix ändert sich damit!! 1 2 ‐3 43

8 9 5 6

1 2 ‐3 4

>> B(3,2) = 11B =

1 2 -3 4

36

1 2 3 4

8 9 5 6

0 11 0 0

1 2 3 48 9 5 60 11 0 0

Page 11: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Mit dem Concatenation‐Operator [] können aus bestehenden Arrays (meist 

2.2.3   Arrays aus bestehenden Arrays erzeugen

p [] y (Vektoren oder Matrizen)  neue Arrays erzeugt werden. Es gibt eine „horizontal concatenation“ [ , ] und eine „vertical concatenation“ [ ; ].>> A = [ 1, 2; 3, 4 ]A =

1 2

>> D = [ A, 2*A; 3*A, 4*A ]D =

1 2 2 41 23 4

>> B = [ A, A ]1 2 2 43 4 6 83 6 4 89 12 12 16B =

1 2 1 23 4 3 4

9 12 12 16Beachte : 

im Ausdruck 2*A werden alle Elemente>> C = [ A; A ]C =

1 2

im Ausdruck 2 A werden alle Elemente der Matrix Amit 2 multipliziert !

[ ] F1 23 41 23 4

>> a1 = [ 1, 2]>> a2 = [ 3, 4]>> x = [ a1; a2]

Frage : 

Was ist x ? Was ist y ?

37

3 4 >> x = [ a1; a2]>> y = [ a1 a2]

Colon‐Operator   : start:step:end ( start:step:end )2.2.4   Colon‐Operator

p p ( p )start:end ( start:end )

Der Colon‐Operator (Doppelpunkt‐Operator) erzeugt einen Zeilenvektor „ von start bis  end mit einer Schrittweite von  step (Default ist 1) “

>> x = 1:5 >> x = (3:5)x =

1 2 3 4 5>> y = (1:2:10)

x =3 4 5

>> x = x'y =

1 3 5 7 9>> z = 0:pi/4:pi

x =34>> z = 0:pi/4:pi

z =0 0.7854 1.5708 2.3562 3.1416

5>> y = (3:5)'y =

34

Aus einem Zeilenvektor wird durch Bildung des trans‐ponierten Vektors ( der Operator  ‘ transponiert ein 

38

5Objekt ) ein Spaltenvektor und umgekehrt.

2.2.4   Colon‐Operator

Beispiele : p

a) Erzeuge einen Vektor x , der die Zahlen 100, 99, … , 1 enthält.

b) Erzeuge einen Vektor xmit den Zahlen von 50 bis ‐50 bei einer Schrittweite von 5. Gib die Anzahl der Elemente von x aus. 

c) Speichere alle Winkel von 0 bis 180° (Abstand 1°) in einem Vektor Die Winkelc) Speichere alle Winkel von 0 bis 180 (Abstand 1 ) in einem Vektor. Die Winkel sollen im Bogenmaß gespeichert werden.

d) Geben Sie das letzte Elemente eines Vektors x aus.

e) Fügen Sie einem Vektor x noch ein weiteres Element hinzu (mit dem Wert 120).

39

Colon‐Operator   :   Zugriff auf Teile eines Arrays um ein neues Array zu erzeugen

2.2.5   Zugriff auf Teile eines Vektors

p g y y g

>> A=[11,12,13,14; 21,22,23,24; 31,32,33,34]A =

11 12 13 1421 22 23 2431 32 33 34

:  (ohne start und end ) steht für „alle Elemente“ einer Zeile oder Spalte 

>> x = A(2,:)x =

21 22 23 24Der Zeilenvektor x wird aus der zweiten Zeile der Matrix  A gebildet21 22 23 24

>> y = A(:,3)y =

13Der Spaltenvektor y wird aus der dritten Spalte der Matrix  A gebildet.13

2333

>> B A(1 2 3 4)>> B = A(1:2,3:4)B =

13 14Die Teilmatrix B wird aus den Zeilen 1 bis 2 und den Spalten 3 bis 4 der Matrix A gebildet.

40

23 24

Page 12: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.2.5   Zugriff auf Teile eines Vektors

Weitere nützliche Funktionen und Operatoren für Vektoren p

x(3:7) = 0 x([3 4 5 6 7]) = 0 x([3 16 23]) = 0Die Elemente  x(3),  x(4) . . .  x(7)auf 0 setzen bzw. die Elementex(3), x(16) und x(23) gleich 0 setzen.

x(:) = 0setze alle Elemente des Vektors x auf 0setze alle Elemente des Vektors  x auf 0Der Colon‐Operator :  ohne die Angabe von  anfang und  ende bezeichnet immer alle Elemente eines Vektors.

x(3:8) = []Die Elemente x(3), x(4) . . .  x(8) aus dem Vektor entfernen ‐ löschen

( ) []x(:) = []Alle Elemente aus dem Vektor löschen – x ist dann eine 0*0‐Matrix

x = linspace(anfang, ende, n)x linspace(anfang, ende, n)Erzeugt einen Vektor mit genau n Elementen. Die Werte der Elemente liegen äquidistant zwischen anfang und ende .

41

x = linspace(1,2,2) x = linspace(0,pi,181) x = linspace(1,2,11)

Transponierte ' einer Matrix : Vertausche Zeilen und Spalten der Matrix

2.2.6   Transponieren eines Vektors oder Arrays

Transponierte  einer Matrix : Vertausche Zeilen und Spalten der Matrix

>> A=[1,2,3; 4,5,6; 7,8,9]A =

>> A=[1,2,3; 4,5,6]A =

1 2 34 5 67 8 9

1 2 34 5 6

>> B = A'>> B = A'B =

1 4 7B =

1 42 5

A' transpose(A)

1 4 72 5 83 6 9

2 5 3 6

>> B = transpose(A)

Der Operator ' und die Funktion transpose wandeln eine n*m‐

>> x=[1, 2]x =

1 2>> y=[2; 3]y =

2Matrix in eine mn‐Matrix um.

Beachte : Bei Vektoren werden  Zeilenvektoren in Spaltenvektoren

1 2>> x'ans =

23

>> y'

42

Zeilenvektoren in Spaltenvektorentransformiert und umgekehrt. 1

2ans =

2 3

2.2.7   Funktionen

MATLAB besitzt eine Vielzahl von Funktionen, um spezielle Arrays (häufig , p y ( gMatrizen) zu erzeugen :

zeros erzeuge ein Array, bei dem alle Elemente auf 0 gesetzt sind 

ones erzeuge ein Array bei dem alle Elemente auf 1 gesetzt sindones erzeuge ein Array, bei dem alle Elemente auf 1 gesetzt sind 

eye Einheitsmatrix : Elemente auf der Diagonalen sind 1, alle anderen 0

diag Diagonalmatrix mit vorgegeben Werten 

rand die Werte aller Elemente sind Zufallszahlen zwischen 0 und 1(gleichverteilt, ohne die Grenzen 0 und 1)

randn die Werte aller Elemente sind Zufallszahlen einer Normalverteilungrandn die Werte aller Elemente sind Zufallszahlen einer Normalverteilung 

>> zeros(2,3)ans =

>> eye(3)ans =

>> diag([3,2,5])ans =

0 0 00 0 0

>> ones(2)1 0 00 1 00 0 1

3 0 00 2 00 0 5( )

ans =1 11 1

>> eye(2,3)ans =

1 0 0>> rand(2,2)ans =

0 2695 0 4469

43

1 1 1 0 00 1 0

0.2695 0.44690.9963 0.1528

>> help zeros2.2.7   Funktionen

>> help zeroszeros Zeros array.zeros(N) is an N-by-N matrix of zeros.zeros(M,N) or zeros([M,N]) is an M-by-N matrix of zeros.zeros(M,N,P,...) or zeros([M N P ...]) is an

M-by-N-by-P-by-... array of zeros.zeros(SIZE(A)) is the same size as A and all zeros.zeros with no arguments is the scalar 0.zeros(..., CLASSNAME) is an array of zeros of class

specified by CLASSNAME.Note: The size inputs M, N, and P... should be non-negative integers Negative integers are treated as 0negative integers. Negative integers are treated as 0.

Example:x = zeros(2,3,'int8');

44

( , , );

Page 13: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.3   Operatoren und Arrays

Die meisten Operatoren sind sowohl für Skalare als auch Arrays definiert. Ebenso p ykönnen viele Funktionen auch auf Arrays angewendet werden. Operatoren und  Funktionen wirken dabei elementweise (Ausnahme: Multiplikation und Division).

>> A = [1,2; 3,4]A =

1 2sin(1) sin(2)sin(3) sin(4)

3 4>> sin(A)ans =

Die Multiplikation eines Arrays mit einem Skalar erfolgt elementweise, ebenso die Addition eines

0.8415 0.90930.1411 -0.7568

>> B = 5*A + 2 B(i j) = 5*A(i j)+ 2 für alle i j

erfolgt elementweise, ebenso die Addition eines Arrays mit einem Skalar. 

>> B = 5 A + 2B =

7 1217 22

B(i,j) = 5*A(i,j)+ 2 für alle  i,jC(i,j) = A(i,j)+ B(i,j) für alle i,j

17 22>> C = A + BC = >> x = [ 0 pi/6 pi/4 pi/3 ];

>> y = sin(x)

45

8 1420 26 Frage : Welchen Wert besitzt y ?

2.3   Operatoren und Arrays

Arrays können nur dann addiert (analoges gilt für andere Operationen, die y ( g g p ,elementweise wirken) werden,  wenn die Dimensionen der Operanden überein‐stimmen, außer man addiert einen Skalar. Skalare Größen werden stets elementweise auf Arrays angewendet.elementweise auf Arrays angewendet.

>> A = [ 1, 2; 3, 4 ]A =

>> c = 3c =

1 23 4

>> B = A + 23

>> D = c*AD =>> B = A + 2

B =3 45 6

D =3 69 12

>> y = c*x + 25 6>> x = [2, 7]x =

2

>> y = c*x + 2

Hausaufgabe : 2 7

>> A + xError using +

Welchen Wert besitzt y ?

46

Matrix dimensions must agree.

2.4 Multiplikation von Matrizen

21 1211 2

43

21A

1413

1211B 5c

3

2x

Es gibt verschiedenen Arten der Multiplikation :

AB =

A*x =

A.B =

cA = A*c =

A^3 =A^3 =

A.^3 =

47

2.4 Multiplikation von Matrizen

Die Multiplikation von zwei Skalaren ist einfach und eindeutig. Multipliziert man p g pdagegen Arrays miteinander oder multipliziert man ein Array mit einem Skalar  muss genau definiert werden, was man darunter versteht. Die „verschiedenen Multiplikationen“ werden durch unterschiedliche Operatoren gekennzeichnetMultiplikationen  werden durch unterschiedliche Operatoren gekennzeichnet

• Matrixmultiplikation : C = A B mit dem Operator  „bekannte Matrixmultiplikation aus der Linearen Algebra“ 

Die Matrixmultiplikation ist nur für 2‐dimensionale Arrays definiert und auch nur, wenn Zeilenzahl und Spaltenzahl bestimmte Bedingungen erfüllen. Das Ergebnis der Multiplikation ist wieder eine Matrix. g pEbenso : Potenz (^) und Division (/ ‐Multiplikation mit der Inversen)

• Elementweise Multiplikation :  C = A . B mit dem Operator  .Di l i M l i lik i i fü b li bi A d fi i bDie elementweise Multiplikation ist für beliebige Arrays definiert, aber nur dann, wenn die Dimensionen der beiden Arrays übereinstimmen. Es werden jeweils die Elemente der beiden Arrays miteinander multipliziert.Ebenso : elementweise Potenz (.^) und elementweise Division (./)

• Multiplikation eines Arrays mit einem Skalar

Jedes Element des Arrays wird mit dem Skalar multipliziert Es gibt in diesem

48

Jedes Element des Arrays wird mit dem Skalar multipliziert. Es gibt in diesem Fall keinen Unterschied zwischen den Operatoren und . .

Page 14: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.4 Multiplikation von Matrizen

Multiplikation von Matrizen :Multiplikation von Matrizen  :

Das Produkt   AB der beiden Matrizen A und B ist nur dann definiert, wenn  Agenauso  viele Spalten hat wie B Zeilen besitzt, also 

• ist  A eine  n k‐Matrix  und  B eine k m‐Matrix, dann ist das Produkt derbeiden Matrizen  C = A B definiert und das Ergebnis ist eine n m‐Matrix.

k

• die Elemente von C berechnen sich wie folgt :

d.h. das Element C(p,q) ist das Skalarprodukt aus dem p‐ten Zeilenvektor 

1m

)q,m(B)m,p(A)q,p(C

von A mit dem q‐ten Spaltenvektor von B.

In dem Ausdruck C = A B führt MATLAB die Matrixmultiplikation automatisch durch Bei der Programmierung in C sind hierfür 3 geschachtelte Schleifendurch. Bei der Programmierung in C sind hierfür 3 geschachtelte Schleifen notwendig.

Beachte :  

• Ist das Matrixprodukt A B definiert, dann ist im allgemeinen das Produkt B A nicht definiert, außer wenn n == m.

• Die Matrixmultiplikation ist nicht kommutativ d h im allgemeinen gilt

49

• Die Matrixmultiplikation ist nicht kommutativ, d.h. im allgemeinen gilt

A B ≠ B A

Beispiel Matrixmultiplikation :

2.4 Multiplikation von Matrizen

e sp e at u t p at o :

k

1m)q,m(B)m,p(A)q,p(C C(p,q) = A(p,:) B(:,q)

Eine 3 2‐Matrix  A wird mit einer 2 4‐Matrix  B multipliziert. Das Ergebnis ist eine 3 4‐Matrix  C !

B(:,3)A(1,1) A(1,2)

A(2,1) A(2,2)

B(1,2) B(1,2) B(1,3) B(1,4)

B(2,1) B(2,2) B(2,3) B(2,4)

C(1,1) C(1,2) C(1,3) C(1,4)

C(2,1) C(2,2) C(2,3) C(2,4)

( , )

A(2,:)

1 2 10 11 12 13

A(3,1) A(3,2)

50 53

C(3,1) C(3,2) C(3,3) C(3,4)

3 4

5 6

20 21 22 23 110

170

)32(C

50

)3,2(C

Elementweise Multiplikation von Matrizen mit dem Operator .

2.4 Multiplikation von Matrizen

Elementweise Multiplikation von Matrizen mit dem Operator  .

Zwei Arrays A und B können elementweise miteinander multipliziert werden, wenn die beiden Arrays die gleiche Dimension besitzen. Der zugehörige MATLAB‐O t hi fü i tOperator hierfür ist  . . Weiterhin kann jede Matrix (sogar ein beliebiges Array) mit einer Zahl (Skalar) multipliziert werden. Hierfür können die Operatoren . oder  verwendet p pwerden.

Elementweise Multiplikation : C = A . BBeispiele :

A1 2

B10 11

C A B10 22

A =3 4

B =20 21

C = A . B60 84

x = 5

D = 5 AD A

x = 5

D = 5 .AD A

D =5 10

15 20

51

D = x A D = x .A

2.5   Arbeiten mit Vektoren

Aufgabe : Zeichne eine Kurve y = f(x) in einem vorgegebenen Bereich.g y ( ) g g

plot( x, y )Die Funktion plot erhält im einfachsten Fall zwei Vektoren (Zeilenvektoren oder Spaltenvektoren) mit je n Elementen als Parameter und zeichnet dann eine Kurve durch die Punkte (x(k),y(k))von k = 1...n.

2.00 ‐0.1700

2.02 ‐0.1744

2 04 0 17832.04 ‐0.1783

. . . . . .

4.70 0.0019P =(x,y)=(3.0,-0.05)

4.70 0.0019

x y

Frage :

Wie kann man auf einfache Weise solche Vektoren erzeugen und verarbeiten? 

T il f b 1) V kt ll El t b it d l i h Ab t d

52

Teilaufgaben 1) Vektor x erzeugen – alle Elemente besitzen den gleichen Abstand2) Funktionswerte y(i) in Abhängigkeit von x(i) berechnen

Page 15: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.5 Arbeiten mit Vektoren

Für einen gegebenen Vektor x die zugehörige Funktionswerte berechnen.ü e e gegebe e e to d e uge ö ge u t o s e te be ec e .

x = 2.00:0.02:4.70x = [ 2.00, 2.02,..., 4.70]

Aufgabe :

1. Erzeuge einen Vektor y für den gilt :

2. Wie kann der Vektor y ohne Verwendung einer for‐Schleife berechnet werden?

)x/1sin(xyey)xsin(yxyx2y 2x2 2

2.  Wie kann der Vektor y ohne Verwendung einer for Schleife berechnet werden?

for k = 1:length(x)y(k) = sin(x(k))*cos(x(k))+x(k)*x(k);y(k) sin(x(k)) cos(x(k))+x(k) x(k);

end

53

2.5   Arbeiten mit Vektoren

Aufgabe : (siehe Maschinendynamik,  Prof. Hollburg)u gabe : (s e e asc e dy a , o . o bu g)

Schreibe eine Funktion schwingungsplot, die die Auslenkung bei einer gedämpften Schwingung zeichnet. An die Funktion werden als Parameter die b id I t ll üb b d d Ab t d d P kt f d t A hbeiden Intervallgrenzen übergeben und der Abstand der Punkte auf der t‐Achse.

Schreiben Sie die Funktion so, dass sich die Parameter der Lösung leicht ändern lassen (D, y0 , v0 , 0 ). Achten Sie auf eine gute Dokumentation.

DGL für eine gedämpfte Schwingung (siehe Hollburg, Formel 4.14)

0)t(y)t(yD2)t(y 200

0 0 0

0)t(y)t(yD2)t(y 00

Lösung der DGL mit der Anfangsbedingung : 00 v)0t(yy)0t(y

2

)tsin(yvye)t(y hD

2

D

0020

t

(4.42)

20D D1

0D

Eigenkreisfrequenz des gedämpften Systems :

Abklingkonstante :                                                    Dämpfung D 

54

00

D0h yv

yarctanPhasenverschiebung :

2.6   Skalarprodukt

Mathematik :Skalarprodukt ( dot product, inner product ) von x und y

654

y321

x

)(||||)3(y)3(x)2(y)2(x)1(y)1(xyxs

MATLAB :x = [ 1; 2; 3 ] 3 1 Array x' ist [ 1, 2, 3 ] - 1 3 Array

63 )cos(|y||x|

y = [ 4; 5; 6 ] 3  1 Array y' ist [ 4, 5, 6 ] - 1 3 Array

Das Skalarprodukt von zwei Vektoren x und y berechnen :

1) Mit Hilfe der Transponierten eines Vektors (Matrixmultiplikation)

s = x' y oder s = y' xDie Transponierte eines Spaltenvektors ist ein Zeilenvektor. Multiplikation p p peiner 13 Matrix mit einer 31 Matrix ergibt eine 11 Matrix (Skalar).Sind x und y Zeilenvektoren, dann lautet die Formel  :s = oder s =s = oder s =

2) Das Skalarprodukt mit Hilfe einer Schleife berechnen ( schlecht! )s = 0;for k = 1:length(x)

55

for k = 1:length(x)s = s + x(k) y(k);

end

2.6   Skalarprodukt

3) Elementweise Multiplikation und Funktion sum verwenden3) Elementweise Multiplikation und Funktion  sum verwendens = sum(x.y) oder  s = sum(y.x)

Funktion sum :

Ist x ein Zeilen‐ oder ein Spaltenvektor, dann ist  sum(x) die Summe der Elemente des Vektors x

4) Die Funktion dot verwenden4) Die Funktion  dot verwendens = dot(x,y) oder s = dot(y,x)

56

Page 16: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Die Länge (Anzahl der Elemente) eines Vektors zurückgeben.

2.7   Nützliche Funktionen für Vektoren und Matrizen (Hausaufgabe)

length(x) Die Länge (Anzahl der Elemente) eines Vektors zurückgeben.Gilt für Zeilen‐ und Spaltenvektoren ‐ vergleiche  end

[n,m] = size(A) Anzahl der Zeilen (n) und Spalten (m) der Matrix A zurückgeben  

k = size(A)p = size(x)

Was ist die Größe k ? Welchen Wert besitzt k, wenn A eine34‐Matrix ist?Welchen Wert hat die Größe p, wenn x ein Zeilenvektor mit 5 Ele‐menten ist?  Was ändert sich, wenn x ein Spaltenvektor mit 5 Ele‐menten ist? 

mean(x) Ist x ein Vektor (Zeilen oder Spaltenvektor), dann wird der Mittel‐mean(x)wert des Vektors x zurückgegeben.

mean(A) ( 1)

Ist A eine Matrix, dann werden die Mittelwerte der einzelnen Spalten von A berechnet und in einem Zeilenvektor gespeichert. Dermean(A,1) Spalten von A berechnet und in einem Zeilenvektor gespeichert.  Der Zeilenvektor wird als Ergebnis zurückgegeben.

mean(A 2)Die Mittelwerte der einzelnen Zeilen der Matrix A werden berechnet und in einem Spaltenvektor gespeichert Der Spaltenvektor wird alsmean(A,2) und in einem Spaltenvektor gespeichert. Der Spaltenvektor wird als Ergebnis zurückgegeben.

x = [2;4;9];

57

Frage :  Was ergeben folgende Anweisungen? mean(x)mean(x,2)

2.7   Nützliche Funktionen für Vektoren und Matrizen (Hausaufgabe)

sum(x) Ist x ein Vektor (Zeilen oder Spaltenvektor), dann wird die Summe sum(x)der Elemente von x berechnet und zurückgegeben.

sum(A) sum(A,1)

Die Summe der einzelnen Spalten einer Matrix A berechnen und das Ergebnis als Zeilenvektor zurückgeben.su ( , ) Ergebnis als Zeilenvektor zurückgeben.

sum(A,2) Summe der Zeilen einer Matrix A zurückgeben ‐ Spaltenvektor

Ist x ein Vektor, dann den Wert des größten Elements zurückgeben.max(x) Ist x eine Matrix, dann werden die Maxima der einzelnen Spalten 

berechnet und das Ergebnis wird als Zeilenvektor zurückgeben.

max(x y) Eine Matrix mit den Maxima von x und y zurückgeben (Maxima je‐max(x,y)weils elementweise berechnen) ‐ x oder y können auch Skalare sein

max(x,[],2) Ist x eine Matrix, dann gibt max einen Spaltenvektor zurück, der die Maxima der Elemente der einzelnen Zeilen der Matrix enthältMaxima der Elemente der einzelnen Zeilen der Matrix enthält

sort(x) Die Elemente eines Vektors x aufsteigend sortieren; bei Matrizen werden die Spalten aufsteigend sortiert.

( d ( f i d) d d ( b i d i )sort(x, DIM,MODE)

MODE = 'ascend' (aufsteigend)  'descend' (absteigend sortiert)DIM = 1 spaltenweise,  DIM = 2 zeilenweise sortieren

Frage :  Wie wird das größte Element einer Matrix A berechnet ?

58

Was berechnet der nebenstehende Ausdruck?Wie kann der Ausdruck vereinfacht werden?

max(max(A,[],2))

Kapitel 3 Funktionen  und  MATLAB‐Skripte

Kapitel 3 Funktionen und MATLAB SkripteKapitel 3 – Funktionen und MATLAB‐Skripte

3.1   MATLAB‐Skripte

3.2   Funktionen

3 3 Beispiele für Funktionen3.3   Beispiele für Funktionen

3.4   Subfunction

59

3 Funktionen  und  MATLAB‐Skripte

Schreibt man MATLAB‐Befehle in eine Datei damit diese nacheinander ausgeführtSchreibt man MATLAB Befehle in eine Datei, damit diese nacheinander ausgeführt werden, gibt zwei Möglichkeiten :

• MATLAB‐Skript

• MATLAB‐Funktion

In beiden Fällen werden die MATLAB‐Befehle in einer ASCII‐Datei mit der Endung .m gespeichert – ein sogenanntes M‐Fileg p g

MATLAB‐Skript

• für ein Skript gibt es keine Entsprechung in der Programmiersprache Cfür ein Skript gibt es keine Entsprechung in der Programmiersprache C

• besitzt keine Parameter und keine Rückgabewerte und wird nicht durch das Schlüsselwort function eingeleitet

i MATLAB Sk i k di k f V i bl d MATLAB W k if• ein MATLAB‐Skript kann direkt auf Variablen des MATLAB‐Workspace zugreifen

MATLAB‐Funktion

• besitzt ähnliche Eigenschaften wie eine Funktion in der Programmiersprache C• besitzt ähnliche Eigenschaften wie eine Funktion in der Programmiersprache C

• besitzt Parameter und Rückgabewerte und wird durch das Schlüsselwort function eingeleitet

60

• besitzt eigene lokale Variablen und kann nicht direkt auf die Variablen des MATLAB‐Workspace zugreifen

Page 17: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.1 MATLAB‐Skripte

Ein MATLAB‐Skript enthält eine Folge von MATLAB‐Befehlen. p g

Wird ein Skript ausgeführt, dann werden die Befehle im Skript nacheinander abgearbeitet, genauso als würde man die Befehle direkt im Command‐Window nacheinander eingeben Ein Skript speichert also MATLAB‐Befehle dienacheinander eingeben. Ein Skript speichert also MATLAB‐Befehle, die hintereinander ausgeführt werden.

Ein Skript wird in einer ASCII‐Datei gespeichert, deren Name auf .m endet.

Ein Skript kann auf verschiedene Arten gestartet/aufgerufen werden :

• Namen des Skripts im Command‐Window eingeben

• Skript im Current‐Folder‐Window selektieren und in das Command‐WindowSkript im Current Folder Window selektieren und in das Command Windowziehen oder Kontext‐Menu öffnen und Menüpunkt  Run wählen

• Menü oder Toolbar des Editors

f f i k i i i d k i• Aufruf eines Skripts in einem anderen Skript

Ein Skript besitzt keine Parameter und keine Rückgabewerte.Wichtig :   Ein Skript hat Zugriff auf den aktuellen MATLAB‐Workspace !

Ei MATLAB Sk i d f ll V i bl d di i k ll W kEin MATLAB‐Skript darf alle Variablen verwenden, die im aktuellen Workspace vorhanden sind (d.h. während des Ablaufs des Skripts). Ein Skript kann Variablen aus dem Workspace lesen, verändern oder löschen oder auch neue Variablen 

61

erzeugen. Wird ein Skript zweimal hintereinander ausgeführt, können die Ergebnisse unterschiedlich sein, da sich der Workspace verändert haben kann.

3.1   MATLAB‐Skripte  – scr_quadgl.m

m‐File

Di V i bl dDiese Variablen werden vom Skript erzeugt oder überschrieben.

A f f d Sk i tAufruf des Skripts

Ablauf des Skripts

62

3.1   MATLAB‐Skripte  – scr_quadgl2.m

Falls Variable a vor dem Aufruf des Skripts nicht existiert, gibt es einen Fehler. 

definiere Variable a

63

Kapitel 3 Funktionen  und  MATLAB‐Skripte

Kapitel 3 Funktionen und MATLAB SkripteKapitel 3 – Funktionen und MATLAB‐Skripte

3.1   MATLAB‐Skripte

3.2   Funktionen

3 2 1 Aufbau einer Funktion3.2.1 Aufbau einer Funktion

3.3.2 Funktionsnamen

3 2 3 D k i i F k i3.2.3 Dokumentation einer Funktion

3.3   Beispiele für Funktionen

3.4   Subfunction

64

Page 18: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.2.1 Aufbau einer Funktion

F kti [i 1 i 2 ][ t1 t2 ]function [out1, out2, ...] = Funktionsname(in1, in2, ...)

Funktion [in1, in2,...][out1, out2, ...][ , , ] ( , , )

% Beschreibung - HilfetextAnweisungenendend

Eine Funktion wird in einer Datei gespeichert, die den gleichen Namen besitzt wie die Funktion selbst. Als Dateiendung muss .m verwendet werden. D.h. eine Funktion eulermuss in der Datei  euler.m gespeichert werden.Eine Funktion kann‐ keinen, einen oder mehrere Parameter besitzen e e , e e ode e e e a a ete bes t e

(hier in1, in2, . . . genannt)‐ keinen, einen oder mehrere Rückgabewerte oder Ergebnisse besitzen 

(hier out1 out2 genannt)(hier out1, out2, . . . genannt)

Wichtig : Eine Funktion hat keinen direkten  Zugriff auf den Workspace !Ein‐ und Ausgabeparameter besitzen keine Typinformation 

65

Eine MATLAB‐Funktion kann deshalb keine Variablen aus dem Workspace direkt verändern. Eine Funktion besitzt einen „eigenen Workspace“.

3.2.1 Aufbau einer Funktion

MATLAB Workspace Workspace von umfangMATLAB‐Workspace 

rad

um

Workspace von umfang

umf

r

r

umf

x

function umf = umfang( r )umf = 2*pi*r;r = r + 3;r = r + 3;x = pi*r*r;

end

Die Funktion umfang besitzt eigene lokale Variablen (eigenen Workspace). Diese haben nichts mit den Vari‐

function a = umfang( b )a = 2*pi*b;b = b + 3;

ablen aus dem ‚normalen‘ MATLAB‐Workspace zu tun. Nur über Funktionsparameter und Rückgabewerte können Werte zwischen den beiden Workspaces

h d

x = pi*b*b;end

66

ausgetauscht werden. Werden die Variablen in der Funktion umfang umbenannt, ändert sich überhaupt nichts!

3.2.1 Aufbau einer Funktion

Eingabeparameter, die bei der Definition einer Funktion in einem M‐File verwen‐g p ,det werden, bezeichnet man als „Formalparameter“. Diese Parameter sind zu‐nächst nur Platzhalter und haben keine definierten Werte. Die Eingabeparameter beschreiben, wie eine Funktion aufgerufen werden muss. Erst wenn einebeschreiben, wie eine Funktion aufgerufen werden muss. Erst wenn eine Funktion aufgerufen wird, erhalten die Eingabeparameter konkrete Werte zugewiesen (Aktualparameter).

k i h b i i b i b d b i k i di kFunktionen haben eine eigene Arbeitsumgebung und besitzen keinen direkten Zugriff auf den Workspace, der im Command‐Window verwendet wird. Insbeson‐dere sind die Variablen aus dem Workspace nicht sichtbar. Variablen aus dem MATLAB‐Workspace können von einer Funktion aus nicht direkt verändert werden.

Ein‐ und Ausgabeparameter und Variablen innerhalb einer Funktion sind lokaleEin‐ und Ausgabeparameter und Variablen innerhalb einer Funktion sind lokale Variablen, die nur innerhalb der Funktion bekannt sind. Variablen mit gleichen Namen, die in anderen Funktionen oder im Workspace definiert sind, haben nichts miteinander zu tunnichts miteinander zu tun.

Beim Aufruf einer Funktion werden keine Variablen übergeben sondern es werden Werte kopiert. Bei einem Funktionsaufruf werden den Formalpara‐

67

metern aktuelle Werte zugewiesen. Mit diesen Werten wird die Funktion dann abgearbeitet.

3.2.2 Funktionsnamen

Für Funktionsnamen gelten die gleichen Regeln wie für VariablennamenFür Funktionsnamen gelten die gleichen Regeln wie für Variablennamen

‐ Ein Name beginnt mit einem Buchstaben; danach können Buchstaben, Ziffernoder der Unterstrich _ folgen; keine Umlaute verwenden

‐ Bis zu einer Länge von 31 Zeichen sind Namen eindeutig

‐ MATLAB unterscheidet Groß‐ und Kleinschreibung

Konvention : für Funktionsnamen werden nur Kleinbuchstaben verwendetKonvention : für Funktionsnamen werden nur Kleinbuchstaben verwendet

Beachte : 

Eine Funktion kann mehrmals (unterschiedlich) definiert sein; ebenso kann es eine Variable im Workspace geben, die den gleichen Namen wie eine Funktion besitzt (siehe Calling Functions) ‐> Auflösungsproblematik

"Before assuming that a name should match a function MATLAB checksBefore assuming that a name should match a function, MATLAB checks the current workspace to see if it matches a variable name. If MATLAB finds a match, it stops the search."

f fAuflösungsreihenfolge :

Variable ‐> Nested Functions ‐> Subfunctions ‐> Private Functions

Namen von Funktionen müssen sehr sorgfältig gewählt werden!

68

Namen von Funktionen müssen sehr sorgfältig gewählt werden!

Page 19: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.2.3 Dokumentation einer Funktion

Die Beschreibung (Hilfe‐Text) einer Funktion wird entweder in den Zeilen vor oderDie Beschreibung (Hilfe Text) einer Funktion wird entweder in den Zeilen vor oder nach dem Schlüsselwort function angegeben. Mehrere Zeilen sind erlaubt. Alle Zeilen müssen mit % beginnen.

% Die Funktion function

help funktionsname% Die Funktion . . . %function

function% Die Funktion . . .%

Der Befehl help zeigt die Beschreibung einer Funktion an, d.h. alle Zeilen, die mit % beginnen, bis zur ersten Leerzeile oder der ersten Anweisung.

Di B h ib i F kti i t h i hti d llt i d t f l dDie Beschreibung einer Funktion ist sehr wichtig und sollte mindestens folgende Dinge beinhalten

‐ Kurzbeschreibung der Funktiong

‐ Beschreibung aller Ein‐ und Ausgabeparameter

‐ Beispiel für den Aufruf der FunktionFunktionen, die nicht ausführlich und eindeutig und klar dokumentiert sind, sind völlig wertlos. Bei MATLAB ist das wichtiger als bei der Programmiersprache C, weil die Aufrufparameter und die Rückgabewerte nur Namen aber keine Typinfor‐

69

die Aufrufparameter und die Rückgabewerte nur Namen aber keine Typinformation besitzen.

3.3 Beispiele für Funktionen ‐ Kreisumfang

Schreibe eine Funktion, die den Umfang eines Kreises mit Radius r berechnet., g

function [umf] = umfang( r )%UMFANG : berechne Umfang eines Kreises% umf = umfang( r ) r : Kreisradius% umf = umfang( r ) , r : Kreisradiusumf = 2*pi*r;

end

function umf = umfang1( r )umf = 2*pi*r;

end

function umf = umfang2( r )u = 2*pi*r;

end

u 2 pi r;end

70

3.3 Beispiele für Funktionen – Kreisfläche

Schreibe eine Funktion, die die Fläche eines Kreises berechnet.

function [ fl ] = flaeche( r )%FLAECHE : Fläche eines Kreises mit Radius r berechnen% [ fl ] = flaeche( r ), r: Radius fl: Kreisflächefl = pi*r*r;

endfunction [ FL ] = flaeche1( X )function [ FL ] = flaeche1( X )%FLAECHE1 : Kreisflächen für die Elemente von X berechnen% [ FL ] = flaeche1( X ), X: Array mit Radien, FL: FlächenFL = pi*X.*X;FL pi X. X;

end

71

3.3 Beispiele für Funktionen – Kreisumfang und Fläche

Schreibe eine Funktion, die Kreisumfang und Kreisfläche berechnet ‐ zwei Ergebnis‐se zurückgeben. Mit MATLAB wird das Problem völlig anders gelöst als in C.

function [umf, fl] = kreis( r )umf = 2*pi*r;umf 2 pi r; fl = pi*r.*r;

endErgebnis :2 Variablen

function [erg] = kreis1( r )umf = 2*pi*r; fl = pi*r.*r;

[ f fl] Ergebnis :erg = [umf, fl];endfunction [erg] = kreis2( r )

Zeilenvektor

[ g] ( )umf = 2*pi*r; fl = pi*r.*r;erg = [umf; fl];

Ergebnis :Spaltenvektor

function [u, fl] = kreis3( r )u umfang(r)

gend

72

u = umfang(r);fl = flaeche(r);

end

Page 20: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.3 Beispiele für Funktionen – Kreisumfang und Fläche

function [ UMF, FL ] = kreis5( X )function [ UMF, FL ] kreis5( X )%KREIS5 : berechne Umfang und Fläche für die Elemente von X% [ UMF, FL ] = kreis5( X ) , X : Array mit Radien% UMF : Array mit den Kreisumfängeny g% FL : Array mit den KreisflächenUMF = 2*pi*X;FL = pi*X.*X;end

Hausaufgabe : Erweitern Sie die Funktion kreis5 so, dass auch die Kugelvolumina und die K geloberflächen berechnet erden Testen Sie ihr Programm in dem

73

die Kugeloberflächen berechnet werden. Testen Sie ihr Programm, in dem Sie für X einen Skalar, einen Vektor und eine Matrix verwenden.

3.4 Subfunctions

Ein M‐File kann mehrere Funktionen enthalten. Aber nur die Funktion, die mit dem ,Dateinamen übereinstimmt (Primary Function) kann von außerhalb aufgerufen werden. Die anderen Funktionen (Subfunctions) können von außen nicht aufge‐rufen werden. Subfunctions werden nur von der Primary Function oder anderenrufen werden. Subfunctions werden nur von der Primary Function oder anderen Subfunctions des gleichen M‐Files aufgerufen.

Primary Function kreis4Funktions und DateinameFunktions‐ und Dateiname sind identisch!!

S bf ti fSubfunction  umfang

Subfunction  flaeche

74

Kapitel 4 Kontrollstrukturen und Bedingungen

Kapitel 4 Kontrollstrukturen und BedingungenKapitel 4 – Kontrollstrukturen und Bedingungen

4.1   Bedingungen

4.2   Logische Verknüpfungen

4 3 Kontrollstrukturen4.3   Kontrollstrukturen

4.3.1 Alternativen

4 3 2 Schleifen4.3.2 Schleifen

4.3.3 Sprunganweisungen

4 4 B i i l4.4   Beispiele

75

4 Kontrollstrukturen und Bedingungen

In MATLAB gibt es im wesentlichen die gleichen Kontrollstrukturen wie in der g gProgrammiersprache C.

• Sequenz ‐ Folge

• Verzweigung Alternative Auswahl• Verzweigung – Alternative – Auswahl 

• Schleife – Iteration – Wiederholung 

• Funktionen

Weitere wichtige Elemente bei der Formulierung von Kontrollstrukturen sind Bedingungen ( Vergleiche ) und deren Verknüpfung durch logische Operatoren( logische Ausdrücke ).( logische Ausdrücke ).

Beachte : • Bei MATLAB sind viele Operatoren und Funktionen auch für Arrays definiert. 

• Es gibt spezielle Operatoren um auf Zeilen oder Spalten oder Teilbereiche einer Matrix zuzugreifen. 

• Aufgaben die in der Programmiersprache C eine Schleife erfordern können mit• Aufgaben, die in der Programmiersprache C eine Schleife erfordern, können mit Hilfe dieser zusätzlichen Operatoren und Funktionen durch einen „einfachen Ausdruck“ programmiert werden.

76

Skalarprodukt : x'x y(1:3)' x(4:6)Matrix‐Vektormultiplikation : y=Ax

Page 21: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4.1 Bedingungen

Ein logischer Ausdruck (vereinfacht Vergleich) erlaubt Entscheidungen (Ja/Nein‐g ( g ) g ( /Fragen). Das Ergebnis eines logischen Ausdrucks ist ein Wert vom Datentyp logical. Eine Variable vom Datentyp logical kann die Werte true oder false annehmen.false annehmen.

Bei MATLAB gibt es folgende Vergleichsoperatoren 

< kleiner <= kleiner gleich

> größer >= größer gleich

== gleich ~= ungleich ( in C != )

Beispiele :

a < b Ist a kleiner als b ?

b Besitzen a und b den gleichen Wert?a == b Besitzen a und b den gleichen Wert?

a ~= b Besitzen a und b verschiedene Werte?

Beachte :Beachte : Die Prüfung auf Gleichheit oder Ungleichheit macht bei Gleitkommazahlen häufig keinen Sinn (Rundungsfehler) und führt manchmal zu unerwarteten Ergebnissen oder Fehlern !

77

Ergebnissen oder Fehlern !

4.1 Bedingungen

>> a = 3a =

3 Die Variable x erhält als Wert das E b i i l i h A d k

3>> b = 5b =

5

Ergebnis eines logischen Ausdrucks. Variable x ist daher vom Typ logical1  entspricht  true5

>> x = a < bx =

1

0  entspricht  false

1>> whos

Name Size Bytes Classa 1x1 8 double b 1x1 8 double x 1x1 1 logical

>> x = falsex =

0

78

>> x = 1 Welchen Typ besitzt die Variable nach dieser Anweisung?

4.1 Bedingungen

Beachte : Bedingungen sind auch für Arrays definiert!g g y

Beispiel : 

A und B sind zwei 22‐Matrizen. 

Was bedeutet A < B ?  Was ist das Ergebnis von A < B ?

>> A = [ 1 2; 3 4] Sind die Operanden in einem logischen >> A = [ 1 2; 3 4]A =

1 23 4

Ausdruck Arrays gleicher Größe, dann werden die Bedingungen elementweisegeprüft. Das Ergebnis ist ein Array. Es 3 4

>> B = [ 1 3; 4 -1]B =

1 3

g p g ybesitzt die gleiche Größe wie die Oper‐anden der Bedingung. Das Array ist vom Typ logical.

4 -1>> C = A < BC =

Typ logical.In der Programmiersprache C müsste man für diese Aufgabe zwei geschachtelte hl if i0 1

1 0>> whos C

Schleifen programmieren.

79

Name Size Bytes ClassC 2x2 4 logical

4.2 Logische Verknüpfungen

Zur Verknüpfung von Bedingungen gibt es drei logische Operatorenp g g g g g p

&& UND

|| ODER

NICHT N ti ( i C ! )~ NICHT – Negation ( in C ! )

Beispiele :

( a > b ) && ( b ~= 5 ) a größer als b und b ungleich 5( a > b ) && ( b 5 ) a größer als b  und b ungleich 5

( 0 < a ) && ( a < 1 ) liegt a zwischen 0 und 1, ohne die Grenzen 

( 0 <= a ) && ( a <= 1 ) liegt a zwischen 0 und 1, mit den Grenzen 

( a < 0 ) || ( a > 1 ) a ist kleiner als 0 oder größer als 1

~( a < 0 ) nicht a kleiner als 0

Beachte :  

&& und || werden von links nach rechts ausgewertet und sind short‐circuit

Die Operatoren & und | werten einen Ausdruck vollständig ausDie Operatoren & und | werten einen Ausdruck vollständig aus.

Beispiele :

( a > 3) && ( 1 == starte()) ( 1 == starte()) && ( a > 3)

80

( a > 3) && ( 1 starte()) ( 1 starte()) && ( a > 3)( a > 3) & ( 1 == starte()) ( 1 == starte()) & ( a > 3)

Page 22: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4.3 Kontrollstrukturen

In MATLAB gibt es im wesentlichen die gleichen Kontrollstrukturen wie in C.g gDie Syntax (Schreibweise) der Kontrollstrukturen in MATLAB unterscheidet sich aber von der Syntax in der Programmiersprache C.

4 3 1 Alternativen4.3.1 Alternativenbedingte Anweisung – einfaches ifif-else‐Anweisunggverschachtelte if-else‐Anweisungswitch‐Anweisung

4.3.2 Schleifen ‐Wiederholungenfor‐Schleifewhile‐Schleifewhile Schleife

4.3.3 Sprunganweisungenbreakcontinuereturn

81

4.3.1 Alternativen

Wie in C gibt es verschiedene Möglichkeiten um Alternativen zu programmieren. g g p g

a) Einfache  if-Abfrageif logischerAusdruck if a < 0 if ( a < 0 )g

Anweisungenend

a = 0;endb = a;

( )a = 0;

endb = a;

Die runden Klammern um die Bedingung sind optional. Der Anweisungsblock muss stets durch das Schlüsselwort end abgeschlossen werden.

b a; b a;

b)  if-else-Abfrageif logischerAusdruck if a < 0 if ( a < 0 )

Anweisungen-1else

Anweisungen-2

b = -a;else

b = a;b = -a;

elseb = a;g

end;

endc = sqrt(b);

;endc = sqrt(b);

82

4.3.1 Alternativen

c) Verschachtelte if-else‐Strukturen )

if logischerAusdruck-1Anweisungen-1

lif logischerAusdruck-1

Anweisungen-1l if l i h A d k 2else

if logischerAusdruck-2Anweisungen-2

elseif logischerAusdruck-2Anweisungen-2

elseif logischerAusdruck-3else

if logischerAusdruck-3Anweisungen-3

Anweisungen-3elseif

...gelse

...end

else...

endendend

endendEin elseif wird durch ein anderes elseif, ein else oder ein endabgeschlossen.Verschachtelung :

• Jedes ifmuss durch ein endabgeschlossen werden

83

abgeschlossen werden. • Ohne richtige Formatierung wird 

es unübersichtlich

4.3.1 Alternativen

c) Verschachtelte if-else‐Strukturen – Beispiele) p

if i == 1disp('i ist 1')

if i == 1disp('i ist 1')

if i == 1disp('i ist 1')

elseif i == 2 disp('i ist 2')

elseelseif i == 2

disp('i ist 2')

else if i == 2 disp('i ist 2')

elsedisp('i ist 3')

endelse

disp('i ist 3')end

disp('i ist 3')endend

if i == 1end

if i == 1Welche Anweisungs‐disp('i ist 1')

elseif i == 2

disp('i ist 1')else if i == 2 disp('i ist 2')

Welche Anweisungs‐blöcke sind korrekt, welche falsch?W l h A d ü kdisp('i ist 2')

elsedisp('i ist 3')

elsedisp('i ist 3')end

Welche Ausdrücke sind gut formatiert, welche schlecht?

84

end

Page 23: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4.3.1 Alternativen

d) Fallunterscheidung  switch - case ) g

switch Auswahlausdruckcase Wert-1

Anweisungen 1

switch ( tag )case 'Montag'

display('Arbeiten')Anweisungen-1case Wert-2

Anweisungen-2

display( Arbeiten )case 'Dienstag'

display('Arbeiten')case 'Mittwoch'. . .

otherwiseAnweisungen-1

display('Frei')case 'Donnerstag'

display('Arbeiten')end case 'Freitag'

display('Arbeiten')otherwiseswitch ( note )

display('Wochenende') endDie switch‐Anweisung wertet einen Aus‐druck aus der mehrere diskrete Werte (nicht

( )case 1

disp('sehr gut')case 2 druck aus, der mehrere diskrete Werte (nicht 

notwendig ganze Zahlen wie in der Program‐miersprache C) annehmen kann. Im Gegen‐satz zu C entfällt die break Anweisung Der

disp('gut')otherwise

disp('mehr üben')

85

satz zu C entfällt die break‐Anweisung. Der otherwise‐Teil ist optional und kann deshalb auch entfallen. 

end

4.3.2 Schleifen

Bei Schleifen unterscheidet man zwischen Zählschleifen ( for‐Schleife ) und ( )Wiederholschleifen ( while‐Schleifen ). Im Gegensatz zu C gibt es bei MATLAB keine do‐while‐Schleife.

Zähl Schleife : Wiederhol Schleife :Zähl‐Schleife : Wiederhol‐Schleife :

for index = startwert : endwertAnweisungen

while BedingungAnweisungen

end endfor ( index = startwert : endwert ) while ( Bedingung )

Anweisungenend

Anweisungenend

for index = startwert : inkrement : endwertAnweisungen

endendindex : Zählvariable (kein Vektor!) ‐ typischerweise eine ganze Zahl 

bei ersten Durchlauf wird  index auf den Startwert gesetzt

86

inkrement :  Wert, um den die Zählvariable index nach einem Schleifen‐durchlauf erhöht wird , Defaultwert für inkrement ist 1

4.3.3 Sprunganweisungen

Eine Schleife kann auf verschiedene Weise verlassen werden :

- breakdie innerste umgebende Schleife wird verlassen

- continueein neuer Schleifendurchlauf der innersten umgebenden Schleife wirdausgeführt

- returnRücksprung aus einer Funktion zur aufrufenden Funktionder Rücksprung erfolgt auch über Schleifenebenender Rücksprung erfolgt auch über Schleifenebenen

while ( Bedingung-a )Anweisungen-1

while ( Bedingung-a )Anweisungen-1Anweisungen 1

if ( Bedingung-b )break;

end

Anweisungen 1if ( Bedingung-b )

continue;endend

Anweisungen-2end

endAnweisungen-2

end

87

4.4 Beispiele – Quadratwurzel berechnen

Berechne die Quadratwurzel einer positiven Zahl x nach dem Heron‐Verfahren.

Iteration : ( Heron‐Verfahren )

für jeden positiven Startwert x gilt :

Q p

nn1n xxx21x

xxlim für jeden positiven Startwert  x1 gilt :     xxlimn n

Beispiel  :

5 0 Startwert setzen xa = 10.0

2551

x = 5.0

Startwert   x1 = 10 ,  n = 1

Startwert setzen xa 10.0

Zähler i = 0, rf = 1.0

solange i <= 50 und rf > 10-6 25.5xxx2

x 112

101.325.5525.521xxx

21x 223

solange i 50 und rf 10

i = i + 1

xn = 0 5 ( xa + x / xa )22

x4 = 2. 356 737 272 644 183

x = 2 239 157 222 737 191

xn 0.5 ( xa + x / xa )

rf = ( xn - xa ) / xn

rf < 0 ?x5 = 2. 239 157 222 737 191

x6 = 2. 236 070 108 532 850

x = 2 236 067 977 500 805

rf < 0 ?

rf = -rf

xa = xn

88

x7 = 2. 236 067 977 500 805

x8 = 2. 236 067 977 499 790

xa xn

Rückgabe von xn

Page 24: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Kapitel 5 Datentypen

Kapitel 5 DatentypenKapitel 5 – Datentypen

5.1   Datentypen bei MATLAB

5.2   Zahlenformate ‐ Literale

5 3 Regeln für den Umgang mit Datentypen5.3   Regeln für den Umgang mit Datentypen

5.4   Mathematische Konstanten

5 5 K l Z hl5.5   Komplexe Zahlen

89

5 Datentypen

Der grundlegende Datentyp in MATLAB ist der Datentyp doubleDer grundlegende Datentyp in MATLAB ist der Datentyp  double .

Wenn es nicht explizit anders vereinbart wird, dann sind alle Elemente eines Arrays immer vom Typ double.ays e o yp doub e.

Neben dem Datentyp double gibt es eine Reihe von weiteren Datentypen, die für spezielle Anwendungen gebraucht werden :

• Darstellung von Text/Strings    'Hallo'• logische Werte  – true und  false• Variablen die nur ganzzahlige Werte annehmen dürfen• Variablen, die nur ganzzahlige Werte annehmen dürfen

• Speicherplatzeffiziente Darstellung von Werten

• Datentypen für komplexe DatenstrukturenDatentypen für komplexe Datenstrukturen

Wichtige Unterschiede zur Programmiersprache C :

• Der Datentyp einer Variablen kann sich durch Zuweisungen ändern.e ate typ e e a ab e a s c du c u e su ge ä de .

• Datentypen dürfen nicht ohne weiteres in einem Ausdruck gemischt werden

• Das Verhalten bei Overflow und Underflow ist völlig anders !

90

• Andere Regeln bei Typkonvertierung

5.1 Datentypen bei MATLAB

Die Programmiersprache MATLAB definiert folgende Datatypen (Classes) :g p g yp ( )

double singleint8 int16 int32 int64uint8 uint16 uint32 uint64l i llogicalcharfunction handle function handle arrayfunction_handle function handle array

cell cell array

struct structure arrayy

Daneben gibt es noch einige spezielle Datentypen, die aber selten gebraucht werden.

91

5.1 Datentypen bei MATLAB

Primitive Datentypen : Speicherplatz und Wertebereich, führende Stellenyp p p ,

Typ Bytes Wertebereich Führende Stellen

double 8 ±1.810308 ±4.910-308 15 – 16double 8 ±1.8 10 ±4.9 10 15 16single 4 ±3.41038 ±1.410-38 6 - 7int8 1 -128 … +127int8 1 128 … +127int16 2 -215 … 215-1int32 4 -231 … 231-1int32 4 2 … 2 1int64 8 -263 … 263-1uint8 1 0 255uint8 1 0 … 255uint16 2 0 … 216-1uint32 4 0 232-1uint32 4 0 … 2 1uint64 8 0 … 264-1char 2 0 216-1

92

char 2 0 … 2 1logical 1 Bit true ( 1 ), false ( 0 )

Page 25: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

5.2 Zahlenformate  ‐ Literale

ZahlenformateZahlenformate

• ganze Zahlen in der Dezimaldarstellung mit oder ohne Vorzeichen  13 -20 +300

• Gleit‐ oder Fließkommazahlen mit Dezimalpunkt1.5 -2.1 3.0 .26 +.25 3.1415

• Gleit‐ oder Fließkommazahlen in der Exponentialdarstellung• Gleit‐ oder Fließkommazahlen in der Exponentialdarstellung2.1e+3 .1e-5 2e3 0.2E-5

• Komplexe Zahlen – imaginäre Einheit i oder j3 + 4i 3 + 4j nicht 3 + 4*i

Zeichen Strings Character Arrays

Literale

Zeichen – Strings – Character‐Arrays• Character 'T'• Zeichenketten 'Das ist ein Text'

( in C : "Das ist ein Text" )

• Keine binäre Null am Ende

93

5.2 Zahlenformate  ‐ Literale

>> x = 2.7 Man verwendet Literale, um einer Va‐i bl i k k t W t i>> x 2.7

x =2.7000

>> whos x

riablen einen konkretenWert zuzuweisen Beispiel :   Literal 2.7

Variable x wird angelegt und initialisiertName Size Bytes Classx 1x1 8 double

>> x = double(2.7)

Variable x wird angelegt und initialisiert Typ der Variablen x ist per Default doubleDer Datentyp von x wird explizit festgelegtx =

2.7000>> x = uint16(2.7)

Der Datentyp von x wird explizit festgelegt.  Diese Variante ist weniger fehleranfällig. Der Programmcode lässt sich besser lesen.

x =3

>> whos xEs wird eine Variable vom Typ uint16 er‐zeugt. Mit dem Literal 2.7 wird ein Wert zu‐gewiesen Hierbei wird 2 7 auf 3 gerundetName Size Bytes Class

x 1x1 2 uint16>> x = 4

MATLAB ä d b i di Z i

gewiesen. Hierbei wird 2.7 auf 3 gerundet.

x =4

>> whos xName Size Bytes Class

MATLAB ändert bei dieser Zuweisung den Datentyp von x automatisch und zwar auf den Defaulttyp double .

94

Name Size Bytes Classx 1x1 8 double

5.3 Regeln für den Umgang mit Datentypen

Einige Regeln für den Umgang mit Datentypeng g g g yp

a) Bei der Initialisierung einer Variablen, deren Typ nicht double sein soll, muss der Typ explizit angegeben werden.

k = uint8(56)n = int64(33123456789)

b) Der Typ einer Variablen kann sich durch eine Zuweisung ändernb) Der Typ einer Variablen kann sich durch eine Zuweisung ändern.

k = uint8(56)k = 45; k = double(45); ; ( );

Durch die letzte Anweisung wird der Typ der Variablen k von uint8 nach double geändert. Das kann beabsichtigt oder unbeabsichtigt sein!

c) Bei Overflow oder Underflow wird auf den größten bzw. kleinsten darstellbaren Wert abgeschnitten. 

k = uint8(300)k uint8(300)Die Variable k erhält in diesem Fall den Wert 255.

Es gibt noch viele weitere Regeln zu beachten – siehe MATLAB‐Dokumentation.

95

Wir verwenden nur den Typ double!

5.4 Mathematische Konstanten

Mathematische Konstanten :at e at sc e o sta te :

eps Floating‐point relative accuracy – 2.2204e-016i Imaginary unit ‐ 3.5i , 1 + 5iInf Infinity z.B.   1/0intmax Largest value of specified integer type   ‐ 2147483647

intmax('uint16')intmin Smallest value of specified integer type

j Imaginary unit ‐ 2.4 + 5jNaN Not‐a‐Number z.B.   0/0pi Ratio of circle's circumference to its diameter ‐ 3.1415...realmax Largest positive floating‐point number ‐ 1.7977e+308

ll i i li d fl i i brealmin Smallest positive normalized floating‐point number2.2251e-308

B h K kö h üb h i b d B

96

Beachte : Konstanten können auch überschrieben werden, z.B.pi = 3.17

Page 26: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

5.5 Komplexe Zahlen

MATLAB kann mit komplexen Zahlen umgehen. Sehr viele Funktionen arbeiten p gauch mit komplexen Zahlen.

Für die imaginäre Einheit werden die Symbole i oder j verwendet.

Um eine Verwechslung mit der imaginären Einheit zu vermeiden, sollte man bei MATLAB die Variablennamen i und j nicht verwenden.

>> x = sqrt(-2) Funktionen für komplexe>> x sqrt( 2)x =

0 + 1.4142i>> whos x

Funktionen für komplexe Zahlen :imag

Name Size Bytes Class Attributesx 1x1 16 double complex>> x = 3 + 5i

conjangleabsx =

3 + 5.0000i>> y = x6j

absrealisreal

y =-30 + 18.0000i

>> x*yWas ist der Unterschied zwischen

x = 5i und x = 5i ?

97

ans =-1.8000e+002 -9.6000e+001i

Kapitel 6     Anwendungen aus der Analysis

Kapitel 6 Anwendungen aus der AnalysisKapitel 6     Anwendungen aus der Analysis

6.1 Polynome6 1 1 Funktionswert bestimmen6.1.1 Funktionswert bestimmen

6.1.2 Nullstellen eines Polynoms

6.1.3 Ableitung eines Polynomsg y

6.1.4 Polynom integrieren 

6.2    Quadratur – Bestimmtes Integral berechnen

6.3 Function Handle

6.4 Globale Variablen

6.5 Aufgaben

98

Polynom n‐ten Grades :

6.1   Polynome

y

012

21n

1nn

n axaxa...xaxa)x(y

21nn axaxaxaxa)x(y

Mathematik

MATLAB

Beispiel : 7x4x)x(y 23

1nn2

1n1n

2n

1 axaxa...xaxa)x(y MATLAB

Ein Polynom n‐ten Grades wird durch die Angabe von  n+1 Koeffizienten ai ein‐deutig festgelegt

7a0a4a1a 4321

deutig festgelegt. 

Die Werte der Koeffizienten werden in einem Vektor der Länge n+1 gespeichert (Zeilen‐ oder Spaltenvektor). Das erste Element des Vektors ist der Koeffizient des Terms xn. Das letzte Element des Vektors ist der konstante Term des Polynoms.

]7;0;4;1[koef]7,0,4,1[koef

Beim Arbeiten mit Polynomen wird häufig ein Vektor mit den Werten der Koeffi‐zienten des Polynoms als Parameter an MATLAB‐Funktionen übergeben. Mit Hilfe des Vektors kann der Funktionswert des Polynoms an einer beliebigen Stelle x

99

des Vektors kann der Funktionswert des Polynoms an einer beliebigen Stelle x berechnet werden, ebenso Ableitungen, das Integral oder Nullstellen.

Funktionswert an einer vorgegebenen Stelle x berechnen:

6.1.1   Funktionswert bestimmen

g g

7x4x)x(y 23

1nn2

1n1n

2n

1 axaxa...xaxa)x(y

7a0a4a1a7x4x)x(y 3

function y = pvalue(7a0a4a1a 4321

end

> koef = [ 1 -4 0 7 ];> x = 2 3;

> koef = [ 1; -4; 0; 7 ];> x = [ 1 2 2 4 3 7 ];

100

> x = 2.3;> y = pvalue(koef, x);

> x = [ 1.2 2.4 3.7 ];> y = pvalue(koef, x);

Page 27: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Die Funktion pvaluemuss nicht selbst programmiert werden (ein Polynom kann 

6.1.1   Funktionswert bestimmen

p p g ( ywesentlich besser und effektiver ausgewertet werden als in pvalue gezeigt –Hornerschema). Für die Auswertung eines Polynoms und für viele andere Aufga‐ben gibt es bereits fertige Funktionen – diese Funktionen sollte man verwenden!ben gibt es bereits fertige Funktionen  diese Funktionen sollte man verwenden!

Aufgabe : Funktionswerte bestimmen

Die MATLAB‐Funktion polyval berechnet die Funktionswerte eines Polynoms d ll “ b i i k l d i b li bi i kan der „Stelle x“, wobei x ein Skalar oder ein beliebiges Array sein kann.

> koef = [ 1; -4; 0; 7 ];> koef = [ 1 -4 0 7 ];> x = [-2:0.1:5];> y = polyval(koef, x);

> x = 4;> y = polyval(koef, x);

polyval scr mpolyval Evaluate polynomial.Y = polyval(P,X) returns the value of a polynomial P evaluatedat X. P is a vector of length N+1 whose elements are the

polyval_scr.m

gcoefficients of the polynomial in descending powers.

Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)If X is a matrix or vector, the polynomial is evaluated at all

101

If X is a matrix or vector, the polynomial is evaluated at allpoints in X.

Aufgabe : Nullstellen eines Polynoms bestimmen

6.1.2   Nullstellen eines Polynoms

Die Funktion roots berechnet die Nullstellen eines Polynoms und gibt diese in einem Spaltenvektor zurück.

roots Find polynomial rootsroots Find polynomial roots.roots(C) computes the roots of the polynomial whose coefficientsare the elements of the vector C. If C has N+1 components,

> koef = [ 1 -4 0 7 ];the polynomial is C(1)*X^N + ... + C(N)*X + C(N+1).

Bemerkung :> nst = roots(koef)

nst = 3.39141.7729

• Ein Polynom n‐ten Grades besitzt genaun Nullstellen.

• Die Nullstellen eines Polynoms können -1.1642

> polyval(koef,nst)ans = 1 0e 014 *

ykomplex sein.

• Die Nullstellen für Polynome 5‐ten und höheren Grades müssen numerisch ans = 1.0e-014 *

0.1776-0.1776

höheren Grades müssen numerisch bestimmt werden.

V ifik i d ä hli h

102

0.5329Verifikation, dass tatsächlich Nullstellen vorliegen – o.k. roots_scr.m

Aufgabe : Die Ableitung eines Polynoms bestimmen

6.1.3   Ableitung eines Polynoms

g g y

Die Funktion  polyder (der – derivative ‐ Ableitung) berechnet die Ableitung eines Polynoms. Das Ergebnis ist stets ein Zeilenvektor, der die Koeffizienten des abgeleiteten Polynoms enthält Die Ableitung wird analytisch berechnetdes abgeleiteten Polynoms enthält. Die Ableitung wird analytisch berechnet.

> koef = [ 1 -4 0 7 ];> y = polyder(koef)

Beispiel :

Berechne die Ableitung des Polynoms :

7x4x)x(y 23 > y = polyder(koef)y =

3 -8 0

g y

Das Ergebnis ist das Polynom :

x8x3)x('y 2 > extrema = roots(y)extrema = 0

2.6667Die Funktion polyder liefert die Koeffizi‐enten der ersten Ableitung des Polynoms 2.6667

> polyval(koef,extrema)ans = 7.0000

2 4815

enten der ersten Ableitung des Polynoms.

Anwendung : Bestimme die lokalen Extrema eines Poly‐

-2.4815noms. Aus der Ableitung werden mit Hilfe der Funktion roots die Nullstellen der ersten Ableitung berechnet. Anschließend 

polyder_scr.m

103

werden die Funktionswerte an den Extrem‐stellen berechnet.

Skizzieren Sie das Polynom! Verwenden Sie nst und extrema.

>> help polyint6.1.4   Polynom  integrieren

>> help polyintpolyint Integrate polynomial analytically.

polyint(P,K) returns a polynomial representing theintegral of polynomial P, using a scalar constant ofintegration K.polyint(P) assumes a constant of integration K=0.Class support for inputs p, k:pp p p,

float: double, singleSee also polyder polyval polyvalm polyfitSee also polyder, polyval, polyvalm, polyfit.Reference page in Help browser

doc polyintBeachte : 

104

Die Funktion  polyint integriert analytisch ‐ die Stammfunktion ergibt sich aus dem Vektor, den polyint zurückgibt (Koeffizienten eines Polynoms).

Page 28: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Aufgabe : 

6.1.4   Polynom integrieren

gBerechne das bestimmte Integral unter Verwendung der Funktion polyint.

4

234

dx)7x4x(dx)x(y 22

dx)7x4x(dx)x(y

105

Aufgabe :  

6.2   Quadratur ‐ Bestimmtes Integral berechnen

Berechne den Wert eines bestimmten Integrals bei gegebenen Integranden.

4

234

dx)7x4x(dx)x(y 4

x4

dxedx)x(y2

22

22

Das linke Integral kann analytisch berechnet werden, da man eine Stamm‐funktion aus elementaren Funktionen angeben kannfunktion aus elementaren Funktionen angeben kann.

Die Funktion polyint berechnet ein Integral analytisch das Ergebnis ist

cx7x34x

41 34

Die Funktion polyint berechnet ein Integral analytisch – das Ergebnis ist wieder ein Polynom. Die Funktion polyint kann aber nur Polynome integrieren.

Das rechte Integral kann nicht analytisch berechnet werden. Der Wert des Inte‐grals muss numerisch bestimmt werden. Hierzu gibt es verschiedene Verfahren, z.B. das Trapezverfahren oder das Simpsonverfahren.p p

Wichtige Forderung an eine flexible Integrationsfunktion :

An die Integrationsfunktion wird neben den Integrationsgrenzen auch der Inte‐

106

grand als Parameter (d.h. eine MATLAB‐Funktion) übergeben. Die Integrations‐funktion kann dann Integrale von beliebigen Funktionen berechnen.

6.2   Quadratur ‐ Bestimmtes Integral berechnen

4

234

d)74(d)( 4

x4

dd)(2

function y = polynom1( x ) 2

23

2

dx)7x4x(dx)x(y 2

x

2

dxedx)x(y

function y = gauss( x )y p y ( )koef = [ 1 -4 0 7 ];y = polyval(koef, x);

end

function y = gauss( x )y = exp( -x.x );

end gaus.mpolynom1 m> z = quad( @polynom1, 2, 4 );end

> z = quad( @gauss, 2, 4 );polynom1.m

quad Numerically evaluate integral, adaptive Simpson quadrature.Q = quad(FUN,A,B) tries to approximate the integral of scalar-valuedfunction FUN from A to B to within an error of 1.e-6 using recursived ti Si d t FUN i f ti h dl Th f tiadaptive Simpson quadrature. FUN is a function handle. The function

Y=FUN(X) should accept a vector argument X and return a vector resultY, the integrand evaluated at each element of X.

@polynom1, @gauss sind function handlesDurch das function handle wird festgelegt, welcher Integrand vom Integrations‐verfahren verwendet wird – „wie y(x) berechnet wird“.

107

„ y( )@name :  namemuss der Name eines m‐Files sein oder eine bekannte MATLAB‐

Funktion z.B. sin oder exp

6.2   Quadratur ‐ Bestimmtes Integral berechnen

4

234

d)74(d)( 4

x4

dd)(2

function y = polynom1( x ) 2

23

2

dx)7x4x(dx)x(y 2

x

2

dxedx)x(y

function y = gauss( x )y p y ( )koef = [ 1 -4 0 7 ];y = polyval(koef, x);

end

function y = gauss( x )y = exp( -x.x );

end m‐File : gaus.m

> z = quad( @polynom1, 2, 4 );end

> z = quad( @gauss, 2, 4 );Die Verwendung der Integranden polynom1 und gauss durch die Funktion quadist nicht direkt sichtbar! Beide Funktionen müssen aber als m‐Files vorhanden sein.

function z = quad( fun,a,b ). . . function y = fun( x )

. . .x. . .

end. . .

endy m‐File : fun.m

108

Frage :  Wie kann z.B. der Aufruf der Funktion gauss durch die Funktion quadsichtbar gemacht werden?

Page 29: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

6.2   Quadratur ‐ Bestimmtes Integral berechnen

44

2function y = gauss( x )

2

x

2

dxedx)x(y2function y gauss( x )

y = exp(-x.x);fprintf('length =%d\n', length(x));fprintf(' x=%f\n' x);fprintf(' x=%f\n', x);

end Die beiden fprintf‐Befehle sollen zeigen, wie die Funktion gauss von der Funktion quad aufgerufen wird.

function y = gauss( x )

Funktion quad aufgerufen wird.

function y = gauss( x )y = exp(-xx);

end

109

function handle :

6.3   Function Handlehandle (engl.) : Henkel oder Griffu ct o a d e :

Ein function handle ist ein eigener Datentyp, der einen Verweis (Funktionszeiger) auf eine Funktion speichert. In einer Variablen vom Typ function_handle wird gespeichert um welche Funktion es sich konkret handelt Ein function handle wirdgespeichert, um welche Funktion es sich konkret handelt. Ein function handle wird häufig an eine andere Funktionen übergeben, damit diese die Funktion, die durch das function handle beschrieben wird, aufrufen kann.

> hd1 = @polynom1> hd2 = @sin

Zwei Variablen vom Typ function_handlewerden erzeugt und initialisiert

quad_scr1.m

> hd2 = @sin> x = quad(hd1,1,3)> y = quad(hd2,0,pi)

An die Funktion quad wird jeweils ein functionhandle übergeben. quad kann die entsprechende Funktion aufrufen und das Integral berechnen.

> help function_handleFUNHANDLE = @FUNCTION NAME returns a handle to the named function

> z = quad(@cos,0,pi) Funktion aufrufen und das Integral berechnen.

FUNHANDLE = @FUNCTION_NAME returns a handle to the named function, FUNCTION_NAME. A function handle is a MATLAB value that provides ameans of calling a function indirectly. You can pass function handlesin calls to other functions (often called function functions). You

110

can also store function handles in data structures for later use (forexample, as Handle Graphics callbacks). A function handle is one of the standard MATLAB data types. Its class is 'function_handle'.

Beispiel : Anwendung von function handles

6.3   Function Handle

e sp e : e du g o u ct o a d esSchreiben Sie eine Funktion plot_fktn, die eine Funktion im Intervall ‐5 bis 5 zeichnet. Die Funktion, die gezeichnet werden soll, wird als Parameter (vom Typ function handle) übergebenfunction_handle) übergeben.

function plot_fktn( func, dx )x = [-5:dx:5];

> hd1 = @gauss> hd2 = @sin[ ];

y = func( x);plot(x, y);

> hd2 @sin> plot_fktn(hd1,0.1)> plot_fktn(hd2,0.01)

l t fkt (@ 0 1)end > plot_fktn(@cos,0.1)

function y = gauss( x )

plot_fktn.m

function y = gauss( x )y = exp(-x.x);fprintf('n=%d\n',length(x));dend

111

Diskussion :

6.4   Globale Variablen

Die Lösung für die numerische Integration von Polynomen mit Hilfe der Funktion quad hat den Nachteil, dass man für jedes Polynom ein eigenes m‐File benötigt. 

function y = polynom2( x, koef )y = polyval(koef, x);

endfunction y = polynom1( x )

koef = [ 1 -4 0 7 ];y = polyval(koef, x);

> z = quad( @polynom2, 2, 4 );> z = quad( @polynom1, 2, 4 );end

q ( @p y , , );Man kann versuchen, die Koeffizienten des Polynoms als Parameter zu übergeben (polynom2). Diese Lösungsvariante funktioniert aber nicht, da die Funktion  quad

q ( @p y , , );

ein function handle einer Funktion der Form  y = fun(x) erwartet. Die Koeffizi‐enten des Polynoms können daher nicht als Parameter übergeben werden.

Eine Lösung für dieses und eine Reihe ähnlicher Probleme bieten globale VariablenEine Lösung für dieses und eine Reihe ähnlicher Probleme bieten globale Variablen. Eine globale Variable kann von mehreren Funktionen und im Workspace verwendet werden. Alle Funktionen und auch der Workspace dürfen die globale Variable verändern Jede Veränderung des Wertes ist für die anderen Funktionen

112

Variable verändern. Jede Veränderung des Wertes ist für die anderen Funktionen sichtbar. Eine globale Variable wird nur einmal im Speicher gehalten.

Page 30: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

6.4   Globale Variablen

global Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function, defined by an M-file, has its own local variables, which are separate from those of other functions, and from those of the base workspace. However, if several functions, and possibly the base workspace, all declare a particular name asglobal, then they all share a single copy of that g , y g pyvariable. Any assignment to that variable, in any function, is available to all the other functions declaring itavailable to all the other functions declaring it global.If the global variable doesn't exist the first time you issue the global statement, it will be initialized to the empty matrix.

113

Integration beliebiger Polynome unter Verwendung von globalen Variablen :

6.4   Globale Variablen

function y = polynom3( x )global koef;y = polyval(koef x);

M‐File für die Funktion polynom3Diese Funktion definiert die Variablek f l l b l V i bl Di V i bl

> global koef;

y = polyval(koef, x);end koef als globale Variable. Die Variable 

besitzt zunächst keinen Wert.

I W k i d di V i bl k f> global koef;> koef = [ 3 0 0 ];> z = quad(@polynom3,1,10)

Im Workspace wird die Variable koefebenfalls als globale Variable definiert, danach erfolgt eine Wertzuweisung.

z =999

> koef = [ 4 0 0 0 ]; 999xdxx3 101

310

1

2 [ ];> z = quad(@polynom3,1,10)z =

9999

1

9999xdxx4 101

410

1

3 d 39999 1

Die Variable koefmuss zweimal als globale Variable definiert werden, in der Funktion polynom3 und imWorkspace oder im aufrufenden Skript. Der Wert

quad_scr3.m

114

Funktion polynom3 und im Workspace oder im aufrufenden Skript. Der Wert von koef wird hier im Workspace gesetzt und verändert, in  polynom3gelesen und an  polyval übergeben. 

Aufgabe‐1 :

6.5   Aufgaben

u gabe :Schreiben Sie in ein Skript mit Namen analysis.m die Anweisungen zur Lösung der folgenden Aufgaben.

1 St ll Si di F kti i d t d it7x4x)x(y 23 1. Stellen Sie die Funktion                                         sowie deren erste und zweite Ableitung graphisch dar.

2. Geben Sie eine Wertetabelle für das x‐Intervall [ 0, 3 ] aus, Schrittweite 0.1.

7x4x)x(y 3

3. Bestimmen Sie die Nullstellen der Funktion und deren Extrema.

4. Bestimmen Sie das Integral der Funktion zwischen 1 und 3. Lösen Sie die Auf‐gabe mit der Funktion polyint und mit der Funktion quadgabe mit der Funktion polyint und mit der Funktion quad. 

115

Aufgabe‐2 :

6.5   Funktionen ‐ Analysis

u gabe :

Berechnen Sie die Schwingungsdauer für ein Pendel mit Hilfe einer Funktion schwingungsdauer. An diese Funktion wird die Länge des Pendels [in Metern] üb b d di A f l k [i G d]übergeben und die Anfangsauslenkung [in Grad].

Die Schwingungsdauer ist durch folgende Formel gegeben :

022 ψsink1

dψg

4T L 2sinsink

2sink 0

Anfangsauslenkung  

Testen Sie ihr Programm! Für kleine Werte von k (d.h. für kleine Anfangsaus‐l k ) i di P i d d äh i 2 S k d l Lä

2

lenkungen) ist die Periodendauer näherungsweise 2 Sekunden, wenn als Länge L = 9.81m gewählt wird.

Berechnen Sie die Schwingungsdauer für eine Anfangsauslenkung von 30°. g g g g

T = schwingungsdauer(9.81, 30)Geben Sie danach eine Tabelle mit den Werten der Schwingungsdauer für An‐

116

fangsauslenkungen von 0° bis 180° aus, Schrittweite 10°.

Page 31: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Kapitel 7   Lineare Algebra

Kapitel 7  ‐ Lineare Algebra

7.1 Gleichungssysteme und Quadratische Matrizen7.1 Gleichungssysteme und Quadratische Matrizen

7.2    Links – und Rechtsdivision bei Matrizen

7.3    Gewöhnliches Eigenwertproblemg p

7.4 Verallgemeinertes Eigenwertproblem

117

7.   Lineare Algebra

Lineare Gleichungssysteme :Beispiel 1 : Gleichungssysteme ‐ Zwei Gleichungen mit zwei Unbekannten x und y

20x

1111

20yx

2:1

40x

2211

4220yx

2:1

2y112yx:2

Lineare Gleichungssysteme löst man meist mit Hilfe eines Eliminationsverfahrens. Jede dieser Gleichungen stellt eine Geradengleichung dar.Die Lösung von zwei

4y224y2x2:2

Jede dieser Gleichungen stellt eine Geradengleichung dar.Die Lösung von zwei Gleichungen mit zwei Unbekannten ist somit der Schnittpunkt von zwei Geraden. 

118

linglnplot1.m linglnplot2.m

7.   Lineare Algebra

Beispiel 2 :    Drei Gleichungen mit drei Unbekannten x, y und z. p g , y

2

0

y

x

121

111

2zy2x

0zyx linglnplot3.m

3z1133zyx3

Jede der drei Gleichungen be‐schreibt eine Ebene im Raum. Die Lösung desGleichungs‐systems ist somit der Schnitt‐ypunkt von drei Ebenen im Raum. Normalerweise gibt es genau einen Schnittpunkt dergenau einen Schnittpunkt der drei Ebenen, aber es können auch Spezialfälle eintreten( Ebenen liegen parallel zuein( Ebenen liegen parallel zuein‐ander oder Ebenen fallen zusammen).

119

7.   Lineare Algebra

Beispiel 3:  Überbestimmte Gleichungssysteme p g y

2

0x

11

11

2yx

0yx

:2

:1

5.0y

15.05.0yx5.0

y

:3

Diese 3 Gleichungen mit 2 Unbekannten besitzen 

0110yx:1

geine exakte Lösung, nämlich x = y = 1 . Dies ist ein Sonderfall. linglnplot4.m

30

2

0

y

x

140

11

11

30yx40

2yx

0yx

:3

:2

:1

3.014.03.0yx4.0:3

Diese 3 Gleichungen mit 2 Unbekannten besitzen  keine (exakte) Lösung Das ist der Normalfallkeine (exakte) Lösung . Das ist der Normalfall.

Beide Gleichungssysteme haben die Struktur :

120

A*x = b A ist eine nicht‐quadratische Matrixlinglnplot5.m

Page 32: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

7.   Lineare Algebra

Allgemeine Problemstellungen :ge e e ob e ste u ge :

1) A x = b „ n Gleichungen mit  n Unbekannten “

A und b sind gegeben x ist gesuchtA und  b sind gegeben,  x ist gesucht

A ist eine n n ‐Matrix  (d.h. A ist quadratisch) 

x und  b sind Spaltenvektoren mit jeweils  n Zeilen

Wichtige mathematische Größen für quadratische Matrizen :

Determinante  ‐ Inverse Matrix  ‐ Eigenwerte und Eigenvektoren

2) A x = b „ m Gleichungen mit  n Unbekannten “

A und  b sind gegeben,  x ist gesucht m > n :  Gleichungssystem ist überbestimmtm < n :  Gleichungssystem ist unterbestimmt

A ist eine m n ‐Matrix (d.h. A ist nicht quadratisch)A ist eine m n Matrix  (d.h. A ist nicht quadratisch) 

x ist ein Spaltenvektor mit  n Zeilen

b ist ein Spaltenvektoren mit  m Zeilen

121

7.1   Gleichungssysteme und Quadratische Matrizen

Wir betrachten nur quadratische Matrizen :  A sei eine nn‐Matrix

Satz : Ist die Determinante der Matrix A ungleich 0, dann besitzt die Gleichung A x = b für jedes vorgegebene  b eine eindeutige Lösung  x .

Satz :  Ist die Determinante der Matrix A ungleich 0, dann existiert die inverse Matrix von A , d.h. es gibt eine Matrix  B = A-1 mit der Eigenschaft  

A-1 A = A A-1 = E , wobei E die Einheitsmatrix ist.A A A A E ,  wobei  E die Einheitsmatrix ist.

B A = A B = E Lösung des Gleichungssystems

A x = bMultipliziere von links mit der inversen Matrix  A-1

A-1 A x = A-1 bA 1 A x = A 1 bE x = A-1 bx = A-1 b

Zugehörige MATLAB‐Funktionen :

inv(A) :  berechnet die inverse Matrix von A und gibt diese zurück

122

det(A) :  berechnet die Determinante der Matrix A und gibt diese zurück

7.1   Gleichungssysteme und Quadratische Matrizen ‐ lingln1.mdisp('Gleichungssystem: A*x = b') A = -1 1p( g y )A = [-1 1; 1 1]b = [2; 5]di ('I A b h ')

1 1b = 2

5disp('Inverse von A berechnen')IA = inv(A)disp('Gleichungssystem lösen')

Inverse von A berechnenIA = -0.500... 0.500...

0.500... 0.500...disp( Gleichungssystem lösen )x = IA*bdisp('Probe: A*x = b')

Gleichungssystem lösenx = 1.500

3.500P b A* bb1 = A*x

disp('Probe: ist IA Inverse?')E1 = A*IA

Probe: A*x = bb1 = 2

5Probe: ist IA Inverse?E1 = A*IA

E2 = IA*Adisp('Determinante von A und IA')

Probe: ist IA Inverse?E1 = 1 0

0 1E2 = 1 0D1 = det(A)

D2 = det(IA)D3 d t(A)*d t(IA)

E2 = 1 00 1

Determinante von A und IAD1 = -2

123

D3 = det(A)*det(IA) D1 2D2 = -0.5000...D3 = 1lingln1.m

7.1   Gleichungssysteme und Quadratische Matrizen ‐ lingln2.mdisp('Gleichungssystem: A*x = b') A = 1 1disp('Gleichungssystem: A*x = b')A = [-1 1; -2 2]b = [0; 4]

A = -1 1-2 2

b = 04disp('Determinante von A')

d = det(A)di ( b h )

4Determinante von Ad = 0Inverse von A berechnendisp('Inverse von A berechnen')

IA = inv(A)disp('Gleichungssystem lösen')

Inverse von A berechnenWarning: Matrix is singularto working precision. > In lingln2 at 10disp( Gleichungssystem lösen )

x = IA*bg

In run at 57 IA =

Inf Infli l 2 Inf InfGleichungssystem lösenx =

lingln2.m

NaNNaN

...NaN Not a Number

124

Page 33: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Kapitel 7   Lineare Algebra

Kapitel 7  ‐ Lineare Algebra

7.1 Gleichungssysteme und Quadratische Matrizen7.1 Gleichungssysteme und Quadratische Matrizen

7.2    Links – und Rechtsdivision bei Matrizen

7.3    Gewöhnliches Eigenwertproblemg p

7.4 Verallgemeinertes Eigenwertproblem

125

7.2   Links‐ und Rechtsdivision bei Matrizen 

Das im Skript  lingln1.m angewandte Vorgehen zur Lösung eines linearen p g g g gGleichungssystem mit Hilfe der inversen Matrix ist zwar sehr einfach zu pro‐grammieren und funktioniert auch bei n Gleichungen mit n Unbekannten. Trotzdem wird dieses Verfahren nur sehr selten angewendet, da es eine ReiheTrotzdem wird dieses Verfahren nur sehr selten angewendet, da es eine Reihe von Problemen gibt.

• Die Berechnung der inversen Matrix ist für großes n sehr aufwendig. Es gibt i ih f h ö l i h di li heine Reihe von Verfahren zur Lösung von Gleichungssystemen, die wesentlich effektiver (weniger Rechenzeit, weniger Speicherplatz ) sind.

• Ist die Determinante einer Matrix 0, dann existiert gar keine inverse Matrix. gDas Gleichungssystems kann dann Lösungen besitzen oder auch nicht.

• Man möchte auch Gleichungssysteme der Art  „ m Gleichungen mit n Unbe‐kannten “ lösen – überbestimmte ( m > n ) und unterbestimmte ( m < n )kannten   lösen  überbestimmte ( m > n ) und unterbestimmte ( m < n ) Gleichungssysteme.

Um diese Probleme zu lösen hat man bei MATLAB zwei neue Funktionen undzwei neue Operatoren  eingeführt :

• Linksdivision :   Funktion  mldivide und den Operator (Backslash )  \• Rechtsdivision : Funktion mrdivide und den Operator (Slash) /

126

• Rechtsdivision :  Funktion  mrdivide und den Operator (Slash)  /Der Operator ist jeweils nur eine Kurzschreibweise für den Funktionsaufruf.

7.2   Links‐ und Rechtsdivision bei Matrizen 

Aufgabe :Aufgabe :A sei eine m*n‐Matrix und b ein Spaltenvektor mit  m Zeilen. Gesucht ist ein Vektor x mit n Zeilen, der folgende Gleichung löst :  A*x = b

Lösung :Die MATLAB‐Funktion  mldivide berechnet die Lösung der obigen Aufgabe.  

x = mldivide(A, b)Um den Funktionsaufruf kompakter zu schreiben, hat man einen neuen Opera‐tor eingeführt, nämlich die Linksdivision – Operatorsymbol \tor eingeführt, nämlich die Linksdivision  Operatorsymbol  \

x = A\ bBeachte : x = mldivide(A, b) und x = A\ b sind vollkommen identisch.

Je nach dem, welche Eigenschaften die Matrix A besitzt, wendet MATLAB im Hintergrund unterschiedliche Verfahren an, um die Gleichung  A*x = b möglichst effektiv zu lösen Der genaue Algorithmus ist in der MATLAB Dokumentationeffektiv zu lösen. Der genaue Algorithmus ist in der MATLAB‐Dokumentation beschrieben ( siehe  mldivide algorithm ).

Frage : Welche Lösung berechnet MATLAB eigentlich ? 

127

Manchmal gibt es ja gar keine Lösung !

7.2   Links‐ und Rechtsdivision bei Matrizen 

A*x = b : x = A\ b x = mldivide(A b)Welche Lösung berechnet MATLAB ?

• m = n : MATLAB sucht eine exakte Lösung

A*x = b : x = A\ b x = mldivide(A, b)

• m = n :  MATLAB sucht eine exakte Lösung MATLAB gibt eine Warnung aus , wenn die Lösung problematisch ist, z.B. wenn die Determinante der Matrix A fast 0 ist – siehe Beispiel

• m > n : MATLAB sucht eine least‐square solution, d.h. die Lösung x ist meist keine exakte Lösung des überbestimmten Gleichungssystems  A*x = b sondern die Lösung eines Gleichungssystems A*x = b' , so dass die Differenz  b'- b „so klein wie möglich“ wird

• m < n : MATLAB sucht eine Lösung, bei der höchstens m Komponenten von 0 verschieden sindverschieden sind. 

Bemerkung :  

Ist  A eine n*n‐Matrix und det(A)!=0 , dann ist die Matrix A\ identisch mit der \ 1inversen Matrix von A. Es gilt :   A\ A = E = A-1 *A .

MATLAB berechnet aber die Inverse der Matrix A bei der Lösung von Gleichungs‐systemen gar nicht sondern löst das Gleichungssystem effektiver. 

128

y g g y

Page 34: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

7.2   Links‐ und Rechtsdivision bei Matrizen 

A*x = b : x = A\ b x = mldivide(A b)A*x = b : x = A\ b x = mldivide(A, b)>> A=[ 1 2; 2 4 ]A

>> A(2,2) = 3.999999999999999AA =

1 22 4

A =1.0000 2.00002.0000 4.0000

>> det(A)ans =

0>> det(A)ans =

-8.8818e-16>> b = [ 3; 4]b =

3>> x = A\bWarning: Matrix is close to singular or badly scaled.

4>> x = A\bWarning: Matrix is singular

g yResults maybe inaccurate. RCOND = 2.467162e-17. x =Warning: Matrix is singular

to working precision. x =

Inf

x =1.0e+15 *-4.50362 2518

129

Inf-Inf 2.2518

7.2   Links‐ und Rechtsdivision bei Matrizen 

Beispiel – 1 : lingln3.m p g

3 Gleichungen mit 2 Unbekannten – es gibt eine exakte Lösung; siehe linglnplot3.m

A = [-1 1; 1 1; -0.5 1]b [0 2 0 5]

A =1 0000 1 0000b = [0; 2; 0.5]

disp('Gleichungssystem lösen')x = A\b

-1.0000 1.00001.0000 1.0000

-0.5000 1.0000%x = mldivide(A,b)disp('Probe: A*x=b')b1=A*x

b =0

2.00000.5000

Gleichungssystem lösenx =x

1.00001.0000

Probe: A*x=bProbe: A*x=bb1 =

-0.00002 0000

130

2.00000.5000

7.2   Links‐ und Rechtsdivision bei Matrizen 

Beispiel – 2 : lingln4.m :3 Gleichungen mit 2 Unbekannten – es existiert keine exakte Lösung, MATLAB berechnet eine least‐square‐solution, siehe linglnplot4.m

A = [-1 1; 1 1; -0 4 1] A =A [ 1 1; 1 1; 0.4 1]b = [0; 2; 0.3]disp('Gleichungssystem lösen')x = A\b

A -1.0000 1.00001.0000 1.00000 4000 1 0000x = A\b

%x = mldivide(A,b)disp('Probe: A*x=b')b1 A*

-0.4000 1.0000b =

02 0000b1=A*x 2.00000.3000

Gleichungssystem lösenx =

1.03800.9051

Probe: A*x=bb1 =

-0.1329

131

0.13291.94300.4899

7.2   Links‐ und Rechtsdivision bei Matrizen 

Beispiel – 3 : Dankert/Dankert: Technische Mechanik  www.tm‐aktuell.de

Fü di B h d L kti d St bk äft fü d b t h d ki iFür die Berechnung der Lagerreaktionen und Stabkräfte für das nebenstehend skizzier‐te System wird auf der Basis der Gleichgewichtsbedingungen folgendes Gleichungs‐system in Matrixform formuliert:

aq30

FFF

)sin(10010)cos(00001

0AV

AH

00

aq5.4

FFF

)sin(11000)cos(00100

020030 0

BV

BH

132

00

FF

015.1000)sin(11000

2S

1S

Page 35: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

7.2   Links‐ und Rechtsdivision bei Matrizen 

Hausaufgaben :g

1. Versuchen Sie die Skripte  lingln*.m zu verstehen, ebenso die zugehörigen Programme  linglnplot*.m .

2 L d Si di D t i l i d Edit d h Si d P2. Laden Sie die Datei  lager.m in den Editor und versuchen Sie das Programm zu verstehen. Starten Sie das Programm für verschiedene Parameter.

Welche Funktion hat die Variable ausgabe?  Versuchen Sie die Ausgabean‐weisung für die Matrix  M zu verstehen. Warum muss man die transponierte Matrix von  M in der  fprintf‐Anweisung verwenden? Was ergibt sich, wenn man die Matrix  M verwendet ?

Für welche Winkel ist die Matrix  M singulär? Wie reagiert das Programm darauf?

Z i Si d di B h it Hilf d Li k di i i d diZeigen Sie, dass die Berechnungen mit Hilfe der Linksdivision und die Berechnungen mit der inversen Matrix von M die gleichen Ergebnisse liefern.

3. Laden Sie die Datei  lagerkraft.m in den Editor und versuchen Sie das Programm zu verstehen. Welche Vorteile und Nachteile besitzt diese Funktion gegenüber der Funktion lager.m ? Starten Sie das Programm.

133

Kapitel 7   Lineare Algebra

Kapitel 7  ‐ Lineare Algebra

7.1 Gleichungssysteme und Quadratische Matrizen7.1 Gleichungssysteme und Quadratische Matrizen

7.2    Links – und Rechtsdivision bei Matrizen

7.3    Gewöhnliches Eigenwertproblemg p

7.4 Verallgemeinertes Eigenwertproblem

134

7.3   Gewöhnliches Eigenwertproblem

Definition :A sei eine n*n‐Matrix. Ein Vektor  x heißt Eigenvektor der Matrix A, wenn es eine (reelle oder komplexe) Zahl  gibt, für die gilt :    A * x = * xDie Zahl heißt Eigenwert zum Eigenvektor x.Die Zahl  heißt Eigenwert zum Eigenvektor x.

Bemerkungen :

• Die Bestimmung der Eigenwerte und Eigenvektoren der Gleichung A * x = *xnennt man spezielles oder gewöhnliches Eigenwertproblem.

• Satz : Ist die Matrix A symmetrisch, dann gibt es n reelle Eigenwerte und n linear unabhängige Eigenvektoren.

MATLAB :

g g g• Ist die Matrix A nicht symmetrisch, können die Eigenwerte auch komplex sein. Es muss kein vollständiges System von n linear unabhängigen Eigenvektoren geben.

MATLAB :

Die Funktion  eig berechnet Eigenwerte und Eigenvektoren einer Matrix. 

EV = eig(A) is a vector containing the eigenvalues of a square matrix A.

[V,D] = eig(A) produces a diagonal matrix D of eigenvalues and a full matrix  V whose columns are the corresponding eigenvectors so thatA*V = V*D d h es gilt A * V(: k) = D(k k) * V(: k)

135

A V = V D d. h. es gilt    A V(:,k) = D(k,k) V(:,k) V(:,k) k‐ter Eigenvektor der Matrix AD(k,k) k‐ter Eigenwert der Matrix A

7.3   Gewöhnliches Eigenwertproblem

Beispiel : 11 xx321321p

3

2

1

3

2

1

xxx

xxx

543432321

xxA543432321

A

MATLAB :

>>[ V D ] = eig(A);

8277.08277.0321[ ] g( );

>> VV =

0 8277 0 4082 0 3851

5428.01424.06235.0

5428.01424.0

543432

0.8277 0.4082 0.38510.1424 -0.8165 0.5595

-0.5428 0.4082 0.7339>> D

8165.04082.0

0.08165.04082.0

432321

>> DD =-0.6235 0 0

0 0 0000 0

4082.04082.0543

3851.03851.03210 -0.0000 00 0 9.6235

7339.05595.03851.0

6235.97339.05595.03851.0

543432321

i t bl 1136

eigenwertproblem1.m A * V(:,3) = D(3,3)*V(:,3)

Page 36: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Hausaufgaben :

7.3   Gewöhnliches Eigenwertproblem

g

1. Laden Sie die Datei  eigenwertproblem1.m in den Editor und versuchen Sie das Programm zu verstehen. Es werden die Eigenwerte und die Eigen‐vektoren einer symmetrischen Matrix berechnet Weiterhin wird gezeigt dassvektoren einer symmetrischen Matrix berechnet. Weiterhin wird gezeigt, dass die berechneten Eigenvektoren tatsächlich Eigenvektoren sind. Führen Sie das Skript aus und versuchen Sie die Ausgabe zu verstehen.

2. Laden Sie die Datei  eigenwertproblem2.m in den Editor und versuchen Sie das Programm zu verstehen. Es werden die Eigenwerte und die Eigen‐vektoren einer nichtsymmetrischen Matrix berechnet.  Bei der vorliegenden y gMatrix gibt es komplexe Eigenwerte und komplexe Eigenvektoren. Es wird wiederum gezeigt, dass die berechneten Eigenvektoren tatsächlich Eigen‐vektoren sindvektoren sind.Beachten Sie : 

fprintf('%f', x) gibt nur den Realteil einer Zahl x aus ( im Gegensatz zu disp ). Der Imaginärteileiner komplexen Zahl x muss explizit ausgegeben werden z.B.

fprintf('%f %+fi' real(x) imag(x))

137

fprintf( %f %+fi , real(x), imag(x)) fprintf('%f %+fi', x, imag(x))

7.4   Verallgemeinertes Eigenwertproblem

Definition :   verallgemeinertes Eigenwertproblemg g pA,B seien n*n‐Matrizen. Ein Vektor  x heißt Eigenvektor des verallgemeiner‐ten Eigenwertproblems, wenn es eine (reelle oder komplexe) Zahl  gibt, für die gilt : A * x = * B * x . Die Zahl heißt Eigenwert.gilt :    A x B x . Die Zahl  heißt Eigenwert.

Bemerkung :

Existiert die inverse Matrix von B, dann lässt sich das verallgemeinerte Eigenwert‐problem in ein spezielles Eigenwertproblem umschreiben

B-1* | A * x = * B * x B-1 * A * x = * B-1 * B * x = * E * x

MATLAB :

Die Funktion i berechnet auch Eigenwerte und Eigenvektoren des verallge

( B-1 * A ) * x = * x

Die Funktion  eig berechnet auch Eigenwerte und Eigenvektoren des verallge‐meinerten Eigenwertproblems.  Zwei Matrizen werden als Parameter übergeben .

EV = eig(A,B) is a vector containing the generalized eigenvalues of square matrices A and B.

[V,D] = eig(A,B) produces a diagonal matrix D of generalized eigenvaluesand a full matrix V whose columns are the corresponding eigenvectors so that

138

and a full matrix V whose columns are the corresponding eigenvectors so that A*V = B*V*D d. h.  A * V(:,k) = D(k,k) * B * V(:,k)

7.4   Verallgemeinertes Eigenwertproblem

Beispiel :  Schwingerkette (Hollburg, p. 147), Massen, Federn, keine Dämpfungp g ( g, p ), , , p g

Bewegungsgleichungen :                                                            Kräfte :

)t(x)t(xc)t(xc)t(xm 111 xcF

)t(x)t(xc)t(x)t(xc)t(xm

)t(x)t(xc)t(xc)t(xm

32312222

2121111

2333

1222

111

xxcFxxcF

)t(x0ccc)t(x00m

)t(xc)t(x)t(xc)t(xm 3423333 344 xcF

)t(x

)t(x

cccc

0ccc

)t(x

)t(x

0m0

00m

2

1

3322

221

2

1

2

1

139

)t(xccc0)t(xm00 343333

7.4   Verallgemeinertes Eigenwertproblem

Lösungsansatz :

)tcos(xxx

)t(x)t(x)t(x

)tcos(xxx

)tcos(x)tcos(x)tcos(x

)t(x)t(x)t(x

2

12

2

1

2

1

2

1

2

1

x)t(xx)tcos(x)t(x 33333

)t(x00m)t(x0ccc 1

Lösungsansatz einsetzen und umformen :

)t(x)t(x

)t(x

m000m000m

)t(x)t(x)t(x

ccc0cccc0ccc

3

2

1

3

2

1

3

2

1

433

3322

221

)(3

)tcos(xx

)(0m000m

)tcos(xx

cccc0ccc

2

12

2

1

2

1

3322

221

)(x

)(m00

)(xccc0 3

2

3

2

3

2

433

3322

Verallgemeinertes Eigenwertproblem :   A * x = * B * x

2

1

2

12

2

1

3322

221

xx

0m000m

xx

cccc0ccc Gesucht :

• Eigenvektor xEi t 2

140

333433 xm00xccc0 • Eigenwert  = 2

Page 37: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

7.4   Verallgemeinertes Eigenwertproblem

Allgemeine Lösung : Eigenvektoren

)tcos(xx

a)tcos(xx

a)tcos(xx

a)t(x 33,2

3,1

322,2

2,1

211,2

1,1

1

)tsin(xx

b)tsin(xx

b)tsin(xx

b

xxx

3,12,11,1

3,32,31,3

)tsin(xxb)tsin(

xxb)tsin(

xxb 3

3,3

3,232

2,3

2,221

1,3

1,21

v)0t(xx)0t(x

6 Anfangsbedingungen :

303

202

101

303

202

101

v)0t(xv)0t(xv)0t(x

x)0t(xx)0t(xx)0t(x

Bestimme die Koeffizienten ai und bi aus den Anfangsbedingungen

vbxxxxaxxx

30

20

10

33

22

11

3,3

3,2

3,1

2,3

2,2

2,1

1,3

1,2

1,1

30

20

10

3

2

1

3,3

3,2

3,1

2,3

2,2

2,1

1,3

1,2

1,1

vvv

bbb

xxx

xxx

xxx

xxx

aaa

xxx

xxx

xxx

141

Aufgaben (Praktikum) :

7.4   Verallgemeinertes Eigenwertproblem

Laden Sie das Skript  kette3maufruf.m und die Funktion kette3m.m in den Editor und versuchen Sie die Programme zu verstehen. Die Funktion kette3m.m löst das verallgemeinerte Eigenwertproblem für drei schwingende Massen. An dielöst das verallgemeinerte Eigenwertproblem für drei schwingende Massen. An die Funktion werden 3 Massen und 4 Federkonstanten übergeben.Das Skript  kette3maufruf.m bereitet den Aufruf der Funktion kette3m.mvor (erzeugt Vektoren mit den Massen und den Federkonstanten) und ruft dannvor (erzeugt Vektoren mit den Massen und den Federkonstanten) und ruft dann die Funktion kette3m.m auf. Starten Sie das Skript kette3maufruf.ma) Können Sie aus der Form der Eigenvektoren die Struktur der Eigenschwin‐

bl i ? Si d ll M d F d k l i h d lgungen ableiten ? Sind alle Massen und Federkonstanten gleich, dann lassen sich die Eigenschwingungen aus physikalischen Überlegungen ableiten.

b) Berechnen Sie Eigenwerte und die Eigenvektoren, wenn die mittlere Masse doppelt so groß ist wie die beiden äußeren Massen. Ändern Sie auch die Federkonstanten.

c) Wie lautet die inverse Matrix von m (bloßes hinschauen sollte ausreichen)?c) Wie lautet die inverse Matrix von m (bloßes hinschauen sollte ausreichen)? Wie lautet dann das spezielle Eigenwertproblem ? Versuchen Sie die inverse Matrix von m auch mit MATLAB zu berechnen. Be‐rechnen Sie dann die Matrix für das spezielle Eigenwertproblem Lösen Sie das

142

rechnen Sie dann die Matrix für das spezielle Eigenwertproblem. Lösen Sie das spezielle Eigenwertproblem. Wie erhält man aus den Lösungen des speziellen Eigenwertproblems die Lösungen für das allgemeine Eigenwertproblem?

Kapitel 8    Numerische Lösung von Differentialgleichungen

Kapitel 8   Numerische Lösung von Differentialgleichungen

8.1  Differentialgleichungen – Analytische und Numerische Lösungg g y g

8.2  Begriffe

8 3 Einfache Beispiele8.3  Einfache Beispiele

8.4 Standardform einer DGL für die numerische Lösung

8 5 E l ' h P l f h8.5 Euler' sches Polygonzugverfahren

8.6 Einfache Programmierung des Euler' schen Polygonzugverfahrens

8.7  Verbesserte Programmierung des Euler' schen Polygonzugverf.

8.8 Euler' sches Polygonzugverfahren für die Schwingungsgleichung

8.9 Runge‐Kutta‐Verfahren

8.10  Runge‐Kutta‐Verfahren mit MATLAB

143

g

Gleichungen :

8.1  Differentialgleichung – Analytische und Numerische Lösung

07x4x)x(y 23 7x8x7 21 Gleichungen : 07x4x)x(y

Eine Gleichung zu lösen bedeutet z.B. „suche die Nullstellen von y(x)“ oder „suche Lö fü i b Gl i h t “ Al E b i hält ll

6x3x8 21

21

Lösungen für ein vorgegebenes Gleichungssystem“. Als Ergebnis erhält man reelle oder komplexe Zahlen oder auch keine Lösung, falls die Gleichungen nicht lösbar sind.

kyd2

Differentialgleichung (DGL) :                                                     „Schwingungsgleichung“0)t(ymk

dtyd2

2

Eine DGL stellt eine Beziehung zwischen den Ableitungen einer Funktion und der g gFunktion selbst dar. Eine DGL lösen bedeutet „suche Funktionen, die eine Gleichung wie oben erfüllen“. Die Lösung einer DGL ist keine Zahl sondern eine Funktion mit bestimmten Eigenschaften Diese Eigenschaften werden durch dieFunktion mit bestimmten Eigenschaften. Diese Eigenschaften werden durch die DGL festgelegt.

Die obige DGL kann analytisch gelöst werden, d.h. man kann eine Lösung der DGL mit Hilfe von bekannten Funktionen angeben. Die allgemeine Lösung lautet :

mk)tcos(b)tsin(a)t(y 2

144

Die Größen a und bmüssen durch zusätzliche Bedingungen festgelegt werden, z.B. durch Anfangs‐ oder Randbedingungen.

Page 38: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Numerische Lösung von Differentialgleichungen :

8.1  Differentialgleichung – Analytische und Numerische Lösung

g g g

Eine analytische Lösung von DGLn (d.h. die Angabe einer Lösungsfunktion durch bekannte Funktionen) ist häufig nicht möglich, insbesondere bei nichtlinearen DGL Selbst wenn eine DGL analytisch lösbar ist kann die Lösung so komplex seinDGL. Selbst wenn eine DGL analytisch lösbar ist, kann die Lösung so komplex sein, dass man mit der Lösung nur wenig anfangen kann.

In der Praxis werden DGLn daher oft numerisch gelöst. Als Ergebnis erhält man keine Funktion sondern Zahlenwerte, die die Funktionswerte der unbekannten Lösung näherungsweise darstellen. Diese Zahlenwerte werden meist in Vektoren abgespeichert. Mit diesen Zahlenwerten kann die Lösung dann z. B. graphisch g p g g pdargestellt werden.

0.00 1.00

0.10 0.955 0)t(kyd2

t = y =

0.20 0.825 

0.30 0.621 DGL

Y (t)

0)t(ymdt

y2

0.40 0.362  

0.50 0.070 

. . . . . .Y

145

. . . . . .

Numerische Lösung t

Kapitel 8    Numerische Lösung von Differentialgleichungen

Kapitel 8   Numerische Lösung von Differentialgleichungen

8.1  Differentialgleichungen – Analytische und Numerische Lösungg g y g

8.2  Begriffe Ordnung einer DGLAnfangswertproblem  – Randwertproblem Gewöhnliche DGL  – Partielle DGL

8.3  Einfache Beispiele

8.4 Standardform einer DGL für die numerische Lösung

l ' h l f h8.5 Euler' sches Polygonzugverfahren

8.6 Einfache Programmierung des Euler' schen Polygonzugverfahrens

8 7 V b t P i d E l ' h P l f8.7  Verbesserte Programmierung des Euler' schen Polygonzugverf.

8.8 Euler' sches Polygonzugverfahren für die Schwingungsgleichung

8 9 Runge Kutta Verfahren

146

8.9 Runge‐Kutta‐Verfahren

8.10  Runge‐Kutta‐Verfahren mit MATLAB

Gewöhnliche Differentialgleichungen n‐ter Ordnung

8.2   Begriffe

g g g

• Gewöhnliche Differentialgleichungen (Ordinary Differential Equations ‐ ODEs)

In der DGL kommt nur eine unabhängige Variable vor, sowie eine Funktion und d Abl it h d bhä i V i bl Di bhä i V i blderen Ableitungen nach der unabhängigen Variablen. Die unabhängige Variable ist meist der Ort x oder die Zeit t. Neben der unabhängigen Variablen können in der DGL auch noch Parameter vorkommen. In der DGL für eine Schwingung ist das der Parameter   k/m = 2.Bei partiellen DGL (PDE) hat man mehrere unabhängige Variablen z.B. x und toder x, y, z und t. , y,Beispiel : Strömungsmechanik – PDEs werden hier nicht behandelt.

• Ordnung einer DGL

i d k bl i h d bhä iIn einer DGL n‐ter Ordnung kommen Ableitungen nach der unabhängigen Variablen bis zur Ordnung  n vor. Die DGL einer einfachen Schwingung ist eine DGL 2‐ter Ordnung. In der Praxis ist die Ordnung von DGLn meist kleiner gleich 4. Bei der numerischen Lösung von DGLn werden DGLn n‐ter Ordnung meistens in ein System von n DGLn erster Ordnung umgeschrieben (Standardform).     

147

y g g ( )

Festlegung der Lösungen einer DGL

8.2   Begriffe

Eine DGL kann mehrere unabhängige Lösungen besitzen. Beispiel :

mk)tcos(b)t(y)tsin(a)t(y0)t(y

mk

dtyd 2

212

2

Da es sich um eine lineare DGL handelt, ist auch eine Linearkombination der bei‐den Lösungen wieder eine Lösung. Die allgemeine Lösung lautet deshalb :

mmdt

)tcos(b)tsin(a)t(y)t(y)t(y 21

Um die Größen a und b festzulegen sind weitere Bedingungen notwendig. In der P i i i A B di fPraxis treten meist zwei Arten von Bedingungen auf :

• AnfangswertproblemDer Funktionswert und die Werte der Ableitungen sind zu einem bestimmten Zeitpunkt oder an einem bestimmten Ort vorgegeben. Bei einer Schwingung z.B. 

00 v)0t(dtdyy)0t(y 0)0t(

dtdyy)0t(y 0 oder

• RandwertproblemeFunktionswerte und/oder Werte der Ableitungen sind zu unterschiedlichen Zeitpunkten oder an verschiedenen Orten vorgegeben z B

dt dt

148

Zeitpunkten oder an verschiedenen Orten vorgegeben, z.B. 

0)ax(y0)0x(y und

Page 39: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Beispiele :

8.3   Einfache Beispiele

p

0)t(ymk

dtyd)d)x(yxk

dxdy)c)x(yk

dxdy)bk

dxdy)a 2

2

Lösungen :

Die ersten 3 Beispiele sind DGLn erster Ordnung. Das 4‐te Beispiel ist eine DGL 2‐ter Ordnung. Alle Lösungen enthalten noch freie Konstanten. Diese müssen durch zusätzliche Bedingungen festgelegt werden z B durch Anfangsbedingungen Beizusätzliche Bedingungen festgelegt werden, z.B. durch Anfangsbedingungen. Bei einer DGL erster Ordnung reicht eine Anfangsbedingung aus, bei einer DGL 2‐ter Ordnung sind zwei Anfangsbedingungen notwendig.

0)0t(y3)0t(y)d5)0x(y)c4)0x(y)b3)0x(y)a

Durch Anfangswerte festgelegte Lösungen :

Die Größe k in den Lösungen der ersten drei DGLn ist ein freier Parameter.

149

Die Größe k in den Lösungen der ersten drei DGLn ist ein freier Parameter. Für konkrete Werte von k ergeben sich dann konkrete Lösungen.

8.4  Standardform einer DGL für die numerische Lösung

Die Schwingungsgleichung ist eine DGL 2‐ter Ordnung. Diese DGL lässt sich in ein 

kyd2

g g g g gSystem von zwei gekoppelten DGLn erster Ordnung umschreiben. Diese Um‐schreibung wird bei der numerischen Lösung von DGLn häufig angewendet – meist in vektorieller Notation.

0)t(ymk

dtyd2

in vektorieller Notation.

Es wird eine neue Variable v(t) eingeführt, die erste Ableitung von y(t) nach t( v(t) ist die Geschwindigkeit). Die zweite Ableitung von y nach t ist damit die erste Ableitung von v nach t. Die beiden Variablen y und v können als  Kompo‐nenten eines Vektors z aufgefasst werden, der von der Zeit  t abhängt.

)t(vdtdy)1

)t(z

)t(z

z

z)t(z

)t(v

)t(y 1

2

1 )t(zdt

)t(dz)1 21

g , g

)t(ymk

dtdv)2

)t(z)t(v 22

)t(zmk

dt)t(zd)2 1

2

ymk

v)v,y,t(f

vy

dtd

1

221

2

1

2

1

zmk

z)z,t(f)z,z,t(f

z

z

z

zdtd

dtdz

150

Zwei gekoppelte DGLn erster Ordnung

8.4  Standardform einer DGL für die numerische Lösung

Umschreiben einer DGL n‐ter Ordnung in ein System von n DGLn erster Ordnung :g y g

)t(f)t(ya)t(ya)t(ya)t(y 0)1(

1)1n(

1n)n(

n Anfangsbedingungen :n Anfangsbedingungen :)1n(

00)1n()1(

00)1(

00 y)tt(yy)tt(yy)tt(y

151

8.4  Standardform einer DGL für die numerische Lösung

Hausaufgabe:g

Schreiben Sie die folgende DGL 4‐ter Ordnung in ein System von 4 DGLn erster Ordnung um, ebenso die Anfangsbedingungen.

)2()4(

0)t(y)t(atdydt3

tdyd

2

)2(2

4

)4(

3)0t(y0)0t(y0)0t(y2)0t(y

152

Page 40: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

8.4  Standardform einer DGL für die numerische Lösung

Hausaufgabe:g

Schreiben Sie die DGL für eine gedämpfte Schwingung mit äußerer Anregung in ein System von DGLn erster Ordnung um.

)tcos(F)t(y)t(y2)t(y 20

00 v)0t(yx)0t(y

153

8.4  Standardform einer DGL für die numerische Lösung

Hausaufgabe :g

Bewegungsgleichungen :

)t(x)t(xc)t(xc)t(xm 2121111

g g g g

)t(xc)t(x)t(xc)t(xm

)t(x)t(xc)t(x)t(xc)t(xm

3423333

32312222

1111 xyxy 3423333

Das obige Modell  wird durch ein System von drei gekoppelten DGLn 2‐ter Ordnung beschrieben.

3

2

3

2

2

1

3

2

x

x

y

y

x

v

y

y

gekoppelten DGLn 2 ter Ordnung beschrieben.Schreiben Sie die DGLn 2‐ter Ordnung in ein System von 6 DGLn erster Ordnung um. Hierzu gibt es verschiedene Varianten (siehe rechts) Wie lauten

2

1

5

4

3

2

5

4

v

v

y

y

x

v

y

y

154

verschiedene Varianten (siehe rechts). Wie lauten die DGLn für y?

3636 vyvy

8.5   Euler' sches Polygonzugverfahren

Numerische Lösung des

y)x(y)yx(fdy:DGL

Numerische Lösung des Anfangswertproblems :

00 y)x(y)y,x(fdx

:DGL

:ktAnfangspunimSteigung

)y,x(f)xx(dxdy

000

Unter der Annahme, dass sich die Steigung im Intervall [x0,x1] nicht wesentlich , g g [ 0, 1]ändert,  kann man den Funktionswert  y1 an der Stelle x1 näherungsweise berechnen.

)xx()y,x(fy)xx()tan(y)x(yy 0100001011 )()y(y)()(y)(yy 0100001011

x1 und y1 werden danach zur Berechnung von  y2 = y(x2) verwendet, usw.

155

2,1,0n)xx()y,x(fyy n1nnnn1n Euler' sches Polygonzugverfahren

Euler‘ sches Polygonzugverfahren :

8.5   Euler' sches Polygonzugverfahren

210n)xx()yx(fyy Euler  sches Polygonzugverfahren : 2,1,0n)xx()y,x(fyy n1nnnn1n

Hausaufgabe :

Wie lauten die konkreten Formeln (ersetze f(x,y)) für die Iteration, wenn dasWie lauten die konkreten Formeln (ersetze f(x,y)) für die Iteration, wenn das Euler‘sche Polygonzugverfahren auf die folgenden drei DGLn angewendet wird?

dydydy )x(yxadxdy)3)x(ya

dxdy)2a

dxdy)1

156

Page 41: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

8.6  Einfache Programmierung des Euler' schen Polygonzugverfahrens

> global k;> global k;> k = 0.3;> [x,y] = eulereinfach([0,5], 2,1000);

( )

eulereinfach_scr.m

> plot(x,y);function [ x, y ] = eulereinfach(xspan, y0,anzahl)

eulereinfach.m

global k;dx = (xspan(2)-xspan(1))/anzahl; % Abstand x(1)= xspan(1);( ) p ( )y(1)= y0; % Anfangsbedingungfor n = 1:anzahl % aus alten Werten neue berechnen

x(n+1) = x(n) + dx;x(n+1) x(n) + dx;y(n+1) = y(n) + k*y(n) * dx;

endend dxykyy

dxxx)x(yk

dxdy

nn1n

n1n

endBei der Programmierung der Funktion  eulereinfach geht die Form der DGL ein (hier  y'= ky ). Für eine andere DGL muss die Funktion  eulereinfach neu 

157

y yprogrammiert werden. Für das einfache Beispiel, das hier programmiert worden ist, ist das kein Problem, bei anderen Verfahren (z.B. ode45) aber schon.

8.7  Verbesserte Programmierung des Euler' schen Polygonzugverfahrens

210n)xx()yx(fyy 2,1,0n)xx()y,x(fyy n1nnnn1n

Das Euler‘ sche Polygonzugverfahren soll so programmiert werden, dass man damit beliebige DGLn lösen kann. Das Verfahren benötigt folgende Informationen :be eb ge G öse a . as e a e be öt gt o ge de o at o e :

• einen x‐ oder t‐Bereich, für den die Lösung berechnet werden soll, d.h. Anfangs‐und Endwert – ein Vektor mit zwei Elementen  - xspan = [ xa, xe ]

• einen Vektor mit n Komponenten, der die Anfangsbedingung festlegt n=1 : bei einer einzigen DGL die Anfangsbedingung y0 (Skalar)n>1 : bei n gekoppelten DGLn einen Anfangsvektor y0 mit n Anfangswerteng pp g y0 g

bei einer Schwingung : Anfangsauslenkung und Anfangsgeschwindigkeit

• Das Function‐Handle einer Funktion, die die erste Ableitung berechnetn=1 : bei einer einzigen DGL wird eine Funktion gebraucht die aus x bzw tn=1 : bei einer einzigen DGL wird eine Funktion gebraucht, die aus x bzw. t 

und y die Ableitung berechnet und zurückgibtn>1 : bei n gekoppelten DGLn benötigt man die Werte von n Ableitungen; man 

d h lb i F k i b di i V k i Kmuss deshalb eine Funktion angeben, die einen Vektor mit n Komponenten zurückgibt; an die Funktion wird der Skalar x bzw. t und ein Vektor y als Parameter übergeben; daraus berechnet die Funktion die ersten Ableitungen 

158

und gibt diese als Vektor zurück.

• die Anzahl der Teilintervalle 

8.7 Verbesserte Programmierung des Euler' schen Polygonzugverfahrens

Programmierung mit function handle – Lösung für eine beliebige DGL

> global k;> k = 0.3;> [ ] l (@fd l2 [0 5] 2 0 1000)

euler_scr.m> [x,y] = euler(@fdgl2, [0,5], 2.0,1000);function [ x, y ] = euler(fun, xspan, y0,anzahl)dx = (xspan(2) xspan(1))/anzahl; % Abstand

euler.m

dx = (xspan(2)-xspan(1))/anzahl; % Abstandx(1)= xspan(1); y(1)= y0; % Anfangsbedingungenfor n = 1:anzahl % aus alten Werten neue berechnen

x(n+1) = x(n) + dx;y(n+1) = y(n) + fun(x(n),y(n))*dx;

endendend function dy_dx = fdgl2( x, y )

global k;dy dx(1,1) = k*y(1);dy_dx(1,1) k y(1);

endBeachte : Die Funktion fdgl2 besitzt 2 Parameter Der Wert von x wird gar nicht verwendet

159

Die Funktion fdgl2 besitzt 2 Parameter. Der Wert von x wird gar nicht verwendet, weil bei der vorliegenden DGL ( y'= ky ) die Ableitung nur von y abhängt. 

8.7 Verbesserte Programmierung des Euler' schen Polygonzugverfahrens

Hausaufgabe zum Euler‘ schen Polygonzugverfahren :g yg g

Im Verzeichnis kap8/uebung finden sich mehrere Funktionen und Skripte zur Lösung von DGLn mit Hilfe des Euler‐Verfahrens.

Die Funktion euler implementiert das Euler‐Verfahren mit fester Schrittweite. In der Praxis wird dieses Verfahren nicht verwendet!

Die Funktionen fdgl1, fdgl2 und fdgl3 berechnen die Ableitungen für dieDie Funktionen fdgl1, fdgl2 und fdgl3 berechnen die Ableitungen für die DGLn y' = k , y' = k y(x) und y' = k x y(x). Die ersten beiden Funktionen sind bereits vollständig. Die Funktion fdgl3muss noch ergänzt werdenwerden.

Im Skript euler_scr wird das Euler‐Verfahren für die verschiedenen DGLnaufgerufen. Die numerische Lösung und die exakte Lösung werden graphisch dargestellt. Ebenso wird die numerische und die exakte Lösung an verschiedenen Punkten miteinander verglichen.

1. Ergänzen Sie die Funktion fdgl3 zur Lösung der DGL y' = k x y(x).1. Ergänzen Sie die Funktion fdgl3 zur Lösung der DGL  y k x y(x).2. Verwenden Sie das Skript euler_scr um die verschiedenen DGLn zu lösen. 

Es muss jeweils nur der Parameter index am Beginn des Skripts richtig gesetzt d ( d ) i i k l i h d hl i h f

160

werden (1,2 oder3). Wie entwickelt sich der Fehler, wenn man sich vom Anfangs‐punkt x=0 entfernt?

Page 42: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Euler' sches Polygonzugverfahren :

8.8   Euler' sches Polygonzugverfahren für die Schwingungsgleichung

210n)xx()yx(fyy Euler  sches Polygonzugverfahren : 2,1,0n)xx()y,x(fyy n1nnnn1n

Schwingung : 0)t(ymk

dtyd2

2

Umschreiben in ein System von zwei gekoppel‐ten DGLn erster Ordnung.mdt ten DGLn erster Ordnung.

ymk

v)v,y,t(f

vy

dtd

221

1

zmkz

)z,t(f)z,z,t(fzz

dtd

)t(z

))t(z),t(z,t(f))t(z,t(f n2n2n1nnn

n

nnn

v)v,y,t(f

ymkvdt 12 zmkzdt

)t(zmk

))()(())((n1

n2n1nnn

Ausdruck für die Berechnung der ersten Ableitung des Vektors z – ein Vektor mit zwei Zeilen.

n

nnnymk

)y(

Ausdruck zur Berechnung der ersten Ableitung von des Vektors z  ein Vektor mit zwei Zeilen. 

z1(tn) :  Wert der ersten Komponente von z zurZeit tn, d.h. der Wert von y zur Zeit tn

der ersten Ableitung von y und v zur Zeit tnyn : Wert von y zur Zeit tn

)t(

z2(tn) :  Wert der zweiten Komponente von z zurZeit tn , d.h. der Wert von v zur Zeit tn

vn : Wert von v zur Zeit tn

161

)tt()t(zmk

)t(z

)t(z)t(z

)t(z)t(z

n1nn1

n2

n2

n1

1n2

1n1

)tt(ymk

vvy

vy

n1nn

n

n

n

1n

1n

8.9  Runge‐Kutta‐Verfahren

Das Euler‐Verfahren wird in der Praxis nicht verwendet, weil es bei vielen DGLnnicht funktioniert und weil es bessere Verfahren gibt. Standardverfahren zur Lösung von DGLn sind sogenannte Runge‐Kutta‐Verfahren.

)(fdyA f t bl 00 xyy)y,x(f

dxy

xxh)yx(fhyy

Anfangswertproblem : 

Eulerverfahren :010001 xxh)y,x(fhyy

Die Steigung f(x, y) im Bereich [x0, x1] wird durch eine Konstante ersetzt, nämlich die Steigung im Punkt f(x0,y0). 

R K tt V f hRunge‐Kutta‐Verfahren :   

Die Steigung f(x, y) im Bereich [x0, x1] wird durch eine „mittlere Steigung“ ersetzt, die sich aus einem komplizierteren Ausdruck als beim Euler‐Verfahren berechnet . 

fhy6/)kk2k2k(yy 0432101

pBeim klassischen Runge‐Kutta‐Verfahren geschieht dies wie folgt (mit h = x1‐x0 ) : 

)y,x(fhk 001 y)(yy 0432101

Berechne zuerst k1, daraus k2 , daraus k3 … Aus den 4 Werten ki wird der neue Funktions‐

)2/ky,2/hx(fhk

)2/ky,2/hx(fhk

2003

1002

162

Aus den 4 Werten ki wird der neue Funktionswert y1 berechnet.

)ky,hx(fhk 3004

8.9  Runge‐Kutta‐Verfahren

Runge‐Kutta‐Verfahren : 6/)kk2k2k(yy Runge‐Kutta‐Verfahren :

1001

h)2/h(fh)2/h2/h(fhkmh)y,x(fhk

6/)kk2k2k(yy 432101

10A 2/mhyy

4C03004

3B02003

2A01002

mh)yhx(fh)mhyhx(fhkmh)y,2/hx(fh)2/mhy,2/hx(fhkmh)y,2/hx(fh)2/mhy,2/hx(fhk

30C

20B

mhyy2/mhyy

4C03004 mh)y,hx(fh)mhy,hx(fhk

Schritte um y1 zu berechnen

1 : y0 und m1 ‐> yA und m2

2 : y0 und m2 ‐> yB und m3

3 : y0 und m3 ‐> yC und m4

6/)mm2m2m(hyy 432101

4 : y0 und m1, m2,m3,m4 ‐>y1

163

)(yy 432101

8.10  Runge‐Kutta‐Verfahren mit MATLAB

MATLAB stellt eine ganze Reihe von Verfahren zur Lösung von DGLn zur Verfügung.

In den meisten Fällen verwendet man die MATLAB‐Funktion ode45 ( ein explizites Runge‐Kutta‐Verfahren mit automatischer Schrittweitensteuerung ) .

Der Aufruf der Funktion ode45 erfolgt analog zum Eulerverfahren :Der Aufruf der Funktion ode45 erfolgt analog zum Eulerverfahren :

@fdgl :

> [ tout, yout ] = ode45(@fdgl, [ta,te], y0);@fdgl :   ein function handle – die Funktion fdgl berechnet die Ableitungenbei n gekoppelten DGLn gibt die Funktion fdgl einen Spaltenvektor mit nWerten (die Ableitungen) zurück d h fdgl ist von der Form y'=f(x y) oderWerten (die Ableitungen) zurück, d.h. fdgl ist von der Form  y'=f(x,y) oder y'=f(t,y). Die Größe x bzw. t ist ein Skalar, y ein Vektor mit n Komponenten

[ta, te] :   der Bereich (Ort oder Zeit), in dem die Lösung berechnet werden soll

y0 :   der Anfangswert der Lösung d h der Wert von y an der Stelle t=tader Anfangswert der Lösung, d.h. der Wert von y an der Stelle t=tay0 ist ein Skalar oder ein Spaltenvektor mit n Zeilen

t und y :   

164

die Lösung der DGL : t ist ein Vektor mit Werten im Bereich [ ta, te ] y eine Matrix mit n Spalten und genauso vielen Zeilen wie t Elemente besitzt

Page 43: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

8.10  Runge‐Kutta‐Verfahren mit MATLAB

Aufruf der Funktion ode45 :

[tout,yout] = ode45(@fdgl,[ta,te],y0);Die Matrix yout besitzt genau k‐Zeilen (wird von ode45 bestimmt) und n‐Spalten.y g ( ) p

y(i,j) :  Wert der j‐ten abhängigen Variablen zur Zeit  tout(i):   yj(tout(i))tout(1) ta yout(1 1) yout(1 2) yout(1 j) yout(1 n)tout(1) ta

. . .

tout(i) = . . .

yout(1, 1) yout(1, 2) . . . yout(1, j) . . . yout(1,n)

yout(i, 1) yout(i, 2) . . . yout(i, j) . . . yout(i, n)( )

. . .

tout(k) te

y ( , ) y ( , ) y ( , j) y ( , )

yout(k, 1) yout(k, 2) . . . yout(k, j) . . . yout(k, n)

yout(:, 1) yout(:, 2) yout(:, j) yout(:, n)

erste zweite j‐te n‐te

Schwingungsgleichung :   Der Vektor  y(:,1) enthält die Auslenkungen und 

erste zweite j te n teabhängige Variable

165

der Vektor  y(:,2) die Geschwindigkeiten  zu verschiedenen Zeiten.

Beispiel : y' = ky

8.10  Runge‐Kutta‐Verfahren mit MATLAB

global k; solve dgl2. m Beispiel :   y  = kyglobal k;% Parameter für die DGLk = 0.2;% Anfangsbedingung Hausaufgabe :

_ g

% Anfangsbedingung y0 = 1.0;% Bereich für die Lösung definieren

[0 30]

Führen Sie die 3 Skripte solve_dgl1-3 aus.

Welche Ergebnisse erhaltenxspan = [0,30];% DGL numerisch lösen[x, y] = ode45(@fdgl2,xspan,y0);

Welche Ergebnisse  erhalten Sie, wenn Sie die DGL  y'=k*x*y mit dem Euler‐

% exakte Lösung berechnenyexakt = y0*exp(k*x);% Lösungen zeichnen

Verfahren und dem Runge‐Kutta‐Verfahren lösen?

Verwenden Sie k = 0.3 und gplot(x, y, x, yexakt, 'LineWidth',2);global k;

xspan= [0,7].g ;k = 0.2;[x,y] = ode45(@fdgl2,[0,30],1.0);plot(x y 'LineWidth' 2);

Wie oben , aber kompakt

166

plot(x,y, LineWidth ,2);

8.10  Runge‐Kutta‐Verfahren mit MATLAB

> help ode45> help ode45ode45 Solve non-stiff differential equations, medium order

method.[TOUT,YOUT] = ode45(ODEFUN,TSPAN,Y0) with TSPAN = [T0 TFINAL] integrates the system of differential equations[T0 TFINAL] integrates the system of differential equations y' = f(t,y) from time T0 to TFINAL with initial conditions Y0. ODEFUN is a function handle. For a scalar T and a vector Y, ODEFUN(T,Y) must return a column vector corresponding toY, ODEFUN(T,Y) must return a column vector corresponding to f(t,y). Each row in the solution array YOUT corresponds to a time returned in the column vector TOUT. To obtain solutions at specific times T0,T1,...,TFINAL (all increasing p , , , ( gor all decreasing), use TSPAN = [T0 T1 ... TFINAL].

See also ode23, ode113, ode15s, ode23s, ode23t, ode23tb, ode15i, odeset, odeplot, odephas2, odephas3, odeprint, deval, odeexamples, rigidode, ballode, orbitode, function_handle

> which ode45C:\Program Files\MATLAB\R2011b\toolbox\matlab\funfun\ode45.m

167

\ g \ \ \ \ \ \

8.10  Runge‐Kutta‐Verfahren mit MATLAB

Bisher : DGLn erster Ordnung mit einer abhängigen Variableng g g

Jetzt : DGLn erster Ordnung mit mehreren abhängigen Variablen

Schwingung : 0)t(ykdt

yd2

2

Umschreiben in ein System von zweigekoppelten DGLn erster Ordnung

)(ymdt2 gekoppelten DGLn erster Ordnung.

ymk

v)v,y,t(f

vy

dtd

221

1

ymky

)y,t(f)y,y,t(fyy

dtd

ymkvdt 12 ymkydt

Die Funktion ode45 erwartet ein function handle zur Auswertung der Funktion y'=f(t,y). Hierbei ist t eine skalare Größe und y ein Vektor mit n Zeilen –y f(t,y). Hierbei ist t eine skalare Größe und y ein Vektor mit n Zeilen jede Zeile beschreibt eine abhängige Variable. Der Rückgabewert der Funktion, die durch das function handle festgelegt wird, ist ein Vektor mit ebenfalls n Zeilen (die erste Ableitung von y die durch f(t y) bestimmt ist)erste Ableitung von y, die durch f(t,y) bestimmt ist).

Im Fall der Schwingungsgleichung besteht der Vektor y aus 2 Zeilen – Zeile 1 ist die Auslenkung y1(t) und Zeile 2 die Geschwindigkeit y2(t) bzw. v(t).Aufruf der Funktion ode45 :

[tout,yout] = ode45(@fdgl,[ta,te],y0);

168

Die Funktion ode45 gibt einen Vektor tout und eine Matrix yout zurück. Die Matrix yout besitzt 2 Spalten. y0 ist der Vektor mit den Anfangsbedingungen.

Page 44: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

8.10  Runge‐Kutta‐Verfahren mit MATLAB

function dy dt = fswdgl1(t y) function dy_dt = fswdgl1(t,y)global km;dy dt(1,1) = y(2);

1

221

2

1

ymky

)y,y,t(fyy

dtd

y_ ( , ) y( );dy_dt(2,1) = -km*y(1);

end

1

2

ymky

)y,t(fdtdyy

function dz dt = fswdgl2(t,z)y ist hier ein Vektor mit zwei Zeilen (21‐Matrix),  dy_dt ist ebenfalls ein Vektor mit 2 Zeilen

ymk

v)v,y,t(f

vy

dtd

_ g ( , )global km;y = z(1); %Auslenkungv = z(2); %Geschwindigkeitv = z(2); %Geschwindigkeitdy_dt = v;dv_dt = -km*y;

y, v, dy_dt und dv_dt sind „natürliche Variablennamen“. Damit lassen sich die DGLn leichter lesen. Zu‐

dz_dt(1,1) = dy_dt; dz_dt(2,1) = dv_dt;

end

erst wird der formale Vektor z auf die natürlichen Variablen abgebildet und zum Schluss werden die Ergebnisse im

169

endzum Schluss werden die Ergebnisse im formalen Vektor dz_dt gespeichert.

8.10  Runge‐Kutta‐Verfahren mit MATLAB

v

)vyt(fyd

21 y

)yt(f)yyt(fyd

ymk

)v,y,t(fvdt

1

221

2

1

ymk)y,t(f)y,y,t(f

ydt

Aufruf der Funktion ode45 :

[tout,yout] = ode45(@fdgl,[ta,te],y0);Die Funktion ode45 gibt einen Vektor tout und eine Matrix yout zurück.

Der Vektor t enthält die Zeiten, für die die Werte von y berechnet worden sind. Für das erste Element gilt t(1) = ta und für das letzte (das k‐te) Element t(k) =te. Wie viele verschiedene t‐Werte im Intervall [ta, te] verwendet werden, um dieWie viele verschiedene t Werte im Intervall [ta, te] verwendet werden, um die Lösung zu berechnen, hängt von der DGL ab. ode45 versucht einerseits mit Hilfe einer ausgefeilten Schrittweitensteuerung (Steuerung des Abstands aufeinander‐folgender t‐Werte) die Anzahl der t‐Werte k klein zu halten Andererseits darf derfolgender t‐Werte) die Anzahl der t‐Werte k klein zu halten. Andererseits darf der Abstand aufeinanderfolgender t‐Werte nicht zu groß sein, damit der Diskreti‐sierungsfehler (Ersetzung der Ableitung durch Differenzenquotienten) nicht zu groß i dwird.

Die Matrix yout (kurz y) besitzt genau k‐Zeilen und n‐Spalten.

y(i,j) :  der Wert der j‐ten abhängigen Variablen zur Zeit t(i):   yj(t(i))

170

jSchwingungsgleichung  :   y(:,1) ‐ die Auslenkungen – k Werte

y(:,2) ‐ die Geschwindigkeiten – k Werte 

Kap 9   Einführung in Simulink

i l i füh i i li kKapitel 9  Einführung in Simulink

9.1 Was ist Simulink ?

9.2 Erstes Simulink‐Modell erstellen

9.3 Simulink und Schwingungen9.3 Simulink und Schwingungen

9.4 Vereinfachung von Simulink‐Modellen 

9 5 Bibliotheken Simulink Library Browser9.5 Bibliotheken – Simulink Library Browser

9.6 Schnittstelle MATLAB ‐ Simulink

Simulink ist eine graphische Oberfläche zur Beschreibung, Simulation undAnalyse dynamischer Systeme ( d.h. zeitabhängiger Systeme ). 

Simulink baut auf MATLAB auf – ohne MATLAB kann Simulink nicht arbeiten.

171

9.1  Was ist Simulink ?  ‐ Gedämpfte Schwingung

0)t(y3dy102yd2

2)0t(y0y0)0t(y0v Modell :

Simulink : Graph. Oberfläche zur Beschreibung, Simulation, Analyse dynamischer Systeme

0)t(y3dt

1.02dt2 2)0t(y0y,0)0t(y0v Modell :

Blöcke :• Integrator• AdditionAddition 

• Gain• Constant• Mux

• ToWorkspace

• Scopep

Signale :a(t) , v(t) , y(t)+

Systemzeit :

t  ‐ [0,30]

+

172Simulink‐Modell für eine gedämpfte Schwingung

Page 45: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.1  Was ist Simulink ? ‐ Gedämpfte Schwingung

Durchführung und Ergebnis der Simulation0)(3dy102yd2

0)t(y3dtdy1.02

dtyd2

2)0t(y,0)0t(y

Die Blöcke ToWorkspaceschreiben die Werte der Signale y(t) und v(t) zuSignale y(t) und v(t) zu bestimmten Zeiten in zwei Vektoren des MATLAB ‐Workspace Die ZeitpunkteWorkspace. Die Zeitpunkte werden in tout gespeichert. 

tout(i)= tiy(i)= y(t )

Fü di Si l ti i d i R K tt V

y(i)= y(ti)v(i)= v(ti)

Für die Simulation wird ein Runge‐Kutta‐Ver‐fahren mit fester Schrittweite verwendet (ode4, Schrittweite t=0.1).  Die Simulation erstreckt sich über ein Zeitintervall von [0 30]

173

erstreckt sich über ein Zeitintervall von [0,30]. 

9.1  Was ist Simulink ? ‐ Gedämpfte Schwingung

0)t(3dy102yd2

2)0t(00)0t(0 0)t(y3dtdy1.02

dtyd2 2)0t(y0y,0)0t(y0v

Die DGL für eine gedämpfte Schwingung kann alleine mit MATLAB behandelt werden  oder mit Simulink.

Simulink : MATLAB :

• Die DGL wird über eine graph. Oberfläche definiert (!!!).

• Simulink löst das System selbst‐

• Die DGL wird in eine DGL erster Ordnung umgeschrieben und in einer MATLAB‐Funktion codiert y

ständig (d.h. die durch die graph.  Oberfläche definierten Gleich‐ungen) mit Hilfe geeigneter Ver‐

(siehe fgswdgl.m).• Die DGL wird durch ein geeignetes Verfahren gelöst (expliziter Aufrufungen) mit Hilfe geeigneter Ver

fahren (z.B. ode45 oder ode4)• Die Ergebnisse werden mit Hilfe 

i t Blö k i t d

Verfahren gelöst (expliziter Aufruf der Funktion ode45 oder ode4oder …) Die Ergebnisse werden über Rückgabewerte in einemgeeigneter Blöcke angezeigt oder 

gespeichert.

• Ergebnisse können für die Weiter‐

über Rückgabewerte in einem Array gespeichert.

• Die Ergebnisse werden mit Hilfe 

174

verarbeitung durch MATLAB gespeichert werden.

des plot‐Befehls graphisch darge‐stellt oder weiterverarbeitet.

Kap 9   Einführung in Simulink

Kapitel 9 Einführung in SimulinkKapitel 9  Einführung in Simulink9.1  Was ist Simulink ?9.2 Erstes Simulink‐Modell erstellen9.2 Erstes Simulink Modell erstellen9.2.1 Simulink starten9.2.2 Simulink‐Modell erstellen und ändern9.2.3 Simulation starten9.2.4 Sine Wave‐Block9 2 5 Integrator Block9.2.5 Integrator‐Block9.2.6 Mux‐Block9.2.7 Scope‐Block9.2.7 Scope Block

9.3 Simulink und Schwingungen9.4 Vereinfachung von Simulink‐Modellen 9.5 Schnittstelle MATLAB ‐ Simulink

175

9.2  Erstes Simulink‐Modell erstellen

Aufgabe :u gabe :Das Signal  a(t)= A0sin(t) und dessen Integral über die Zeit sollen graphisch dargestellt werden. Lösen Sie die Aufgabe mit Simulink für das Zeitintervall [ 0 10]Zeitintervall [ 0, 10].

Welche Blöcke (Komponenten) sind für diese Aufgabe notwendig ?

• ein Block• ein Block ,

• ein Block ,

• ein Block ,

Teilaufgaben :

1. Simulink starten

2. Ein neues Simulink‐Modell erstellen

3. Simulation starten

176

4. Das Ergebnis analysieren

Page 46: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.2.1  Simulink starten

Um Simulink zu starten muss zuerst MATLAB gestartet werden. Danach wird der gsogenannte „ Simulink Library Browser “ geöffnet. Das kann auf verschiedene Weisen erfolgen :

• Klick auf das Simulink Icon in der MATLAB Toolbar• Klick auf das  Simulink Icon in der MATLAB Toolbar

• Im MATLAB Command‐Window den Befehl  simulink eingeben

• Doppelklick auf ein existierendes Simulink ModellDoppelklick auf ein existierendes Simulink Modell

177

9.2.1  Simulink starten  ‐ Simulink Library Browser

Suche nach bestimmten Blöcken

hlen

k au

swä

Biblio

the

Liste von Bibliotheken oder Blöcken

B

Beschreibung der gewählten Biblio

178

Beschreibung der gewählten Biblio‐thek oder des gewählten Blocks

9.2.1  Simulink starten  ‐ Simulink Library Browser

Blöcke der Bibliothek „Commonly Used Blocks“

179

9.2.2  Simulink‐Modell erstellen oder ändern

Nach dem Start von Simulink wird ein neues Simulink‐Modell erzeugt oder ein gbereits vorhandenes Simulink‐Modell geöffnet.

Ein Simulink‐Modell wird in einer Datei mit der Endung .slx gespeichert (veraltet mdl abgeleitet von model) Diese Datei ist eine einfache ASCII Datei(veraltet .mdl abgeleitet von model). Diese Datei ist eine einfache ASCII‐Datei, die die Modellinformation in einer bestimmten Syntax speichert.

• Neues (leeres) Simulink‐Modell wird in drei Schritten erstellt

1. Wähle im Simulink Library BrowserFile ‐> New ‐> Model

2 Fil S2. File ‐> Save

3. Dateinamen für das Modell eingeben

• Vorhandenes Simulink‐Modell öffnen – auf mehrere Arten möglich

• Wähle im Simulink Library Browser Menü „File ‐> Open“ und selektiere die Datei in der das Modell gespeichert istDatei, in der das Modell gespeichert ist.

• Doppelklick auf eine Datei mit der Endung .slx• Dateinamen im MATLAB Command‐Window eingeben.

180

g

• Wähle „File ‐> Open“ im Menü von MATLAB

Page 47: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.2.2  Simulink‐Modell erstellen oder ändern

Im Simulink Library Browser werden die notwendigen Blöcke für das Modell ge‐y g gwählt und in das leere Modell gezogen (links). Anschließend werden die Blöcke sinnvoll angeordnet, miteinander verbunden und geeignet konfiguriert (rechts).

Das Modell enthält die Blöcke :Das Modell enthält die Blöcke :

• Integrator• Multiplexer (Mux)

181

• Scope – für die Anzeige der Ergebnisse• Sinusgenerator (Sine Wave) aus der Bibliothek Sources

9.2.3  Simulation starten

Das Simulink‐Modell wird über die Toolbar gestartet (dort kann auch die Simu‐lationsdauer eingestellt werden) oder über das Menü Simulation ‐> Start.

Das Ergebnis der Simulation wird angezeigt, wenn man den Scope‐Block per Doppelklick öffnet. Im vorliegenden Simulink‐Modellöffnet. Im vorliegenden Simulink Modell erhält der Scope‐Block ein Eingangssignal, das aus zwei Teilsignalen besteht. Der Mux‐Block erzeugt aus zwei skalaren Signalen ein g gvektorwertiges Signal.

Damit die Zeichnung wie im nebenstehenden Bild erzeugt wird, muss die Schrittweite bei

182

Bild erzeugt wird, muss die Schrittweite bei der Simulation begrenzt werden, z.B. auf  t = 0.05 .

9.2.4  Sine Wave‐Block

Sine Wave ‐ Sinusgenerator   S e a e S usge e atoSine type : 

• Time based

O(t)=Ampsin(Freq t+phase)+bias

Erzeugt ein sinusförmiges Signal 

O(t) Amp sin(Freq t+phase)+biasFreq = 2pi bedeutet eine Periode pro SekDie Konstante  pi kann verwendet werden 

1 rad == 360°/(2 pi)1 rad == 360°/(2 pi)• Sample based

Siehe Simulink‐Hilfe

Time (t)  :

• Use Simulation time – kein Eingang

U l i l i Ei• Use external signal – mit Eingang

Aufgaben :Aufgaben : 

• 5 Schwingungen pro Sekunde, Amplitude 2

• 3.7 Schwingungen pro Sekunde, Anfangsphase 35°

183

• Welche Wirkung hat  bias = 2 ?

9.2.5  Integrator‐Block

Integrator   Integriert das Eingangssignal von der Startzeit (Default 0) bis zur aktuellen Zeit t.Zusätzlich wird eine Anfangsbedingung festgelegt (Initial condition). Das Symbol für den Integrator‐Block 1/S stammt aus der Theorie der Laplace‐Transforma‐g / ptionen. Der Integration im Orginalraum entspricht die Division durch S im Bildraum.

x(t) y(t)

x(t)y(t)

)t(y

u(t)

)t(y

184

)t(y )(y

Page 48: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.2.6  Mux‐Block

Mux :  Combine several input signals into vector

bar                   signals none

Mit Hilfe der „Display option“ wird die graphische Darstellung eines Mux‐Blocks festgelegt. Wählt man die Option „signals“ , dann werden den Eingängen die Namen der Eingangssignale zugeordnet. Dadurch wird das Modell besser lesbar.

Ein Mux‐Block erzeugt aus mehreren Eingangssignalen ein vektorwertiges SignalEin Mux Block erzeugt aus mehreren Eingangssignalen ein vektorwertiges Signal – mehrere Einzelsignale werden zu einem einzigen Signal zusammengefasst.

)t(x)t(z)t(x)t(z)t( 11

185

)t(y)t(z)t(x)t(z

)t(y)(

)t(z)(

)t(z2

1

2

1

9.2.7  Scope‐Block

ScopepDieser Block zeigt die Eingangssignale als Funktion der Simulationszeit an.

Number of axes : Definiert die Anzahl der Anzeigefenster; für jedes An‐Definiert die Anzahl der Anzeigefenster; für jedes An‐zeigefenster gibt es einen separaten Signaleingang; jedes Fenster kann eine oder mehrere Kurven gleich‐zeitig darstellen (d h das Eingangssignal kann ein

186

zeitig darstellen (d.h. das Eingangssignal kann ein skalares Signal sein oder ein vektorwertiges Signal, das mit einem Mux‐Block erzeugt worden ist).

9.2.7  Scope‐Block

Die folgenden Simulink‐Modelle ( bsp2_rampe_integrator1/2.slx ) integrieren die Funktion  y(t)=1.2t+5 im Intervall von [0,10]. Im Scopewerden  y(t) und der Wert des Integrals angezeigt. Wie lautet die Formel? 

187

Kap 9   Einführung in Simulink

i l i füh i i li kKapitel 9  Einführung in Simulink9.1 Was ist Simulink ?

9.2 Erstes Simulink‐Modell erstellen

9.3 Simulink und Schwingungen

9.3.1   Einfachste Schwingung – Harmonischer Oszillator

9.3.2 Berechnung der Lösung für eine Simulation

9.3.3 Nichtlineare Schwingung

9.3.4 Parameter in Simulink‐Modellen

9 4 V i f h Si li k M d ll9.4 Vereinfachung von Simulink‐Modellen 

9.5 Schnittstelle MATLAB ‐ Simulink

188

Page 49: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.3.1  Einfachste Schwingung ‐ Harmonischer Oszillator 

DGL für eine 0)(3yd2

0)0t(3)0t( Schwingung 0)t(y3

dtyd2 0v)0t(y,3y)0t(y 00

schwingung slxschwingung.slx

)t(y )t(y )t(y

2

)t(y3

Die Anfangsbedingungen für die Lösung der DGL werden in den beiden Integratorblöcken

)t(y3dt

yd2

2

189

(Intitial condition) gesetzt. Man kann die Anfangsbedingungen auch extern setzen, über einen Constant‐Block. Beachte : Das obige Simulink‐Modell beschreibt nur die DGL für eine Schwingung. Es ist keine Lösung der DGL.

9.3.2  Berechnung der Lösung für eine Simulation 

DGL für eine 0)(3yd2

0)0t(3)0t(

Wie kann man aus dem Simulink‐Modell eine Lösung berechnen ?

Schwingung 0)t(y3dt

yd2 0v)0t(y,3y)0t(y 00

Annahme : Zur Zeit t0 sind Auslenkung, Geschwindigkeit und Beschleunigung bekannt.Das gilt z.B. zur Zeit t=0 . Wie erhält man die Größen zur Zeit t0+t ?

)t(y 0 )t(y 0)t(y 0

)(y 0 )(y 0

)tt(y 0 )tt(y 0 )tt(y 0

)(y 0

)t(y3 0 )(y 0

)tt(y3 0

190

9.3.3   Nichtlineare Schwingung

0)t(c)t(kyd 32 Der Term  y3 ist ein sogenannter0)t(y

m)t(y

mdty 32

y gnichtlinearer Term. 

191schwingungnichtlinear.slx

9.3.3   Nichtlineare Schwingung  – Product‐Block

192

Page 50: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.3.4  Parameter in Simulink‐Modellen

Die beiden Variablen k und m, ,die im Gain‐Block verwendetwerden, müssen im MATLAB Workspace gesetzt werden.Workspace gesetzt werden.

Fehlermeldung während der

193

Simulation, falls eine verwen‐dete Variable nicht definiert ist.

9.4   Vereinfachung von Simulink‐Modellen

Der Modellteil der die rücktreibendeDer Modellteil, der die rücktreibendeKraft beschreibt, soll “vereinfacht” werden. Es wird eine kompaktere Darstellunggesucht, die auch leichter lesbar und leichter änderbar ist. Hierzu werdenfolgende Blöcke verwendet : 

• Fcn‐Block

S b t Bl k• Subsystem‐Block

• Signale zu Vektoren zusammenfassen

Diese Blöcke ersetzen den umrandetenDiese Blöcke ersetzen den umrandetenBereich im linken Modell.

D S b t Bl k i d h d t i Hi hi Si li kDer Subsystem‐Block wird auch verwendet um eine Hierarchie von Simulink‐Modellen zu erzeugen. Auf oberster (abstrakter) Ebene des Simulink‐Modellssieht man nur wenige einfache Blöcke und eine Reihe von Subsystem‐Blöcken. 

194

In der nächsten Ebene werden die Subsystem‐Blöcke genauer definiert. Die Subsystem‐Blöcke können wiederum Subsystem‐Blöcke enthalten, usw. .

9.4.1  Function‐Block

Mit Hilfe eines Function‐Blocks kann ein beliebigermathematischer Ausdruck formuliert werden. Im

195

mathematischer Ausdruck formuliert werden. ImAusdruck (Expression) steht u für das Eingangs‐signal ( skalares oder vektorwertiges Signal ).

9.4.1  Function‐Block

Fcn‐Block :

Im Feld “Expression” wird eingetragen, wie sich die Ausgangsgröße aus der Ein‐gangsgröße berechnet. Die Eingangsgröße heißt immer u, egal wie diese Größeextern bezeichnet wirdextern bezeichnet wird.

Die Eingangsgröße kann ein Skalar sein oderein Vektor. Ist die Eingangsgröße ein Vektor, dann wird die i‐te Komponente des Vektorsmit u(i) bezeichnet. 

Die Ausgangsgröße ist stets ein Skalar!Die Ausgangsgröße ist stets ein Skalar!

Die Regeln, wie ein Expression gebildet wirdund was man dabei zu beachten hat, sind in der Hilfe ausführlich beschrieben.

Aufgabe:Ein Function‐Block soll den Radius r(t) berechnen, der sich aus den Signalen x(t) 

196

, g ( )und y(t) ergibt. Wie lautet der Ausdruckfür Expression im Function‐Block?  

Page 51: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.4.1  Function‐Block

Hausaufgabe: g

0)t(ymc)t(y

mk

dtdy2

dtyd 32

2

2)0t(y0y,0)0t(y0v

Lösen Sie die obige DGL mit Hilfe von Simulink. Der Aus‐druck für die zweite Ableitung soll mit Hilfe einesFunction‐Blocks berechnet werden, d.h. verwenden Siei F i Bl k d l A öß b

3)t(ymc)t(y

mk

dtdy2

einen Function‐Block, der als Ausgangsgröße neben‐stehenden Ausdruck liefert. Was muss im Expression des Function‐Blocks eingetragen werden ?

mmdt

197

9.4.2  Subsystem‐Block

Anstelle eines Fcn‐Blocks soll nun ein Subsystem‐Block verwendet werden.

Alle Blöcke die in den Subsystem Block verlagert werden werden selektiert ebenso dieAlle Blöcke, die in den Subsystem‐Block verlagert werden, werden selektiert, ebenso die Eingangs‐ und die Ausgangssignale. Die Selektion kann auf zwei Arten erfolgen :

• einen rechteckigen Bereich mit Hilfe der Maus wählen

ü k d Shif d S l k i d lö k d Si l

198

• Drücken der Shifttaste und Selektion der Blöcke und Signale

Danach Menü Diagram‐> Subsystem & Model Reference ‐> Create Subsystem from Selection oder Kontextmenü ‐> Create Subsystem from Selection  wählen.

9.4.2  Subsystem‐Block

Nach dem Erzeugen des Sub‐system‐Blocks zeigt sich das Modell wie folgt.Mit demModel‐Browser (An‐zeige über das Menü View) kann man einfach im gesamtenSimulink‐Modell navigieren.

In diesem Beispiel gibt es je‐weils nur ein Eingangs‐ und einAusgangssignal. Es könnenaber auch mehrere Signale in den Subsystem‐Block geführtund mehrere Signale aus demSubsystem herausgeführtwerden.

Beachte : Beide Modelle werden in einereinzigen Datei gespeichert!

199

Subsystem

schwingungnichtlinear_subsys.slx

Kap 9   Einführung in Simulink

Kapitel 9 Einführung in SimulinkKapitel 9  Einführung in Simulink9.1 Was ist Simulink ?

9 2 Erstes Simulink Modell erstellen9.2 Erstes Simulink‐Modell erstellen

9.3 Simulink und Schwingungen

9 4 Vereinfachung von Simulink‐Modellen9.4 Vereinfachung von Simulink‐Modellen 

9.5 Schnittstelle MATLAB – Simulink9.5.1 Parameter in Simulink‐Modellen9.5.1 Parameter in Simulink Modellen

MATLAB‐Workspace (Base‐Workspace) ‐ Model‐Workspace

9.5.2 Menü Simulation – Model Configuration Parameters( ) /Auswahl von Lösungsverfahren (Solvern) ‐ Data Import/Export

9.5.3 Blöcke „To Workspace“ und „From Workspace“ . . .

200

Page 52: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.5.1  Parameter in Simulink‐Modellen

Variablen, die im MATLAB‐Workspace vorhanden sind, dürfen als Parameter in Simulink‐Blöcken verwendet werden.

Beispiel :  Gain‐Block

Wird die Simulation gestar‐Wird die Simulation gestar‐tet und die Variablen k oderm sind nicht definiert, dannbricht die Simulation ab undbricht die Simulation ab und es erscheint eine Fehler‐meldung. Der Block, in demder Fehler aufgetreten ist , 

201

g ,wird markiert.

9.5.1  Parameter in Simulink‐Modellen

Simulink hat Zugriff auf zwei verschiedene Workspaces :

• MATLAB‐Workspace

• Model‐Workspace Jedem Simulink‐Modell ist ein eigener Workspace zugeordnet, der sogenannte Model‐g p g , gWorkspace. Variablen imModel‐Workspace werden innerhalb eines Simulink‐Modelldefiniert und können nur innerhalb des Modells verwendet werden. Die Definition dieser Variablen erfolgt über den Model‐Explorer. Vorteil: Variablen aus demModel‐Workspace gehören zumModell und werden im Simu‐link‐Modell gespeichert. Variablen imModel‐Workspace haben Vorrang vor Variablen im MATLAB‐Workspace.

modelworkspace.slx

202

9.5.2  Menü Simulation – Model Configuration Parameters

203

9.5.2  Menü Simulation – Model Configuration Parameters

Die erste Spalte der Matrix  yout enhält die Werte des Block Out 1. Dieser Block muss im Modell vorhandensein, ansonsten werden keine Werte gespeichert. Diesein, ansonsten werden keine Werte gespeichert. Die zweite Spalte der Matrix enthält die Werte des Blocks  Out 2, falls dieser vorhanden ist, …

Die Zeilen der Matrix beziehen sich auf die Zeitpunkte,

204

Die Zeilen der Matrix beziehen sich auf die Zeitpunkte, die in tout gespeichert sind.

Page 53: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

9.5.3  Blöcke „To Workspace“ und „FromWorkspace“ . . .

205 206

207 208

Page 54: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Praktikum

IngenieurinformatikTeil II

Einführung in MATLAB/Simulinkg

209

Praktikum : Ingenieurinformatik ‐MATLAB / Simulink

1   MATLAB Entwicklungsumgebung

2 Ei d A b D b2   Ein‐ und Ausgabe  ‐ Debugger   

3   2D‐ / 3D‐Graphik und Zugriff auf Dateien 

4   Gleichungssysteme, Eigenwerte und Eigenvektoren 

5 N i h Lö Diff ti l l i h5   Numerische Lösung von Differentialgleichungen

6   Simulink – Übungsbeispiele

210

Termin 1 : MATLAB Entwicklungsumgebung

1 MATLAB starten

2 MATLAB ‐ Entwicklungsumgebung2 MATLAB ‐ Entwicklungsumgebung

3 Arbeiten mit Variablen (Skalaren)

4 Arbeiten mit Vektoren und Matrizen

5 Skript ‐ Files 

6 MATLAB‐Funktion

7 Matrizen – Drehung in der Ebene7 Matrizen  Drehung in der Ebene

8 MATLAB – Hilfe – Weitere Befehle

9 Üb f b F kti9 Übungsaufgabe zu Funktionen

10 Hausaufgabe

211

1.1   MATLAB starten

Im Praktikum wird MATLAB in der Version R2012b verwendet.

MATLAB ist auf allen Rechnern in den PC‐Räumen installiert

MATLAB starten :

• MATLAB – Icon doppelklicken

Ei i S ü ähl• Eintrag im Startmenü wählen

• Start ‐> Alle Programme ‐> MATLAB ‐> R2012b

212

Page 55: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.2   MATLAB ‐ Entwicklungsumgebung

Toolstrip

Command Window Workspace

• Eingabe von Befehlen• Ergebnisse ausgeben

p• Liste der vorhandenen Variablen

• Eigenschaften von

Current Folder

• Arbeitsverzeichnis• Fehlermeldungen anzeigen

• Aufruf von Skripts und Funktionen

Eigenschaften von Variablen anzeigenund ändern 

• Dateiverwaltung• Zugriff auf M‐Files

Skripts Funktionen

Command History

‐ Skripts‐ Funktionen

Command History• Liste der bisher ein‐gegebenen Befehle

213

• Befehle wählen und erneut ausführen

5

1.3   Arbeiten mit Variablen (Skalaren)

>> r = 5r =

5>> format compact>> rr = Die Variable ans speichert das Ergebnis 

i A i di i h5>> 2*pi*rans =

einer Anweisung, wenn dieses nicht explizit einer Variablen zugewiesen wird

31.4159>> u = 2*pi*ru =

31 4159

pi ist eine vordefinierte Variable und besitzt den Wert 3.1415 …

31.4159>> u = 2*pi*10;>> uu =

Ein ; am Ende einer Anweisung unter‐drückt die Ausgabe von Ergebnissen. Die Anweisung wird aber ausgeführt.u

62.8319>> whos

Name Size Bytes Class

g g

Der Befehl whos listet alle Variablen im Workspace auf.

214

ans 1x1 8 double r 1x1 8 double u 1x1 8 double

p

1.3   Arbeiten mit Variablen (Skalaren)

Toolstrip

Variable‐Editor

Ei D lkli k f d N i V i bEin Doppelklick auf den Namen einer Variab‐len im Workspace‐Fenster öffnet den Variab‐le‐ Editor – im Beispiel den Variable‐Editor der Variablen r. Der Variable‐Editor ist für die Bearbeitung von Matrizen nützlich. 

Beachte : der sogenannte Toolstrip ändert

215

Beachte : der sogenannte Toolstrip ändert sich, wenn der Variablen‐Editor geöffnet wird.

Kontextmenü für die Variable r

1.3   Arbeiten mit Variablen (Skalaren)

Anmerkungen : e u ge :

• Bei MATLAB müssen Variablen nicht explizit definiert werden. Der Befehl r = 5 erzeugt automatisch eine Variable vom Typ doublemit dem Namen  r

d i t di d W t 5 D T d bl i t d St d dtund weist dieser den Wert 5 zu. Der Typ double ist der Standardtyp (Default‐Typ) für Variablen.

• Der Befehl ' format compact ' bewirkt eine kompakte Darstellung der p p gAusgabe im Command‐Window.

• Die Variable pi ist eine vordefinierte Variable mit dem Wert 3.1415...i i bl i b f ll i d fi i i bl i d d i• Die Variable ans ist ebenfalls eine vordefinierte Variable. Wird der Wert eines 

Ausdrucks nicht explizit einer Variablen zugewiesen, so wird der Wert des Ausdrucks der Variablen ans zugewiesen. Der alter Wert wird überschrieben.

• Durch einen Semikolon ; am Ende eines Ausdrucks wird die Ausgabe des Ergebnisses unterdrückt (der Ausdruck wird aber ausgeführt).

D B f hl h i t I f ti d kt ll i W k• Der Befehl whos zeigt Informationen zu den aktuell im Workspace vor‐handenen Variablen an. 'Size 1x1' bedeutet, dass die entsprechende Variable eine 11‐Matrix (d.h. ein Skalar) ist; in der Spalte Bytes wird der 

216

Speicherplatzbedarf der Variablen angezeigt und die Spalte Class gibt den Datentyp an.

Page 56: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.3   Arbeiten mit Variablen (Skalaren)

Aufgabenu gabe1. Geben Sie die Befehle r=5, … nacheinander im Command‐ Fenster ein.

2. Ändern Sie den Wert von r über das Kontextmenü der Variablen auf 7.3 Ä d Si d W t it Hilf d V i bl Edit f d W t 103. Ändern Sie den Wert von rmit Hilfe des Variable‐Editors auf den Wert 10.4. Ändern Sie den Namen der Variablen in r1.5. Geben Sie dann r und r1 im Command‐Window ein.

6. Löschen Sie die Variable r1.7. Wählen Sie „Undock“ für den Variab‐

le Editor Machen Sie den Vorgangle‐Editor. Machen Sie den Vorgang wieder rückgängig, d.h. docken Sie das Fenster wieder an.

217

>> A [1 2 3 4]

1.4   Arbeiten mit Vektoren und Matrizen

>> A = [1, 2; 3, 4]A =

1 23 4

>> whosName Size Bytes Class A 2x2 32 double

2 1 16 d bl3 4>> x = [2; 3]x =

2

y 2x1 16 double x 2x1 16 double

>> A(3,3) = 9A =2

3>> y = A*xy =

A =1 2 03 4 00 0 9y

818

>> A(2,2)

0 0 9>> whosName Size Bytes ClassA 3x3 72 double( , )

ans =4

>> x(2)

A 3x3 72 double y 2x1 16 double x 2x1 16 double

>> A*xans =

3>> x(2,1)

Error using * Inner matrix dimensions must agree.>> A(3,4)

218

ans =3

Index exceeds matrix dimensions.

1.4   Arbeiten mit Vektoren und Matrizen

Aufgabenu gabe1. Geben Sie die Befehle  A = [1, 2; 3, 4], … (siehe vorherige Folie) der Reihe 

nach im Command‐Window ein. Rechnen Sie die Matrix‐Vektor‐Multiplikation auf einem Blatt Papier nach! Im SS2013 konnten 50% der Teilnehmer/innenauf einem Blatt Papier nach! Im SS2013 konnten 50% der Teilnehmer/innen der Info‐II‐Klausur diese Aufgabe nicht korrekt lösen!

2. Nach der Eingabe aller Befehle ist die Matrix A eine 33‐Matrix. Löschen Sie mit Hilfe des Variable Editors die 3 te Spalte und die 3 te Zeile der Matrix Siemit Hilfe des Variable‐Editors die 3‐te Spalte und die 3‐te Zeile der Matrix. Sie erhalten dann wieder eine 22‐Matrix. Geben Sie diese aus.

3. Erzeugen Sie aus der 22‐Matrix A eine 55‐Matrix mit Hilfe des Variable‐Editors.

Anmerkungen : • Bei der Definition von Vektoren und Matrizen werden []‐Klammern verwen‐[]

det. Zeilen werden bei der Definition durch einen Semikolon ; voneinander getrennt, die Spalten einer Matrix durch Leerzeichen/Space oder Komma , .

• Beim Zugriff auf die Elemente einer Matrix werden ()‐Klammern verwendet.Beim Zugriff auf die Elemente einer Matrix werden () Klammern verwendet.• Für einen Zeilenvektor gilt  :   x(k) == x(1,k)• Für einen Spaltenvektor gilt :   x(k) == x(k,1)• Konvention : Namen von Matrizen werden in Großbuchstaben geschrieben

linear indexing !

219

• Konvention : Namen von Matrizen werden in Großbuchstaben geschrieben.• MATLAB unterscheidet Groß‐ und Kleinschreibung

1.5   Skript ‐ Files

Ein MATLAB Skript ist eine ASCII‐Datei, die MATLAB‐Befehle enthält.

Wird das Skript ausgeführt, dann werden die Befehle, die in der Datei gespeichert sind, der Reihe nach abgearbeitet, so als würde man die Befehle hintereinander im Command‐Window eingeben.Co a d do e gebe .

Aufgabe :

Erstellen Sie ein Skript zur Lösung einer quadratischen Gleichung. Das Skript i d f d U L f k i U t i h i tl b i i D t i it dwird auf dem U‐Laufwerk im Unterverzeichnis  matlab in einer Datei mit dem 

Namen scr_quadgl.m gespeichert ( U:\matlab\scr_quadgl.m ). 

220

Page 57: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.5   Skript ‐ Files

Teilaufgaben :g

1) Ein Verzeichnis  matlab auf dem U‐Laufwerk anlegen und dann den „CurrentFolder“ bei MATLAB auf  U:\matlab setzen.

2) Ein neues Skript (neue Datei) mit dem Namen scr quadgl m erzeugen2) Ein neues Skript (neue Datei) mit dem Namen scr_quadgl.m erzeugen.Hierzu wird entweder das Kontextmenü im Fenster Current Folder aktiviert oder „New“ im Toolstrip gewählt.

2

2

221

1.5   Skript ‐ Files

3) Das Skript  scr quadgl.m schreiben und speichern.) p _q g p

4) Das Skript ausführen. Hierzu gibt es verschiedene Möglichkeiten :

a) Kontextmenü der Datei  scr_quadgl.m öffnen, den Befehl  Run wählen

)b) Die Datei  scr_quadgl.m im Current Folder selektieren und in dasCommand‐Window ziehen.

c) Im Command‐Window scr quadgl eintippen) _q g pp

d) Run‐Button im Toolstrip anklicken. Je nachdem, ob der Editor angedockt ist oder nicht, befindet sich der Run‐Button im Toolstrip von MATLAB oder im Toolstrip des EditorsToolstrip des Editors.

Probieren Sie alle 4 Varianten.

Beachten Sie, dass ein Skript Zugriff auf die Variablen im Workspace hat. Es können neue Variablen erzeugt oder existierende Variablen überschrieben werden. Ver‐

222

neue Variablen erzeugt oder existierende Variablen überschrieben werden. Verwenden Sie den clear‐Befehl um sich davon zu überzeugen. Der Befehl clearlöscht alle vorhandenen Variablen aus dem MATLAB‐Workspace.

1.6   MATLAB‐Funktion

Aufgabe :g

Erstellen Sie eine  Funktion  f_quadgl zur Lösung einer beliebigen quadra‐tischen Gleichung.   0cxbxa 2

An die Funktion werden die drei Koeffizienten der quadratischen Gleichung übergeben. Als Ergebnis werden die beiden Lösungen der Gleichung zurück‐gegeben.gegeben.

223

1.6   MATLAB‐Funktion

Teilaufgaben :g

1) Erzeugen Sie eine neue Datei mit dem Namen f_quadgl.m (Typ Function) ‐entweder das Kontextmenü im Fenster „Current Folder“ aktivieren und Function auswählen (rechts) oder über den Taskstrip New ‐> Function (links)Function auswählen (rechts) oder über den Taskstrip New ‐> Function (links).

11

2

11

2

224

Page 58: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.6   MATLAB‐Funktion

Teilaufgaben :g

2) Ändern Sie den Namen der Datei von  Untitled.m auf  f_quadgl.m , wenn Sie die Funktion über das Fenster „Current Folder“ erzeugt haben. MATLAB erzeugt ein Programmgerüst für die neue FunktionMATLAB erzeugt ein Programmgerüst für die neue Funktion.

3) Programmieren Sie die Funktion  f_quadgl.m . 

225

1.6   MATLAB‐Funktion

Teilaufgaben :g

4) Testen Sie ihre Funktion für verschiedene Werte von a, b und c. Die Funktion kann auch komplexe Lösungen liefern! Geben Sie auch den Hilfe‐Text für die Funktion ausFunktion aus.

Aufruf der Funktion

Testen Sie ihr Programm mit Semikolon und ohne Semi‐kolon nach Anweisungen!

226

1.7   Matrizen – Drehung in der Ebene

Y-AchseQ(x',y')

y' Eine Drehung in der Ebene kann d h i 2 2 M t i b h i b

P( )

ydurch eine 22‐Matrix beschrieben werden. Die Drehmatrix gibt an, wie die Koordinaten eines Punktes 

P(x,y)y

umgerechnet werden.

X-Achsexx'w

y)wcos(x)wsin(y)wsin(x)wcos(

yx

)wcos()wsin()wsin()wcos(

'y'x

y)()(y)()(y

Das X‐Y‐Koordinatensystem ist fest. Der Punkt P mit den Koordinaten (x,y) wird um den Winkel w gedreht. Die neuen Koordinaten (x',y' ) des gedrehten Punktes 

227

yberechnen sich nach der obigen Formel. Die Größe w ist der Drehwinkel.

1.7   Matrizen – Drehung in der Ebene

Y-Achse

Q(x',y')

Y Achse

y'

X-Achse30°

Spezialfall :

li f d h d i d ° d h ° ( )

P(1,0)x'

P liegt auf der x‐Achse und wird um 30° gedreht :   w = 30° P (x=1,y=0)

866.02/315.02/31)30sin()30cos('x

5.05.002/35.00)30cos()30sin('y

Wird der Punkt P dreimal um jeweils 30° gedreht, dann liegt der gedrehte Punkt 

228

auf der y‐Achse, d.h. er besitzt die Koordinaten (0,1).

Page 59: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.7   Matrizen – Drehung in der Ebene

>> w = 30w =

30sin :   Winkel im Bogenmaß

sind :   Winkel im Gradmaß

>> DM = [cosd(w),-sind(w); sind(w),cosd(w)]DM =

0.8660 -0.50000.5000 0.8660

>> p = [1; 0]p =p

10

>> q = DM * p>> q = DM * pq =

0.86600 50000.5000

>> q = DM^3*pq =

229

0.00001.0000 Workspace nach 3 Drehungen

1.7   Matrizen – Drehung in der Ebene

Die Befehle zur Berechnung der Koordinaten eines Punktes nach einer Drehung g gsollen in einem Skript gespeichert werden. Dann müssen die Befehle nicht immer per Hand eingegeben werden. 

Aufgabe :Aufgabe :

1) Erstellen Sie das Skript  drehung.m im Verzeichnis  U:\matlab.2) Schreiben Sie das Skript und führen Sie es aus.

230

1.7   Matrizen – Drehung in der Ebene

3) Die Variablen die im Skript verwendet werden

>> drehung.mw =

303) Die Variablen, die im Skript verwendet werden,sind auch im  Workspace verfügbar. Deshalb können Sie die Matrix DM und die Vektoren pund q einfach weiter verwenden

p =10

DM =und q einfach weiter verwenden.

4) Führen Sie die Drehung dreimal durch. Hierzu können Sie auch den Operator ^ verwenden.

0.8660 -0.50000.5000 0.8660

q =0 8660

5) Wie oft muss man die Matrix DMmit sich selbst multiplizieren, um die Einheitsmatrix zu erhalten?

0.86600.5000

q =0.00001 0000

6) Ändern Sie den Drehwinkel auf 60° und 90°. Führen Sie dann ein paar typische Drehungen durch

1.0000ans =

1.0000 0.0000-0.0000 1.0000

durch.  >> q1 = DM*DM*pq1 =

0.50000.8660

>> q2 = DM * q1q2 =

0.00001 0000

231

1.0000>> DM^6ans =

-1.0000 -0.0000

1.8   MATLAB ‐ Hilfe

help Help : kurzen Hilfetext im Command‐Window anzeigenhelp Help : kurzen Hilfetext im Command Window anzeigen

help sinhelp pihelp matlab\elfun

Informationen zum Befehl sin anzeigen

Informationen zur Variablen pi anzeigen help matlab\elfunhelp datatypeshelp helphelp dochelp Operator

doc ausführliche Informationen im Help‐Browser anzeigendoc ausführliche Informationen im Help Browser anzeigen

doc sindoc pi

helpbrowser Help‐Browser öffnen

lookfor Suche in allen M‐Files nach einem vorgegebenen Stichwort

l kf B llookfor Besseldocsearch Help‐Browser Search öffnen

which Suche nach Funktionen und Dateien

232

c Suche nach Funktionen und Dateien

which sin Wo ist die Funktion sin definiert ?

Page 60: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.8   MATLAB ‐ Weitere Befehle 

who Anzeige der Variablen im aktuellen Workspacewho Anzeige der Variablen im aktuellen Workspace

who a b xwho a*

whos wie  who , aber ausführliche Informationen ( size, type )

clear Variablen und Funktionen aus dem Workspace löschen

clear alle Variablen imWorkspace löschenclearclear variablesclear a b

alle Variablen im Workspace löschen

gleiche Wirkung wie clearVariablen a und b aus dem Workspace löschen

clear all Alle Variablen, Funktionen, globale Variablen löschen

clc Command‐Window löschen 

pwd Current Folder anzeigen ( print working directory )pwd Current Folder anzeigen ( print working directory )

cd Current Folder anzeigen, ändern

cd Gleiche Wirkung wie  pwdcd u:\matlabcd ..

U:\matlab als Current Folder  setzen

Elternverzeichnis als Current Folder setzen

ls Inhalt des Current Folder anzeigen

233

ls Inhalt des Current Folder anzeigen

dir Inhalt des Current Folder anzeigen

1.9   Übungsaufgabe zu Funktionen

Aufgabe ( siehe Stein 2 1 2)Aufgabe ( siehe Stein 2.1.2)

Schreiben Sie eine Funktion kreis, die sowohl den Umfang wie auch die Fläche berechnet und die beiden Werte zurückgibt :

function [umf, fl] = kreis(r)Testen Sie die Funktion. Geben Sie die einzelnen Rückgabewerte im C d Wi dCommand‐Window aus. Vergessen Sie nicht, die Funktion kreis zu dokumentieren, d.h. mit dem Befehl

help kreissoll eine verständliche Beschreibung der Funktion kreis angezeigt werdenwerden.

Überzeugen Sie sich auch, dass eine Funktion keinen Zugriff auf die Variablen im Workspace besitzt.

234

1.10   Hausaufgabe

1. Installieren MATLAB auf ihrem Rechner. Wiederholen Sie alle Übungen der gersten Praktikumsstunde noch einmal.

2. Berechne die Ergebnisse der folgenden Multiplikationen, auf einem Blatt Papier und mit Hilfe von MATLAB

32

4654

yx

8765

2432

A

1001

5432

B

Papier und mit Hilfe von MATLAB.

346y

8724

1054

3. Berechnen Sie das Produkt der beiden Drehmatrizen A und B und vergleichen Sie das Ergebnis mit der Drehmatrix C Führen Sie die Rechnungen zuerst aufSie das Ergebnis mit der Drehmatrix C. Führen Sie die Rechnungen zuerst auf einem Blatt Papier durch.  Versuchen Sie zu beweisen, dass stets gilt C=AB. Was bedeutet das anschaulich? Führen Sie dann die Rechnungen mit MATLAB d h b i f l d W d d ll 30° d 60°

)()i ()sin()cos(

B

)()i ()sin()cos(

A

durch, wobei folgende Werte verwendet werden sollen :  =30° und  =60°

)cos()sin(

)sin()cos(

C

)cos()sin(

235

)cos()sin()()(

C

Termin 2 : Ein‐ und Ausgabe ‐ Debugger

1 Einstellungen

2 MATLAB‐Verzeichnis einrichten2 MATLAB‐Verzeichnis einrichten

3 Ein‐ und Ausgabe

4 Debugger

236

Page 61: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1  Einstellungen

Über den Toolstrip Environment ‐> Preferences können Einstellungen der Ent‐p gwicklungsumgebung verändert werden.

Wirkung wie die Befehle 

format shortformat long

Wirkung wie die Befehle 

format compactformat loose

237

1  Einstellungen

F tFontsSchrifttyp,‐ größe einstellen

ColorsSyntaxhighlighting

238

1  Einstellungen

Toolstrip Environment ‐> Layout : Darstellung von Fenstern konfigurieren, p y g g ,Toolstrip konfigurieren

Layout auf die Standardeinstellung zurücksetzen

239

2  MATLAB‐Verzeichnis einrichten

Kopieren Sie von X:\Dozenten\Ingenieurinformatik\Matlab\Beispielep g pdie Verzeichnisse kap1-9,  prakt1-6 und stud1-3 in das Verzeichnis U:\matlab.

E t ll Si i V k ü fErstellen Sie eine Verknüpfung zu

MatlabSkript.pdf

Beispiele zurBeispiele zur Vorlesung

Beispiele für 

S di b i

das Praktikum

240

Studienarbeiten

Page 62: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

Termin 2 : Ein‐ und Ausgabe ‐ Debugger

1 Einstellungen1 Einstellungen

2 MATLAB‐Verzeichnis einrichten

3 Ein‐ und Ausgabe3.1 Ausgabe mit disp und formatg p3.2 Ausgabe mit dem Befehl  fprintf3.3 Einlesen mit dem Befehl  input

4 Debugger

241

3  Ein‐ und Ausgabe

In der Programmiersprache C erfolgt die Ein‐ und Ausgabe mit Hilfe der Funktionen g p g gscanf und printf.

scanf("%d", &k); printf("X-Wert = %10.4f", x);Bei MATLAB gibt es ähnliche Funktionen umWerte einzulesen und um InformaBei MATLAB gibt es ähnliche Funktionen um Werte einzulesen und um Informa‐tionen (Text, Variablen) auszugeben. Standardmäßig werden Werte über das Command‐Window eingelesen, Ausgaben werden in das Command‐Window

h i b i i h i f hl i d bgeschrieben. Die wichtigsten Befehle zur Ein‐ und Ausgabe :

disp Text und Variablen ausgeben – Formatierung begrenzt möglich

format globale Ausgabeformate festlegeng g g

fprintf Text und Variablen in das Command‐Window ausgeben oder in eine Datei schreiben – Formatierung erfolgt über Formatelemente analog zur Programmiersprache Czur Programmiersprache C

fscanf Daten aus dem Command‐Window oder einer Datei einlesen – Forma‐tierung erfolgt über Formatelemente wie in der Programmiersprache C

input Werte aus dem Command‐Window einlesen

Beachte : Weil bei MATLAB alle Variablen Matrizen sind, gibt es einige wichtige Unter‐

242

Weil bei MATLAB alle Variablen Matrizen sind, gibt es einige wichtige Unterschiede zwischen den Funktionen printf/scanf in der Programmiersprache C und den Funktionen fscanf/fprintf bei MATLAB.

3.1  Ausgabe mit disp und format

Mit dem Befehl disp (display) wird der Wert einer Variablen (allgemeiner eines p ( p y) ( gAusdrucks) in das Command‐Window geschrieben. Der Name der Variablen wird dabei nicht ausgegeben ( Unterschied zur Eingabe des Variablennamens ).

Der Befehl disp wird meist in Skripts oderDer Befehl disp wird meist in Skripts oder Funktionen verwendet, nur selten im Command‐Window. Mit dem Befehl format kann die D t ll d A b ä d t d

>> format compact>> x = 3.7x =

Darstellung der Ausgabe geändert werden.

format compactformat loose

3.7000>> disp(x)

3.7000format shortformat longformat shorte

>> disp(pi)3.1416

>> A = [2,3; 4,5]; format shorteformat longeformat shortgf l

>> disp(A)2 34 5

>> f t l format longgformat hexhelp format

>> format long>> disp(pi)

3.141592653589793>> disp('Hallo')

243

>> disp('Hallo')Hallo String 'Hallo' ausgeben

einfache Hochkommas!

3.1  Ausgabe mit disp und format

Aufgabe 1:  ga) Berechnen Sie den Wert von Wurzel 2 mit Hilfe der Funktion sqrt und weisen 

Sie das Ergebnis der Variablen x zu. Was schreibt der Befehl disp(x) in das Command‐Window wenn zuvorCommand Window, wenn zuvor- format short- format long

format shorte>> x = sqrt(2);>> format long- format shorte

- format longegewählt worden ist? Was ist der Unterschied, wenn man nur x anstelle von di ( ) i ibt? B ht I t i t d W t i l i h i

>> disp(x); ...

disp(x) eingibt? Beachte : Intern ist der Wert von x immer gleich gespei‐chert. Mit dem Befehl format ändert sich nur das Ausgabeformat.

b) Wird bei der Ausgabe mit disp(x) der Wert abgeschnitten oder gerundet? Wählen Sie  format short , geben Sie der Variablen x geeignete Werte und versuchen Sie die Frage zu beantworten.

c) Was gibt der Befehl disp(x) aus, wenn x wie folgt definiert wird?c) Was gibt der Befehl disp(x) aus, wenn x wie folgt definiert wird?x = [3 5 7]x = [3; 5; 7]x = [3 5; 7]

244

x = [3 5; 7]x = [ ; 7]x = [ ; , 7]

Page 63: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.2  Ausgabe mit dem Befehl  fprintfDie formatierte Ausgabe von Variablen erfolgt mit der Funktion fprintf. Diese g g pFunktion arbeitet ähnlich wie die Funktion printf in der Programmiersprache C.

fprintf( Formatstring , Daten )fprintf( fid Formatstring Daten )fprintf( fid, Formatstring , Daten )

Ohne explizite Angabe eines File‐Identifiers ( fid ) wird die Ausgabe in das Com‐mand‐Window ( fid=1 ) geschrieben, ansonsten in eine Datei.   Siehe auch help.

Datentyp Formatelement Bemerkung

Integer, signed %d or %i Base 10

Integer, unsigned

%u%o%x

Base 10                                     Base 8 (octal)                              Base 16 (hexadecimal), lowercase letters a–f

%X Same as %x, uppercase letters A–F 

Floating‐pointnumber

%f%e

Fixed‐point notation                                Exponential notation, such as 3.141593e+00          

%E%g%G

Same as %e, but uppercase, such as 3.141593E+00     The more compact of %e or %f, with no trailing zerosThe more compact of %E or %f, with no trailing zeros

245

Characters %c%s

Single character     String of characters, z.B.   'Hallo'

3.2  Ausgabe mit dem Befehl  fprintfBei MATLAB können Gleitkommazahlen auch mit %d oder %i ausgegeben werdenBei MATLAB können Gleitkommazahlen auch mit %d oder %i ausgegeben werden. 

Feldweite und Genauigkeit :

Bei Formatelementen für Gleitkommaausgaben kann man die FeldweiteBei Formatelementen für Gleitkommaausgaben kann man die Feldweite (=Gesamtzahl der Spalten, die für die Ausgabe reserviert werden) und die Anzahl der Nachkommastellen festlegen, bei Formatelementen für ganzzahlige Werte nur die Feldweitenur die Feldweite. 

Beispiele :

fprintf('Wert=%10 3f' x) fprintf('Wert=%8d' k)fprintf( Wert=%10.3f ‚x) fprintf( Wert=%8d ‚k)Wert=___789.123 Wert=_ _123123

246

3.2  Ausgabe mit dem Befehl  fprintfAufgabe 2 :  Skalare als Variablen in fprintfg pGeben Sie die folgenden Befehle ein. Was sind die Unterschiede zur Programmiersprache C ?

>> x = 13.67;>> fprintf('x=%f\n', x)

>> x = 101;>> fprintf('x=%f\n', x)

>> fprintf('x=%d\n', x) >> fprintf('x=%d\n', x)

>> fprintf('x=%e\n', x)

>> f i tf(' % 0f\ ' )

>> fprintf('x=%i\n', x)

>> f i tf(' % \ ' )>> fprintf('x=%.0f\n', x)

>> fprintf('x=%.1f\n', x)

>> fprintf('x=%e\n', x)

p ( \ , )Bei der Anweisung x=13.67 und auch bei der Anweisung x=101 wird eine Variable vom Typ double erzeugt. Im Beispiel rechts besitzt der Wert von x 

247

„keine Nachkommastellen“ und deshalb werden mit %d keine Nachkomma‐stellen angezeigt ( ansonsten verhält sich %d wie %e).

3.2  Ausgabe mit dem Befehl  fprintfAufgabe 3 : Vektoren und Matrizen als Variablen in fprintfAufgabe 3 :  Vektoren und Matrizen als Variablen in fprintfUntersuchen Sie das Verhalten von fprintf, wenn ein Vektor oder eine Matrix als Variable verwendet wird. Wie lauten die Regeln ? Führen Sie die folgenden Befehle aus :

>x = [ 3 5 7 9 ];\

>A = [ 1 2 ; 3 4 ]>f i tf('%f\ ' A)

1 2>fprintf('%f\n',x)>fprintf('%f %f\n',x)>fprintf('%f %f %f %f\n',x)

>fprintf('%f\n',A)>fprintf('%f %f\n',A)>fprintf('%f %f\n',A')>fprintf( %f %f %f %f\n ,x)

>fprintf('%f %f\n%f %f\n',x)>x = [3; 5; 7; 9];

\

>fprintf('%f %f\n',A(1,:))>fprintf('%f %f\n',A(:,1))>fprintf('%f %f\n',A(:))>fprintf('%f %f\n',x)

>fprintf('%f %f\n',x(2),x(4))>fprintf('%f %f',x(2),x(4))>fprintf( %f %f ,x(2),x(4))

>fprintf('%f\n%f\n',A(1,:))>fprintf('%f %f\n',A(1,1),A(2,2))

3

248

>fprintf( %f %f\n ,A(1,1),A(2,2))>fprintf('%f',A)

Page 64: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.3  Einlesen mit dem Befehl inputMit dem Befehl input wird ein Wert, der im Command‐Window eingegeben p , g gworden ist, einer Variablen in einem Skript oder einer Funktion zugewiesen. Der Befehl kann Zahlenwerte und Text (Strings) einlesen.

variable = input('Text für Eingabeaufforderung')variable = input('Text für Eingabeaufforderung')Beispiel :

Ausgabe der EingabeaufforderungWert einlesen und der Variablen r zuweisen

Zeichenkette – String einlesen

Zeichenkette – String einlesen

Der zweite Parameter mit dem Wert 's' bewirkt, dass die Funktion input die 

249

Eingabe als String interpretiert. Wird dieser Parameter weggelassen, dann muss alternativ die Eingabe des Strings mit einfachen Hochkommas erfolgen.

3.3  Einlesen mit dem Befehl inputBeachten Sie das Verhalten der Funktion input bei Fehleingaben! Nach einer 

>> r = input('Radius eingeben : ')

p gFehleingabe wird der Anwender automatisch nochmals zur Eingabe aufgefordert.

>> r input( Radius eingeben : )Radius eingeben : abcError using inputUndefined function or variable 'abc'.Radius eingeben : 2.3r =

2 3000

Fehlermeldung und automatische Wiederholung der Eingabeauf‐forderung MATLAB versucht der2.3000

>> whosName Size Bytes Classr 1x1 8 double

forderung. MATLAB versucht der Variablen r den Wert von abc zu‐zuweisen. Diese Variable existiert b i hr 1x1 8 double

>> r = input('Radius eingeben : ')Radius eingeben : '2.7'

aber nicht.

Hier wird 2 7 als String gespeichertr =2.7>> whos

i l

Hier wird 2.7 als String gespeichert und nicht als Zahlenwert einer  Variablen vom Typ double.

250

Name Size Bytes Classr 1x3 6 char

3.3  Einlesen mit dem Befehl inputAufgabe 4 :u gabe :Schreiben Sie eine Funktion  drehungio , die die Koordinaten eines Punktes, der um den Winkel w gedreht wird, berechnet. Die Koordinaten des Ausgangs‐punktes und der Drehwinkel werden mit der Funktion input eingelesen Diepunktes und der Drehwinkel werden mit der Funktion input eingelesen. Die Ein‐ und Ausgabe soll wie unten gezeigt erfolgen.

Drehmatrix :     DM = [ cosd(w), -sind(w); sind(w), cosd(w)];

Zusatzaufgabe :

Üb üf Si d di b id• Überprüfen Sie, dass die beiden Punkte P und Q den gleichen Abstand vom Ursprung besitzen.

• Berechnen Sie aus den Koordi‐naten von P und Q den Dreh‐winkel.

251

Termin 2 : Ein‐ und Ausgabe ‐ Debugger

1 Einstellungen

2 MATLAB‐Verzeichnis einrichten2 MATLAB‐Verzeichnis einrichten

3 Ein‐ und Ausgabe

4 Debugger

252

Page 65: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4  Debugger

Die MATLAB IDE besitzt einen integrierten Debugger um Funktionen und Skripte g gg pwährend der Laufzeit zu analysieren. Der Debugger wird genutzt um Fehler zu finden, das korrekte Verhalten eines Programms zu überprüfen und um fremde Programme besser zu verstehen.Programme besser zu verstehen.

Wichtige Elemente des Debuggers :

‐ Breakpoint (Haltepunkt): Stelle (Anweisung) im Programm, an dem das Pro‐h l i d d di h d ll i hgramm angehalten wird, wenn das Programm die entsprechende Stelle erreicht

‐ Einzelschrittverarbeitung mit Step, Step in, Step out und Continue

Den Debugger verwendet man folgendermaßen :gg g

1. Man setzt einen oder mehrere Breakpoints an interessanten Stellen einer Funktion oder eines Skripts.

2 A hli ß d t t t d P W d P f i2. Anschließend startet man das Programm. Wenn das Programm auf einen Breakpoint läuft, wird die Programmausführung angehalten. Im Command‐Window wird die aktuelle Programmzeile angezeigt und danach folgt der Debug‐Prompt K>>

3. Anschließend gibt man normale Befehle im Command‐Window ein, z.B. die Werte von Variablen ausgeben oder verändern. Es gibt auch spezielle Debug‐

253

g g p gBefehle (siehe help debug). Einfacher kann man diese Debug‐Befehle über das Debug‐Menü aktivieren.

4  Debugger

eakpoint

Debug Prompt K>>

Bre

254

Debug‐Prompt  K>>im Command‐Window

>> dbkreis

4  Debugger

>> dbkreisUebung DebuggerZahl Quadrat8 quadrat = k*k;

K>> Debug‐Prompt im Command‐Window

Erster Breakpoint in Zeile 8

8 quadrat = k*k;K>> whosName Size Bytes Classk 1x1 8 double

Befehl  whos eingeben : Infos zu den aktuellen Variablen ausgebenHier : nur Variable k vorhandenk 1x1 8 double

K>> kk =

2

Wert von k ausgeben 

Debug‐Befehl  dbstepä h B f hl füh “K>> dbstep

9 fprintf('%5d%8d\n',k,quadrat); K>> dbcont

„nächsten Befehl ausführen“

Debug‐Befehl  dbcont„Resume execution“ , d.h. das 

2 48 quadrat = k*k; K>> dbcont . . . Zweiter Breakpoint in Zeile  18

„ ,Programm weiter fortführen

18 fprintf('Zufallszahl k=%d\n',k);K>> whosName Size Bytes Class Debug‐Befehl  dbquit

255

k 1x1 8 double n 1x1 8 double . . .

K>> dbquit„Debug‐Modus beenden“  

4  Debugger  ‐ Debug‐Befehle

>> help debugp gdebug List M-file debugging functions

dbstop - Set breakpoint.db l R b k i tdbclear - Remove breakpoint.dbcont - Resume execution.dbdown - Change local workspace context.dbmex - Enable MEX-file debugging.dbstack - List who called whom.dbstatus - List all breakpoints.pdbstep - Execute one or more lines.dbtype - List M-file with line numbers.dbup Change local workspace contextdbup - Change local workspace context.dbquit - Quit debug mode.

When a breakpoint is hit, MATLAB goes into debug mode,the debugger window becomes active, and the prompt changes to a K>>. Any MATLAB command is allowed at the prompt.

256

p pTo resume M-file function execution, use DBCONT or DBSTEP. To exit from the debugger use DBQUIT.

Page 66: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4  Debugger 

Aufgabe :Verwenden Sie die beiden Files  dbkreis.m und dbflaeche.m im Verzeichnis \prakt2 um den Umgang mit dem Debugger zu üben. 

1. Starten Sie das Programm  dbkreis und versuchen Sie das Programm zu verstehen. Es werden Schleifen (for, while) und if-else‐Anweisungen verwendet. Die genaue Syntax (Schreibweise) wird später erklärt, aber Sie sollten das Programm lesen können und verstehen. Die Syntax ist etwas anders als in der Programmiersprache C, aber die Semantik (Bedeutung) ist identisch.

2. Setzen Sie in den Zeilen 8 und 18 der Datei  dbkreis.m Breakpoints und starten Sie das Programm. Welche Variablen sind im Workspace vorhanden? Welche Werte besitzen diese Variablen? Gehen Sie dann Zeile für Zeile (Step) durch das Programm oder geben Sie nach jedem Halt bei einem Breakpoint den Debug‐Befehl dbcont ein. Einfacher kann man das auch über den Toolstrip (Debug) erreichen.

3. Probieren Sie die Befehle Step und Step in beim Aufruf der Funktionen dbumfang und dbflaeche aus. Was ist der Unterschied?

4 D k i i Si ll B k i d Si d P

257

4. Deaktivieren Sie alle Breakpoint und starten Sie das Programm erneut.

5. Versuchen Sie  help debug zu verstehen (nur den letzten Teil). Wenden Sie einige der Debug‐Befehle im Command‐Window an.

Termin 3 :    2D‐ und 3D‐Graphik – Zugriff auf Dateien

Teil 1Teil ‐ 1

1. 2D‐Graphik1 1 l t B f hl1.1  plot‐Befehl1.2  Darstellung der Linien1.3 Konfiguration – PropertyName ‐ PropertyValue1.3  Konfiguration   PropertyName PropertyValue1.4  Beschriftung und Skalierung1.5  Subplots

2. 3D‐Graphik2.1  Die Funktion surf2.2  Gitter erzeugen mit  meshgrid2.3  Beobachtungspunkt festlegen

Teil – 2  Zugriff auf Dateien

258

Termin 3 Teil‐1      2D‐Graphik  und 3D‐Graphik 

Mit MATLAB lassen sich einfach 2‐ und 3‐dimensionale Graphiken erstellenp

2D‐Graphik 3D‐Graphik

Teilaufgaben

M th ti h A t il F kti D t• Mathematischer Anteil – Funktion, Daten

• Darstellung – Linientyp, Farbe, Beschriftung der Achsen, Überschrift, Strichstärke, Legende

259

• Ausgabe der Graphik – Graphikformate (.jpg, .tiff, .bmp), Speichern und Laden von Graphiken mit Hilfe von MATLAB‐Figure‐Dateien

1.1  plot‐Befehl

Die Funktion plot(x,y) zeichnet die Werte von y über x, d.h. die Punkte p ( ,y) y ,(x(k),y(k)) für alle Werte von k. Die beiden Vektoren x und ymüssen die gleiche Länge besitzen. Wird der Vektor x weggelassen (d.h.  plot(y)) werden die Werte von y über dem Index gezeichnet, d.h. die Punkte (k,y(k)). Diedie Werte von y über dem Index gezeichnet, d.h. die Punkte (k,y(k)). Die Punkte werden standardmäßig mit geraden Linien verbunden. 

Der  plot‐Befehl stellt die Zeichnung in einem eigenen Fenster mit dem Titel Fi 1“ d (G hik F t ) Di Z i h k hli ß d it it„Figure 1“ dar (Graphik‐Fenster). Die Zeichnung kann anschließend mit weiteren Befehlen bearbeitet werden, z.B. Beschriftung der Achsen. Durch die erneute Eingabe eines  plot‐Befehls wird die Graphik im aktuellen Graphikfenster gelöscht und es wird eine neue Graphik gezeichnet.  

Aufgabe 1 :Erstelle ein Skript plotbefehl m , das die Kurve y = sin(x) im IntervallErstelle ein Skript plotbefehl.m , das die Kurve y sin(x) im Intervall [0,2] zeichnet x = 0:pi/100:2*pi;

y = sin(x); Beachte : der Vektor x ist ein Zeilenvektor!

Ersetzen Sie den Befehl plot(x,y) durch plot(y). Was ist der Unterschied zwischen den beiden Befehlen? Zeichnen Sie danach die Funktion 2 i ( ) Wie

plot(x,y) ist ein Zeilenvektor!

260

den beiden Befehlen? Zeichnen Sie danach die Funktion  y = x2sin(x). Wie lautet der Befehl um die y‐Werte zu berechnen?“

Page 67: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.1  plot‐Befehl

Das Skript plotbefehl.m wird so abgeändert, dass zwei Kurven in einer p p g ,Zeichnung dargestellt werden. Die Lösung erfolgt auf drei verschiedene Arten :

a) Die Funktion plot(x1,y1,x2,y2) zeichnet die Werte von y1 über x1 und die Werte von y2 über x2die Werte von y2 über x2.

b) Erzeuge eine Matrix Ymit zwei Zeilen.  plot(x,Y) zeichnet zuerst Zeile 1 der Matrix Y über x und dann Zeile 2 von Y über x. Der Vektor x und die M i ü l i h i l S l b iMatrix Ymüssen gleich viele Spalten besitzen.

c) Zeichne mit Hilfe des plot‐Befehls die erste Kurve. Danach wird der Befehl hold on eingegeben, der bewirkt, dass die folgenden plot‐Befehle die bereits bestehende Zeichnung verwenden und keine Neuzeichnung erfolgt. Dadurch werden mehrere Kurven in ein Graphik‐Fenster gezeichnet. Mit dem Befehl hold off wird

...l t( 1 1)Fenster gezeichnet. Mit dem Befehl  hold off wird 

das Standardverhalten wiederhergestellt, d.h. plotinitialisiert die Graphik jeweils wieder neu.

plot(x1,y1)hold on...

Aufgabe 2 :Zeichnen Sie die Kurven sin(x) und sin(x)cos(x) in ein Graphik‐F t Ä d Si d Sk i t l tb f hl t h d b T t Si di

plot(x2,y2)

261

Fenster. Ändern Sie das Skript plotbefehl entsprechend ab. Testen Sie die drei Varianten a) – c).

1.2   Darstellung der Linien

Die Darstellung einer Kurve kann durch optionale Parameter des plot‐Befehls g p pgeändert werden. Wichtigster Parameter ist die Line‐Specification, ein String der die Darstellungsform einer Kurve mit Hilfe von 3 Werten (color, marker und linestyle) spezifiziert (siehe help plot und doc plot).style) spezifiziert (siehe help plot und doc plot).

Color Marker Line Style

b blue . point - solid g greenr redc cyan

t

o circle x x-mark + plus * t

: dotted -. dashdot-- dashed

( ) lim magentay yellow k black w white

* star s square d diamond

triangle (do n)

(none) no line

w white triangle (down) triangle (up) < triangle (left) > triangle (right)> triangle (right)p pentagram h hexagram

l t( ' * ') l t( ' ')kein Marker

262

plot(x,y, 'g*--') plot(x,y, 'r+') plot(x,y1, 'g*--', x,y2, 'r+') plot(x,y, 'b-.')

1.2   Darstellung der Linien

Aufgabe 3 :u gabe 3 :Zeichnen Sie die Kurven sin(x) und cos(x) in eine Graphik. Die Sinus‐Kurvesoll grün und gestrichelt gezeichnet werden. Die Cosinus‐Funktion wird blau dargestellt mit ' Line Style solid ' Einzelne Punkte auf der blauen Kurve werdendargestellt mit   Line Style solid  . Einzelne Punkte auf der blauen Kurve werden durch einen  (star) gekennzeichnet. Der Abstand dieser Punkte auf der x‐Achse soll jeweils 20° betragen. 

Schreiben Sie die entsprechenden Befehle in das Skript plotbefehl.m .

263

Termin 3 :    2D‐ und 3D‐Graphik – Zugriff auf Dateien

Teil 1Teil ‐ 1

1. 2D‐Graphik1 1 l t B f hl1.1  plot‐Befehl1.2  Darstellung der Linien1.3 Konfiguration – PropertyName ‐ PropertyValue1.3  Konfiguration   PropertyName PropertyValue1.4  Beschriftung und Skalierung1.5  Subplots

2. 3D‐Graphik2.1  Die Funktion surf2.2  Gitter erzeugen mit  meshgrid2.3  Beobachtungspunkt festlegen

Teil – 2  Zugriff auf Dateien

264

Page 68: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.3    Konfiguration  – PropertyName ‐ PropertyValue

Die Darstellung von Graphiken kann auch über PropertyName‐PropertyValue‐g p p y p yPaare modifiziert werden. PropertyName ist ein String, der eine bestimmte Eigenschaft einer Graphik bezeichnet. Für die Strichstärke einer Kurve lautet der PropertyName 'LineWidth'. Durch die Angabe eines PropertyValues wird fürPropertyName LineWidth . Durch die Angabe eines PropertyValues wird für die entsprechende Property ein bestimmter Wert gesetzt, der dann bei der Darstellung verwendet wird. Der Datentyp des PropertyValues hängt von der Property ab Für die Property 'LineWidth' ist der Datentyp double DieProperty ab. Für die Property  LineWidth ist der Datentyp double. Die PropertyName‐PropertyValue‐Paare folgen im plot‐Befehl auf die Daten, wenn keine Line‐Specification verwendet wird oder Sie werden nach der Line‐Speci‐fi ti b E dü f h P t N P t V l Pfication angegeben. Es dürfen mehrere PropertyName‐PropertyValue‐Paare verwendet werden.

Beispiele :

plot(x,y,'LineWidth',2) Property LineWidth (Strichstärke) bekommt den Wert 2

plot(x y 'c ' 'LineWidth' 2)plot(x,y,'c—','LineWidth',2) Setze eine Line‐Specification und ein PropertyName/Value‐Element

plot(x,y,'Color',[0.9,0,0],'LineWidth',2)

265

Property Color bekommt den RGB‐Wert [0.9,0,0], Property LineWidth den Wert 2, siehe doc ColorSpec

1.4    Beschriftung und Skalierung

Nach der Eingabe des plot‐Befehls muss eine Graphik auch beschriftet werden.g p p

title('Titel der Zeichnung') xlabel('x-Achse') Beschriftung der x‐Achse, analog y und z

legend('sin' 'cos') Welche Kurve ist welche?legend('sin','cos') Welche Kurve ist welche?

xlim([0 8]) X‐Achse von 0 bis 8, analog y und z

axis([0 8 -1 2]) X‐Achse von 0 bis 8, Y‐Achse von ‐1 bis 2

axis equal X‐ und Y‐Achse mit gleichem Maßstab

axis on/off Achsen werden gezeichnet / nicht gezeichnet

grid on/off Gitterlinien an/aus titlegrid on/off Gitterlinien an/aus

x = 0:pi/100:2*pi;w1 = 2.0; w2=3.0;y1 = sin(w1*x);

title

legendabel

y1 = sin(w1*x);y2 = cos(w2*x).*sin(w1*x);plot(x,y1,x,y2,'LineWidth',2)xlabel('x')

legend

yla

xlabel( x )ylabel('sin(x) - sin(x)*cos(x)')axis([0 8 -1.1 1.3])legend('sin','sin*cos')

266

legend( sin , sin cos )title('Sin-Fktn - Sin*Cos-Fktn');

plotsincos.m xlabel

1.4    Beschriftung und Skalierung

Aufgabe 4 :u gabe :Ändern Sie das Skript  plotsincos so, dass in der Legende und im Titel auto‐matisch die aktuellen Werte von w1 und w2 angezeigt werden, z.B.

titlelegend

Dieses Problem wird mit dem Befehl sprintf gelöst. Der Befehl arbeitet wie p gfprintf. Das Ergebnis wird aber in eine Stringvariable geschrieben. Beispiel :

sstr = sprintf('sin(%.1f*x)', w1)Besitzt 1 den Wert 2 3 dann wird folgender String erzeugt ' i (2 3* )'Besitzt w1 den Wert 2.3, dann wird folgender String erzeugt : 'sin(2.3*x)'Der String sstr kann z.B. im Befehl legend als Parameter verwendet werden :

legend(sstr, scstr) statt    legend('sin', 'sin*cos')g gDas Formatelement %s wird verwendet, einen String mit sprintf zu verarbeiten. In einfachen Fällen kann auch der Concatenation‐Operator [ ] verwendet werden.

titlestr = sprintf('Funktionen %s %s' sstr scstr )

267

titlestr = sprintf( Funktionen %s %s , sstr, scstr )titlestr = [ 'Funktionen ', sstr, scstr ]

1.5   Subplots

Mit dem Befehl

subplot( m, n, p )lassen sich mehrere Plots (Subplots) in einem Graphik‐Fenster darstellen. Das gesamte Graphik Fenster besteht aus m Zeilen in jeder Zeile gibt es n Teilfenstergesamte Graphik‐Fenster besteht aus m Zeilen, in jeder Zeile gibt es n Teilfenster, insgesamt also nm Teilfenster. Die Subplots werden zeilenweise durchnummer‐iert, beginnend bei 1. Mit dem dritten Parameter des Befehls subplot (hier p) ib f l h b l di hf l d f hl d dgibt man an, auf welchen Subplot die nachfolgenden Befehle angewendet werden (den „aktuellen“ Subplot festlegen). Häufige Anwendung : 3D‐Plots mit verschiede‐nen Ansichten

Beispiel :

x = 0:pi/100:2*pi;b l t(2 3 1) l t( i ( )) titl ('Fi 1')subplot(2,3,1); plot(x, sin(x)); title('Fig 1');

subplot(2,3,2); plot(x, cos(x)); title('Fig 2');subplot(2,3,3); plot(x, x); title('Fig 3');subplot(2,3,4); plot(x, x.*x); title('Fig 4');subplot(2,3,6); plot(x, -x); title('Fig 6');subplot(2,3,5); plot(x, x.*sin(x)); title('Fig 5');

268

p p g

plotsubplot.m

Page 69: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

1.5   Subplots

Aufgabe 5 :  Versuchen Sie das Programm plotsubplot.m zu verstehen.g g p p

269

Termin 3 :    2D‐ und 3D‐Graphik – Zugriff auf Dateien

Teil 1 GraphikTeil – 1 Graphik

1. 2D‐Graphik1 1 l t B f hl1.1  plot‐Befehl1.2  Darstellung der Linien1.3 Konfiguration – PropertyName ‐ PropertyValue1.3  Konfiguration   PropertyName PropertyValue1.4  Beschriftung und Skalierung1.5  Subplots

2. 3D‐Graphik2.1  Die Funktion surf2.2  Gitter erzeugen mit  meshgrid2.3  Beobachtungspunkt festlegen

Teil – 2   Zugriff auf Dateien

270

2   3D‐Graphiken

Bei der Darstellung von Funktionen im 3‐dimensionalen Raum unterscheidet man :g

• Darstellung einer Fläche im Raum

)y,x(fz y3xz:Beispiel

• Darstellung einer Kurve im Raum, z.B. die Bewegung eines Teilchens (Punkt)

))t(z),t(y),t(x(P tv)t(z)tsin(r)t(y)tcos(r)t(x

Die Darstellung einer Fläche im Raum kann auf verschiedene Weisen erfolgen :

• als Fläche darstellen  – surf und  mesh• mit Höhenlinien darstellen  – contour3 plot3ddemo.m

271

2.1   Die Funktion surfAufgabe : g

Es soll die Funktion z = x + 3y mit Hilfe der MATLAB‐Funktion surf dargestellt werden. Der x‐Bereich soll sich von 0 bis 2 erstrecken der y‐Bereich von 0 bis 4sich von 0 bis 2 erstrecken, der y‐Bereich von 0 bis 4.Wie werden die Daten an die MATLAB‐Funktion surfübergeben, damit surf die Funktion zeichnen kann ?

In den x‐y‐Bereich wird ein nm‐Gitter gelegt, wobei der x‐Bereich in n‐1 Teile un‐terteilt wird und der y‐Bereich in m‐1 Teile. An jedem Gitterpunkt (i,j) haben wir einen x‐Wert, einen y‐Wert und einen z‐Wert. Die x‐Werte werden in einer nm‐Matrix  X gespeichert, die y‐Werte in einer Matrix Y . Für jeden Gitterpunkt wird dann der zugehörige Funktionswert z berechnet. Diese Funktionswerte 

(1,1) (1,2) (1,3) 0 1 2 0 0 0 0 1 2

werden ebenfalls in einer nm‐Matrix Z gespeichert. Beispiel : 33‐Gitter

(2,1) (2,2) (2,3) X = 0 1 2 Y = 2 2 2 Z = 6 7 8

(3,1) (3,2) (3,3) 0 1 2 4 4 4 12 13 14

272

Gitterpunkt   (2,2) :   x=1,  y=2 und  z = x + 3*y = 1 + 3*2 = 7(3,2) :   x=1,  y=4 und  z = x + 3*y = 1 + 3*4 = 13

Page 70: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.1   Die Funktion surf(1 1) (1 2) (1 3) 0 1 2 0 0 0 0 1 2(1,1) (1,2) (1,3) 0 1 2 0 0 0 0 1 2

(2,1) (2,2) (2,3) X = 0 1 2 Y = 2 2 2 Z = 6 7 8

(3,1) (3,2) (3,3) 0 1 2 4 4 4 12 13 14

An die Funktion surf werden drei Matrizen X, Y und Z übergeben. Diese drei Matrizen definieren Punkte auf einer Fläche, durch die dann gezeichnet wird :  

( , ) ( , ) ( , )

P(i,j) : (x(i,j), y(i,j), z(i,j)) für alle Zeilen i und Spalten j.

Aufgabe 6 :a) Erstelle ein Skript  plotflaeche.m mit den nachfolgenden Befehlen.

X = [ 0 1 2;...0 1 2;

z

0 1 2;...0 1 2 ];

Y = [ 0 0 0;2 2 22 2 2;4 4 4 ];

Z = X + 3*Y;

273

surf(X,Y,Z)xy

2.1   Die Funktion surfAufgabe 6 :u gabe 6 :b) Ändern Sie die Matrizen im Skript  plotflaeche.m so ab, dass in x‐Richtung4 Punkte liegen und in y‐Richtung weiterhin 3. Die Fläche soll im x‐y‐Bereich [0 3][0 4] gezeichnet werden In x Richtung haben die Punkte den Abstand[0,3][0,4] gezeichnet werden. In x‐Richtung haben die Punkte den Abstand 1 und in y‐Richtung den Abstand 2.

zz

y

274

xy

2.2   Gitter erzeugen mit  meshgridMit der Funktion  meshgrid können die Matrizen X und Y einfacher erzeugt wer‐g gden. Das ist insbesondere bei Gittern mit vielen Punkten wichtig.Es werden die Werte der Punkte in x‐Richtung und y‐Richtung übergeben (in Form von zwei Vektoren), die entsprechenden Matrizen werden dann zurückgegeben.

[X, Y] = meshgrid([0 1 2],[0 2 4])von zwei Vektoren), die entsprechenden Matrizen werden dann zurückgegeben.

0 1 2 0 0 0

X = 0 1 2 Y = 2 2 2[X, Y] = meshgrid(0:1:2,0:2:4) X  0 1 2 Y  2 2 2

0 1 2 4 4 4

Die Matrix X entsteht aus dem ersten übergebenen Vektor in dem dieser zeilen‐Die Matrix X entsteht aus dem ersten übergebenen Vektor, in dem dieser zeilen‐weise kopiert wird. Die Matrix Y entsteht aus dem zweiten Vektor durch spalten‐weises Kopieren. Wird nur ein Vektor übergeben, so wird dieser für beide M t i d tMatrizen verwendet.

Frage :

Welche Matrizen werden durch folgende Anweisungen gebildet ?

a)[X, Y] = meshgrid([0 1 2 5],[0 2 4])b)[X, Y] = meshgrid([0 1 2 3]) [X,Y] = meshgrid(0:.2:1)

275c)[X, Y] = meshgrid(0:0.1:2,0:0.2:4)b)[X, Y] meshgrid([0 1 2 3]) [X,Y] meshgrid(0:.2:1)

2.2   Gitter erzeugen mit  meshgridAufgabe 7 :g

Zeichnen Sie die Funktionen 

z = x2 + 3*y z = exp( -x2 – 2*y2)i f l d B i h 2 bi +2 d 1 bi +1 E tl dim folgenden Bereich :  x von -2 bis +2 und  y von -1 bis +1. Entlang der x‐Achse wird ein Gitterabstand von 0.1 gewählt, entlang der y‐Achse 0.2 .Schreiben Sie die Befehle in das Skript plotflaeche.

Aufgabe 8 :

Lesen Sie die Hilfe für die Funktionen meshgrid und surf, d.h. help meshgrid doc meshgridhelp surf doc surf

Aufgabe 9 (Hausaufgabe) :

Überlegen Sie sich, wie man die Funktion meshgrid selbst programmieren g g p gkann. Welche Schritte muss man durchführen ?

276

Page 71: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2.3   Beobachtungspunkt festlegen

Mit dem Befehl  view wird der Beobachtungspunkt (viewpoint) festgelegt, von g p ( p ) g g ,dem aus eine 3D‐Graphik betrachtet wird. Hierzu werden zwei Winkel angegeben – Azimuth und Elevation (Erhebung, Höhenlage)

• Azimuth : Viewpointy

z

• Azimuth : horizontale Drehung (um die z‐Achse) des Beob‐achtungspunktes; ein positiver Winkel bedeutet i D h d B b ht i ht i G x

Elevation

p

Center ofPlot Box

y

eine Drehung der Beobachtungsrichtung im Ge‐genuhrzeigersinn (oder umgekehrt die x‐ und y‐Achsen werden im Uhrzeigersinn um die 

xPlot Box

z‐Achse gedreht)Azimuth 0° :  Blick in die positive y‐Richtung

Azimuth 90° :  Blick in die negative x‐Richtung

‐y

g g

• Elevation : 

positive Werte bedeuten, dass die Fläche von oben ( in Richtung negativer z‐W t ) b t ht t i dWerte ) betrachtet wird 0° :  Viewpoint liegt in der x‐y‐Ebene

90° :  Viewpoint liegt auf der z‐Achse, d.h. man blickt senkrecht von oben 

277

auf die x‐y‐Ebene

Defaultwerte :   Azimuth ‐37.5° ‐ Elevation 30°

2.3   Beobachtungspunkt festlegen

Hausaufgabe 10 :g

Rufen Sie die Funktion viewdemo auf (Datei  viewdemo.m). Es wird die Funktion  z = x2 + 3*y als 3D‐Plot gezeichnet, mit verschiedenen Viewpoints. Ändern Sie diese interaktiv mit Hilfe von Rotate 3D“ Der aktuelle ViewpointÄndern Sie diese interaktiv mit Hilfe von „Rotate 3D  . Der aktuelle Viewpointwird dabei immer links unten angezeigt.

278

Termin 3 –Teil 2 :  Zugriff auf Dateien

1 Typische Aufgaben beim Umgang mit Dateien

2 Textdateien ‐ Binärdateien2 Textdateien ‐ Binärdateien

3 Arbeiten mit Dateien

279

1   Typische Aufgaben beim Umgang mit Dateien

Aufgaben im Zusammenhang mit Dateien :

• Daten, die mit einem MATLAB‐Programm erzeugt werden, werden in einer Datei abgespeichert ( Schreibzugriff ‐ write access ) , damit diese später wieder eingelesen oder anderweitig verarbeitet werden könneneingelesen oder anderweitig verarbeitet werden können

• Daten, die in einer bestehenden Datei enthalten sind, werden mit einem MATLAB‐Programm eingelesen ( Lesezugriff ‐ read access ) und anschließend weiter verarbeitet z B drei Matrizen für eine 3D Graphik einlesenweiter verarbeitet, z.B. drei Matrizen für eine 3D‐Graphik einlesen

• Variablen aus dem Workspace werden in einer Datei gespeichert und später wieder in den Workspace eingelesen und weiter verarbeitet

280

Page 72: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

2   Textdateien ‐ Binärdateien

Daten werden im wesentlichen auf zwei verschiedene Arten in einer Datei gespeichert

• Textdatei – ASCII‐DateiFür jedes Zeichen (ein Buchstabe eines Wortes, eine Ziffer einer Zahl oder einFür jedes Zeichen (ein Buchstabe eines Wortes, eine Ziffer einer Zahl oder ein Sonderzeichen), das gespeichert wird, wird der zugehörige ASCII‐Code(Unicode) gespeichert. Daher wird für jedes Zeichen ein Byte (2 Bytes) in die Datei geschrieben oder aus der Datei gelesen Dateien die Information aufDatei geschrieben oder aus der Datei gelesen. Dateien, die Information auf diese Weise speichern, kann man mit einem ASCII‐Editor erstellen und deshalb einfach lesen oder verändern.M Fil d b f ll l ASCII D t i i h tM‐Files werden ebenfalls als ASCII‐Dateien gespeichert.

• Binärdatei Bei Binärdateien werden die Daten meist so gespeichert, wie sie im Haupt‐speicher gehalten werden. Eine int32‐Variable wird in 4 Bytes abgespeichert, eine double‐Variable in 8 Bytes, … Es wird jeweils die binäre Darstellung (0/1) der Zahl gespeichert und es erfolgt keine Umwandlung in das Dezimalsystem. g p g g ySolche Dateien kann man nur mit Hilfe eines speziellen Editors lesen. Bilddateien werden häufig binär abgespeichert. Binärdateien werden im folgenden nicht behandelt.

281

folgenden nicht behandelt.

Termin 3 :  Zugriff auf Dateien

1 Typische Aufgaben beim Umgang mit Dateien1 Typische Aufgaben beim Umgang mit Dateien

2 Textdateien ‐ Binärdateien

b3 Arbeiten mit Dateien3.1  Datei öffnen – File‐Identifier 3 2 Lesen und schreiben von Daten3.2  Lesen und schreiben von Daten3.3  Datei schließen3.4 Datei zeilenweise lesen und ausgeben3.4  Datei zeilenweise lesen und ausgeben3.5  Datei zeilenweise lesen – mit Fehlerbehandlung3.6  Spezielle File‐Identifier

282

3  Arbeiten mit Dateien

Das Arbeiten mit Dateien erfolgt fast immer in 3 Schritten :g

1. Datei öffnen – Funktion fopenDas Betriebssystem verwaltet Dateien über Dateinamen. Um auf Dateien zuzugreifen verwendet MATLAB einen File Identifier Die Funktion fopenzuzugreifen verwendet MATLAB einen File‐Identifier. Die Funktion fopenbekommt einen Dateinamen als Parameter und gibt einen File‐Identifier zurück.

2. Daten aus einer Datei lesen – Funktion fscanf , fgetloder Daten in eine Datei schreiben – Funktion fprintf

3 Datei schließen – Funktion fclose3. Datei schließen – Funktion fcloseDer Zugriff auf eine Datei wird beendet und Resourcen werden freigegeben.

Beachte : Matrix A

0.20.1

ABeachte :  Matrix A

Matrix A kann auf ganz verschiedene Weise in einer Datei abgespeichert sein.

0.40.3

A

0201 0301

0.40.3

0.20.1

03

0.2

0.1 0.40.30.20.1

02

0.3

0.1

0.40.2

0.30.1

2830.4

0.3

0.4

0.2

3   Arbeiten mit Dateien

% script : lese schreibe.m Datei :  data1.txtp _% Datei data1.txt lesend öffnenfid = fopen('data1.txt', 'r');

f f(fid '%f' 1)

4.32.1

x = fscanf(fid, '%f', 1);y = fscanf(fid, '%f', 1);fclose(fid);fclose(fid);x = x+1; y = y+1;% Schreibe ins Command-Windowfprintf(1,'%8.5f\n', x);fprintf('%8 5f\n' y);fprintf( %8.5f\n , y);% Datei erg1.txt schreibend öffnenfid = fopen('erg1.txt', 'w');

Datei :  erg1.txt40.4

20.2

fprintf(fid,'%7.2f\n', x);fprintf(fid,'%7.2f\n', y);

Aufgabe  1 :

Führen Sie das Skript 

284

fclose(fid); lese_schreibe aus.

lese_schreibe.m

Page 73: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.1  Datei öffnen – File‐Identifier ‐ Zugriffsart

Damit eine Datei mit MATLAB gelesen oder geschrieben werden kann, muss eine Beziehung zwischen MATLAB und der Datei hergestellt werden. MATLAB selbst kann auf Dateien nicht direkt zugreifen, da diese vom Betriebssystem verwaltet werden.  

Der Zugriff auf eine Datei erfolgt über einen sogenannten File‐Identifier ( fid ), der eine Beziehung zwischen einer bestimmten Datei und dem MATLAB‐System herstellt Ein File‐Identifier wird durch die MATLAB‐Funktion fopen erzeugt undherstellt. Ein File‐Identifier wird durch die MATLAB‐Funktion fopen erzeugt und als Rückgabewert (Typ double) bereitgestellt. Dateiname und Zugriffsart (lesen, schreiben) werden als Parameter an die Funktion fopen übergeben.

fid = fopen('Dateiname', 'Zugriffsart' )fid > 2 : Das Öffnen der Datei war erfolgreich – es wurde eine gültigerfid > 2 :    Das Öffnen der Datei war erfolgreich – es wurde eine gültiger 

File‐Identifier fid zurückgegeben.

fid = -1 :    Beim Versuch die Datei zu öffnen ist ein Fehler aufgetreten.

Der File‐Identifier wird bei den nachfolgenden Lese‐ oder Schreibzugriffen ver‐wendet. Nach jedem Aufruf von  fopen sollte sofort geprüft werden, ob der File‐Identifier gültig ist, da beim Öffnen häufig Fehler passieren. 

285

e de t e gü t g st, da be Ö e äu g e e pass e e .

3.1  Datei öffnen  ‐ Spezielle File‐Identifier

Spezielle File‐IdentifierSpezielle File‐Identifier 

MATLAB stellt drei spezielle File‐Identifier bereit; diese sind immer vorhanden und können immer verwendet werden

fid = 0 :  Standardeingabe

Lesen vom Command‐Window : fscanf(0,'%f',1)fscanf('%f' 1)fscanf( %f ,1)

fid = 1 :  Standardausgabe

Schreiben in das Command‐Window

fprintf(1,'Schreibe in das Command-Window')fprintf('Schreibe in das Command-Window')

fid = 2 : Standardfehlerausgabe ( error )  

Schreiben in das Command‐Window, aber der Text wird rot dargestelltfprintf(2,'Fehler beim Öffnen')fprintf(2, Fehler beim Öffnen )

fid = -1 :  ungültiger File‐Identifier

286

3.1  Datei öffnen – File‐Identifier ‐ Zugriffsart

Beispiel :p

Es soll eine Datei mit dem Namen data.txt zum Lesen geöffnet werden.

Die Datei data.txt befinde sich im Verzeichnis U:\matlab\prakt3. Der ab‐solute Pfadname dieser Datei ist somit 'U:\matlab\prakt3\data txt' Dersolute Pfadname dieser Datei ist somit  U:\matlab\prakt3\data.txt'. Der „Current Folder“ soll auf das Verzeichnis U:\matlab\prakt3 gesetzt sein. Bezogen auf den „Current Folder“ ist der relative Pfadname der Datei einfach nur 'd A di F k i f k i l i d i'data.txt'. An die Funktion fopen kann man einem relativen oder einem absoluten Pfadnamen übergeben.

>> fid = fopen('data txt' 'r')Datei mit Namen data.txt im Current Folder zum Lesen öffnen.>> fid = fopen( data.txt , r )

fid =3

>> whos fidFile‐Identifier fid ist vom Typ double

Current Folder zum Lesen öffnen.

>> whos fidName Size Bytes Classfid 1x1 8 double

Absoluter Pfad‐name verwendet

>> fid1 = fopen('U:\matlab\prakt3\data.txt', 'r')Beachte:  Die erste Variante (relativer Pfadname) funktioniert nur, wenn der Current Folder“ richtig gesetzt ist Die zweite Variante (absoluter Pfadname) ist

287

„Current Folder“ richtig gesetzt ist. Die zweite Variante (absoluter Pfadname) ist unabhängig vom „Current Folder“.

3.1  Datei öffnen – File‐Identifier ‐ Zugriffsart

fid = fopen('Dateiname', 'Zugriffsart' )DateinameName der Datei ‐ relativer Pfadname ( bezogen auf den Current Folder – wie kommt 

C t F ld “ D t i B d t t t d \d t t t d

p ( , g )

man vom „Current Folder“ zur Datei, z.B.  data.txt oder  pr\data.txt oder ..\..\data.txt ) oder absoluter Pfadname ( Laufwerk, Verzeichnisse und Dateiname, z.B.  u:\matlab\prakt3\data.txt ) 

FID f (FILENAME PERMISSION) th fil

Zugriffsart (Permission – Zugriffsrecht)Bestimmt, ob die Datei gelesen oder verändert werden kann.

FID = fopen(FILENAME,PERMISSION) opens the fileFILENAME in the mode specified by PERMISSION:

'r' open file for reading' ' fil f iti di d i ti t t'w' open file for writing; discard existing contents'a' open or create file for writing; append data to end of file'r+' open (do not create) file for reading and writing'w+' open or create file for reading and writing;'w+' open or create file for reading and writing;

discard existing contents'a+' open or create file for reading and writing;

append data to end of file

288

append data to end of file'W' open file for writing without automatic flushing'A' open file for appending without automatic flushing

Page 74: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.2  Lesen und Schreiben von Daten

Nachdem eine Datei geöffnet worden ist, können Daten aus dieser Datei gelesen g , goder in diese Datei geschrieben werden. Das Lesen und Schreiben erfolgt wiederum über geeignete MATLAB‐Funktionen. An diese Funktionen muss u.a. auch der File‐Identifier der Datei als Parameter übergeben werden, damitauch der File Identifier der Datei als Parameter übergeben werden, damit MATLAB weiß, auf welche Datei es zugreifen soll. Es könnten ja mehrere Dateien geöffnet sein.

Im folgenden soll der Inhalt einer Datei zeilenweise gelesen und am Bildschirm ausgegeben werden.

str = fgetl( fid )str = fgetl( fid )Die Funktion fgetl (file‐get‐line) wird verwendet um eine Datei zeilenweise zu lesen. Der erste Aufruf von fgetl liest die erste Zeile, der nächste Aufruf die zweite Zeile , usw. Die aktuell eingelesene Zeile wird als String zurückgegeben, wobei das newline‐Zeichen am Zeilenende bereits entfernt worden ist. 

Wenn die Funktion fgetl den Wert -1 zurückgibt, ist das Dateiende erreicht.g g ,

Um eine Datei von Anfang bis Ende zu lesen verwendet man häufig eine while‐Schleife, die beendet wird, wenn das Dateiende erreicht ist.

289

3.3 Datei schließen

fclose( fid )fclose( fid )Die Datei, die dem File‐Identifier fid zugeordnet ist wird geschlossen ( „geöffnete Datei wird geschlossen“). Der Zugriff auf die Datei wird damit b d t R di fü d Z iff f di D t i i t d i dbeendet. Resourcen, die für den Zugriff auf die Datei reserviert worden sind, werden freigegeben (passiert im Hintergrund). Sobald der Zugriff auf eine Datei nicht mehr benötigt wird, sollte die Datei geschlossen werden.

290

3.4  Datei zeilenweise lesen und ausgeben

Aufgabe 2 :Aufgabe 2 :Öffnen Sie die Funktion einfachlesen und versuchen Sie das Programm zu verstehen.

1. Rufen Sie die Funktion  einfachlesen so auf, dass die Datei  data.txtgelesen und verarbeitet wird. Verwenden Sie dabei sowohl relative als auch absolute Pfadnamen.absolute Pfadnamen.

2. Was ist der Unterschied bei der Ausgabe zwischen disp und fprintf ?

3. Was passiert, wenn man die Funktion wie folgt aufruft :  data.txteinfachlesen('daten.txt')einfachlesen(data.txt)

4. Ändern Sie die Funktion einfachlesenErste Zeile der DateiZweite Zeile der DateiDritte Zeile der Datei4. Ändern Sie die Funktion  einfachlesen

so ab, dass die einzelnen Zeilen durch‐nummeriert werden (siehe unten).

Dritte Zeile der Datei1 2 320 30 40 50Letzte Zeile der Datei1 il d i1 Erste Zeile der Datei

2 Zweite Zeile der Datei3 Dritte Zeile der Datei4 1 2 3

291

4 1 2 35 20 30 40 506 Letzte Zeile der Datei

3.4  Datei zeilenweise lesen und ausgeben

function [ ] = einfachlesen( filename )fid = fopen(filename, 'r'); %Datei lesend öffnenweiter = 1;while ( weiter == 1 )

line = fgetl(fid); %aktuelle Zeile lesenif ( line == -1 ) %ist Dateiende erreicht?

weiter = 0; %Lesen beendenweiter = 0; %Lesen beendenelse

display(line) %eingelesene Zeile % fprintf('%s\n', line); % %s String ausgeben

endendendfclose(fid); %Datei wieder schliessenend

292

end

Page 75: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

3.5  Datei zeilenweise lesen – mit Fehlerbehandlung

Die Funktion einfachlesen berücksichtig nicht dass beim Öffnen derDie Funktion einfachlesen berücksichtig nicht, dass beim Öffnen der Datei ein Fehler passieren kann (z.B. die Datei existiert nicht oder ein Schreibfehler bei der Pfadangabe oder die Datei darf nicht geöffnet werden). Solche Programme sind in der Praxis unbrauchbar. Das folgende Beispiel zeigt eine einfache Fehlerbehandlung. In der Praxis muss meist sehr viel Aufwand für die Fehlerbehandlung gemacht werden.sehr viel Aufwand für die Fehlerbehandlung gemacht werden.

Aufgabe 3 :

Öff Si di k i d h Si dÖffnen Sie die Funktion readzeilen und versuchen Sie das Programm zu verstehen.

1. Rufen Sie die Funktion  readzeilen so auf, dass die Datei  data.txt,gelesen und verarbeitet wird. Verwenden Sie dabei sowohl relative als auch absolute Pfadnamen.

2 W i t di F kti i f l t f ft2. Was passiert, wenn man die Funktion wie folgt aufruft : 

readzeilen('daten.txt')readzeilen(data.txt)

293

ead e e (data.t t)

3.5  Datei zeilenweise lesen – mit Fehlerbehandlung

function [ ] = readzeilen( filename )function [ ] readzeilen( filename )[fid, msg] = fopen(filename, 'r'); % Datei lesend öffnen

% msg speichert mögliche Fehlermeldungif fid < 0 % ist Fehler beim Öffnen passiert ?if fid < 0 % ist Fehler beim Öffnen passiert ?fprintf(2,'Fehler beim Öffnen von Datei %s\n', filename);fprintf(2,' %s\n', msg); % Fehlermeldung ausgebenreturn; % Leseversuch beendenreturn; % Leseversuch beenden

endweiter = 1;while ( weiter == 1 ) % lese alle Zeilen einzelnline = fgetl(fid); % aktuelle Zeile lesenif ( line == -1 ) % ist Dateiende erreicht ?

it 0 % L b dweiter = 0; % Lesen beendenelse

fprintf('%s\n', line); % eingelesene Zeile ausgebenendend

endfclose(fid); % Datei wieder schliessen

294

end

Termin 4 :  Gleichungssysteme, Eigenwerte, Eigenvektoren

1 Lineare Gleichungssysteme

2 Eigenwerte und Eigenvektoren2 Eigenwerte und Eigenvektoren

3 Kette mit schwingenden Massen

295

4.1   Lineare Gleichungssysteme

Aufgabe 1:

2

1

x

x

1457

2824 1

g

Berechnen Sie die Lösung des angegebenen linearen Gleichungssystems mit Hilfe der Linksdivi‐sion Überprüfen Sie dass die Lösung tatsächlich

3

2

x

x

1648

1457

3

2

sion. Überprüfen Sie, dass die Lösung tatsächlich eine Lösung des Gleichungssystem ist. 

Schreiben Sie die Lösung in das bestehende Skript  a1lingl.m . i b i ll i i b d

4x1312 4

Die Ergebnisse sollen wie unten gezeigt ausgegeben werden.

Lösen Sie das Gleichungssystem auch mit Hilfe der inversen Matrix von A. Zeigen Sie, dass MATLAB die inverse Matrix korrekt berechnet.

296

Page 76: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4.1   Lineare Gleichungssysteme

Aufgabe 1‐1:g

Die Matrix A und der Vektor b werden jeweils aus einer Datei eingelesen. Hierzu wird die Funktion readmatrix.m verwendet, die nm‐Matrizen einlesen kann.

• Versuchen Sie das Skript solvelingl m und die Funktion readmatrix m• Versuchen Sie das Skript solvelingl.m und die Funktion readmatrix.mzu verstehen.  Führen Sie das Skript aus. 

• Was muss geändert werden, damit anstelle von vektor_b.txt die Datei vektor_c.txt gelesen werden kann. Die Datei vektor_c.txt speichert alle Elemente des Vektors b in einer Zeile ab.

Bedeutung der Zeile : B = fscanf(fid '%f' [m n]);Bedeutung der Zeile :

Es werden Zahlen aus einer Datei eingelesen. Die Zahlen in der Datei werden zei‐lenweise gelesen und spaltenweise in eine Matrix geschrieben. Die ersten m hl d i di l h i b di i hl i di i

B = fscanf(fid, %f ,[m,n]);

Zahlen werden in die erste Spalte geschrieben, die zweiten m Zahlen in die zweite Spalte, … 

Beispiel :  B = fscanf(fid,'%f',[4,3]);p

1 2 3 4 1 4 9 16 1 8 27 64

1 1 12 4 9 Matrix B

4*3‐Matrix

297

1 8 27 64 3 9 274 16 64Zahlen in der Datei

4 3 Matrix

4.2   Eigenwerte und Eigenvektoren

Aufgabe 2:

14522824

Ag

a) Untersuchen Sie die Matrix A. Gibt es reelle Eigenwerte? Gibt es 4 linear unabhängige Eigenvektoren? Berechnen Sie die Determinante Eigenvektoren undEigenwerte

11121648

A

Sie die Determinante,Eigenvektoren undEigenwerte.

b) Berechnen Sie das Produkt der 4 Eigenwerte und vergleichen Sie es mit dem Wert der Determinante. Welche Beziehung gilt ganz allgemein?

) Z i Si li i d d i Ei k ä hli h i Ei k i

c) Zeigen Sie explizit, dass der zweite Eigenvektor tatsächlich ein Eigenvektor ist, 

d.h. überprüfen Sie, ob folgende Beziehung gilt :

Hierbei ist v der zweite Eigenvektor der Matrix A und der zugehörige Eigen222 vvA

Hierbei ist v2 der zweite Eigenvektor der Matrix A und 2 der zugehörige Eigen‐wert. Der Vektor v2 besitzt 4 Komponenten – ein Spaltenvektor mit 4 Zeilen. 

d) Zeigen Sie, dass das Skalarprodukt von v1 und v2 Null ergibt. Überprüfen Sie, d d k di ä b i ( i i k f )dass der Vektor v1 die Länge 1 besitzt (MATLAB normiert Eigenvektoren auf 1)

e) Zerlegen Sie den Vektor  b =[1;2;3;4] nach Eigenvektoren von A, d. h. bestimmen Sie die Koeffizienten a1, a2, a3 und a4 so, dass gilt :

Schreiben Sie die Lösung in das bestehende Skript  a2lingl.m . 

44332211 vavavava b

298

gDie Ergebnisse sollen, wie auf der folgenden Folie gezeigt, ausgegeben werden.

4.2   Eigenwerte und Eigenvektoren

d

a

d

e

b

e

b

vvA

c

222 vvA

baaaa

2

1avvvv 141312111

bavavavav 44332211

3

2

a

a

vvvv

vvvv

3

2

43332313

42322212

1avavavav 441331221111

299

4avvvv 444342414

441331221111

2avavavav 442332222121

4.3   Kette mit schwingenden Massen

(t)x(t)xc(t)xc(t)xm 2121111 xt)cos(ωx(t)x 111

)(txc(t)x(t)xc(t)xm

(t)x(t)xc(t)x(t)xc(t)xm

3423333

32312222

t)cos(ω

x

x

t)cos(ωx

t)cos(ωx

(t)x

(t)x

3

2

3

2

3

2

2

1

2

1

22

1

3322

221

x

x

0m0

00m

x

x

cccc

0ccc

333433 xm00xccc0

Verallgemeinertes  A * x = * B * x 2

Eigenwertproblem :    C * x = 2 *M * x 2

Aufgabe 3 : Setze alle Massen mi und alle Federkonstanten ci gleich „1“ und be‐rechne die Auslenkungen aus der Ruhelage x (t) für das Anfangswertproblem:

300

rechne die Auslenkungen aus der Ruhelage xi(t) für das Anfangswertproblem:x1(t=0) = ‐0.4  x2(t=0) = 0.6  x3(t=0) = 0.3 ,  v1(t=0)=0 v2(t=0)=0    v3(t=0)=0 

Page 77: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

4.3   Kette mit schwingenden Massen

Teilaufgaben 3 :g

a) Versuchen Sie das Skript  kette3m_scr.m und die Funktion  kette3m.mzu verstehen. Starten Sie das Skript  kette3m_scr.

b) Z i h Si di P iti (R h l l A l k ) d d i M übb) Zeichnen Sie die Positionen (Ruhelage plus Auslenkung) der drei Massen über der Zeit für eine der drei Eigenschwingungen. Die Ruhelagen sollen sich bei x=1, 3 bzw. 5 befinden. Die Ausgabe er‐folgt wie in der nebenstehenden Zeichnung (erste Eigenschwingung). Berechnen Sie zuerst aus dem k‐tenEigenvektor die Auslenkungen in Abhängigkeit von der Zeit.

)tcos()k(:V)t(x

Dieser Ausdruck stellt eine Lösung der Bewegungsgleichungen für die An‐

)tcos()k,(:V)t(x k

fangsbedingung x(t=0) = V(:,k) undv(t=0)=0 dar. V(:,k) ist ein Eigenvektor und besitzt 3 Zeilen. Sie müssen zu 

301

den Auslenkungen noch geeignete Verschiebungen hinzufügen.Verwenden Sie das Skript kette3m_scr und ergänzen Sie es geeignet.

4.3   Kette mit schwingenden Massen

Teilaufgaben 3 :g

c) Berechnen Sie die Lösung der Bewegungsgleichungen für den folgenden Anfangszustand :Masse 1 : x = ‐0 4 v = 0Masse 1 :  x1 = ‐0.4   v1 = 0Masse 2 :  x2 =  0.6    v2 = 0Masse 3 :  x3 =  0.3  v3 = 0

Die Anfangsauslenkung muss nach den Eigenvektoren zerlegt werden(siehe auch Kapitel 4.2).p

306.04.0

xx

aa

V 2

1

2

1

V ist eine 33‐Matrix, deren Spalten V(: i) die Eigenvektoren sind Die

3.0xa 33

V(:,i) die Eigenvektoren sind. Die Lösung ergibt sich aus der Überlagerung der drei Eigenschwingungen mit den jeweiligen Amplituden a1, a2 und a3.

302

)tcos()3,(:Va)tcos()2,(:Va)tcos()1,(:Va)t(x 332211

4.3   Kette mit schwingenden Massen

Teilaufgaben 3 :g

d) Berechnen Sie die Lösung der Bewegungsgleichungen für den folgenden Anfangszustand :Masse 1 : x = ‐0 4 v = 0

a1    a2    a3Masse 1 :  x1 = ‐0.4   v1 = 0Masse 2 :  x2 =  0.0    v2 = 0Masse 3 :  x3 =  0.4  v3 = 0

Hinweis : Sie müssen die Anfangsaus‐lenkungen wieder nach den Eigen‐vektoren zerlegen. Mit einem Blick gauf die Form der Eigenvektoren er‐geben sich die Amplituden der Eigen‐schwingungen auch ohne großeschwingungen auch ohne große Rechnung. Das liegt daran, dass es sich bei der Anfangsbedingung umeine ganz spezielle Anfangsbe‐eine ganz spezielle Anfangsbe‐dingung handelt. Die Amplituden derersten und dritten Eigenschwingung sind Null. Nur die zweite Eigenschwingung i t t

303

ist angeregt.

Termin 5 :  Numerische Lösung von Differentialgleichungen

1 Eulerverfahren

2 Eulerverfahren für eine gedämpfte Schwingung2 Eulerverfahren für eine gedämpfte Schwingung

3 Lösung einer gedämpften Schwingung mit ode45

4 Gedämpfte Schwingung mit äußerer Anregung

5 Kette mit zwei Massen

304

Page 78: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

5.1   Eulerverfahren

Aufgabe 1:u gabe :a) Im Skript euler1_scr wird das Eulerverfahren zur Lösung der DGL

)x(yxkdy ]5,0[xBereich2.0k2.1)0x(y

aufgerufen. Das Eulerverfahren ist in der Funktion euler1 programmiert, die Ableitung von y nach x in der Funktion fdgl1. Öffnen Sie das Script und die 

)(ydx

g y g pbeiden Funktionen und versuchen Sie die Programme zu verstehen. Führen Sie das Skript aus.

b) Ändern Sie die Programme so ab dass die DGL

euler1_scrb) Ändern Sie die Programme so ab, dass die DGL

xeA)x(yxkdxdy

l 1

fdgl1

gelöst wird. Setzen Sie  A=1.5 ,  =2.0,  k=0.2 und  y(x=0)=1.2  . Geben Sie die Lösung graphisch aus.

c) Ändern Sie das Skript so dass im Titel der Graphik die aktuellen Werte der drei

euler1

c) Ändern Sie das Skript so, dass im Titel der Graphik die aktuellen Werte der drei Parameter k,  A und  angezeigt werden, ebenso der Anfangswert y0.

Beispiel : „y0=1.2 k=0.7 A=2.0 ld=0.5“

305

5.2  Eulerverfahren für eine gedämpfte Schwingung

Aufgabe 2: euler2gedsw_scru gabe :

Lösen Sie die DGL für eine gedämpfte Schwingung mit Hilfe des Eulerverfahrens

0)t(ydy2yd 22

_fgedswdgl

Schreiben Sie die DGL 2. Ordnung in ein System von zwei DGLn erster Ordnung um Verwenden Sie für die Lösung die Dateien euler2gedsw scr

0)t(ydt

2dt2 euler2gedsw

um. Verwenden Sie für die Lösung die Dateien euler2gedsw_scr, euler2gedsw und fgedswdgl und ergänzen Sie die Programme so, dass die Aufgabe gelöst wird. Anfangsbedingungen :  y(t=0)=0  und  ẏ(t=0)=2.0

Lösung : DGL erster Ordnung    

2

1

2

1

y

y

y

y

global w d;w = 2.0; d = 0.2;y0(1,1)=0; % Anfangsauslenkung

euler2gedsw_scry0(2,1)=2.0; % Anfangsgeschwindigkeit[t,y] = euler2gedsw(@fgedswdgl, [0,5], y0, 1000);plot(t,y(:,1), t,y(:,2));

306

txt = sprintf('y0=%.2f v0=%.2f w=%.2f d=%.2f',y0(1),y0(2),w,d);title(txt);

5.3  Lösung einer gedämpften Schwingung mit ode45

Aufgabe 3: ode45swged scru gabe 3:

Lösen Sie die DGL für eine gedämpfte Schwingung mit Hilfe von ode45.

2

ode45swged_scrfswgeddgl

a) Verwenden Sie die beiden Dateien ode45swged scr und fswgeddgl

0)t(ydtdy2

dtyd 22

2

ode45

a) Verwenden Sie die beiden Dateien ode45swged_scr und fswgeddgl. Starten Sie das Programm um die Lösung graphisch auszugeben. Ändern Sie das Programm so, dass nur die Auslenkung dargestellt wird.

)b) Wie groß ist der Abstand der Zeitpunkte bei t=0 und bei t=20? Wie viele verschiedene Zeitpunkte werden für die Lösung verwendet?Ändern Sie das Skript so, dass die entsprechenden Antworten ausgegeben werden.

c) Ändern Sie das Skript so, dass die Lösungen in Zeitabständen von jeweils 0.02 berechnet werden (siehe help ode45).0.02 berechnet werden (siehe help ode45).

307

5.4  Gedämpfte Schwingung mit äußerer Anregung

Aufgabe 4:u gabe :

Bei der gedämpften Schwingung soll noch eine äußere Kraft berücksichtigt werden.

dyyd 22

Ändern Sie die beiden Programme ode45angeregt scr und 

)tsin(A)t(ydtdy2

dtyd

02

2

g g g _fangeregtdgl so, dass die obige DGL gelöst wird. Geben Sie die Lösungen graphisch aus. Was passiert bei großen Zeiten ?

ode45angeregt_scrfangeregtdgl

ode45

g g g

308

Page 79: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

5.5  Kette mit zwei Massen

Aufgabe 5:u gabe 5:

Gegeben sei eine Kette mit zwei schwingenden Massen.

kette2m scrkette2m_scrfkette2mdlgl

(t)x(t)xc(t)xc(t)xm 2111 ode45

Schreiben Sie die zwei DGLn zweiter Ordnung in ein System von 4 DGLn erster

(t)xc(t)x(t)xc(t)xm 2122

Schreiben Sie die zwei DGLn zweiter Ordnung in ein System von 4 DGLn erster Ordnung um. Programmieren Sie dann die Lösung für das Anfangswertproblem. Verwenden Sie hierzu die beiden Dateien kette2m_scr und fkette2mdgl.Stellen Sie die Auslenkungen graphisch darStellen Sie die Auslenkungen graphisch dar.

Wie lauten die Anfangsbedingungen, damit sich Eigenschwingungen einstellen?Die Eigenschwingungen kann man bei diesen einfachen System leicht erraten. Sie 

309

können aber auch über das entsprechende Eigenwertproblem berechnet werden.

Termin 6 :  Simulink – Übungsbeispiele

1 Sinusgenerator und Integration

2 Nichtlineare Schwingung2 Nichtlineare Schwingung

3 Nichtlineare Schwingung und MATLAB‐Variablen

4 Nichtlineare Schwingung und Function‐Block

5 Nichtlineare Schwingung und Subsystem‐Block

6 Model‐Workspace

310

6.1   Sinusgenerator und Integration

Aufgabe 1:Erstellen Sie ein Simulink‐Modell sinusgenerator.slx, das ein sinusför‐miges Signal a(t)= 1.2sin(2t+30°) im Zeitintervall [0,20] integriert. Das Ergebnis und das Ausgangssignal sollen graphisch dargestellt werden.Das Ergebnis und das Ausgangssignal sollen graphisch dargestellt werden.

Arbeitsschritte :1. Starten Sie Simulink über das Simulink‐Icon der MATLAB‐Toolbar.

2 Erstellen Sie ein Simulink Modell über File >New >Model und speichern Sie das Modell2. Erstellen Sie ein Simulink‐Modell über File‐>New‐>Model und speichern Sie das Modellin der Datei sinusgenerator.slx auf dem U‐Laufwerk.

311Leeres Simulink‐Modell

3. Ziehen Sie die notwendigen Blöcke aus dem Simulink Library Browser in das Modell und 

6.1   Sinusgenerator und Integration

verbinden die Blöcke miteinander.

Blöcke verbinden : Entweder Strg‐Taste drücken, Ausgangsblock selektieren (Click mit linker Maustaste) und den Zielblock/Zielport anklicken oder bei gedrückter linker Maustaste vom Ausgangsport zum Zielport ziehen

Größe eines Blocks verändern : Block selektieren und dann an den Ecken ziehenWird die Größe eines Blocks verändert, kann sich die Darstellung von Informationen über den Block ändern. Beispiel : der Faktor, der in einem Gain‐Block eingetragen ist

Vergrößert !

Signal : Namen zuweisenSignal selektieren und das Kontextmenü öffnendann das Untermenü Signal Properties“ wählen

312

dann das Untermenü „Signal Properties  wählen und bei „Signal name“ den Namen eintragen

Page 80: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

6.1   Sinusgenerator und Integration

Über das Kontext‐Menü können die Eigenschaften eines Blocks konfiguriert 

d ä d t d Bund verändert werden, z.B.‐ Block drehen‐ Block spiegeln (Flip)

S h ift t d S h ift öß ä d‐ Schriftart und Schriftgröße ändern‐ Farben (Fore‐ Background)

Fli

313

Flip

6.1   Sinusgenerator und Integration4. Setzen Sie die Parameter des Blocks „Sine Wave“ um das gewünschte Signal zu erzeugen. 

d l d d d d ll f d bSetzen Sie die Simulationsdauer und starten Sie das Modell. Prüfen Sie das Ergebnis im Block Scope.

Öffnen Sie das Kontextmenü des Graphikfensters.

Welche Bedeutung/Effekt hat Autoscale ?

314

Was kann man bei „Axes Properties“ einstellen ?

6.1   Sinusgenerator und Integration

5. Wie viele Zeitpunkte werden verwendet, um das Integral im Zeitraum [ 0, 20 ] zu berechnen ? Wie können Sie das beeinflussen?Öffnen Sie das Menü Simulation ‐> Model Configuration Parameters ‐> Data Import /Export und aktivieren Sie die Ausgabe der Zeitpunkte (Zeitpunkte, die bei der Simulation 

d d ) i d k i d di i l i i i lverwendet werden) in den Workspace. Starten Sie dann die Simulation. Wie viele Elemente besitzt der Vektor tout? Sind die Zeitabstände äquidistant?

V i blVariablenname

315

6.1   Sinusgenerator und Integration6. Die Kurven, die im Scope‐Block dargestellt werden sind nicht glatt, weil die Zeitabstände, 

d d l b h d ß d d b dan denen die Signalwerte berechnet werden, zu groß sind. Begrenzen Sie die Zeitabstände auf 0.02. Verwenden Sie einem Solver vom Typ Variable‐step und dann einen Solver vom Typ Fixed‐step. Starten Sie beide Simulationen. Wie viele Zeitpunkte werden verwendet?

Variable‐step

Fixed‐step

316

Page 81: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

6.1   Sinusgenerator und Integration

Zusatzaufgaben :usat au gabe :a) Setzen Sie den Anfangswert für das Integral auf 0.3. 

b) Weisen Sie den beiden Signalen Namen zu (jeweils ein Signal selektieren und dann das Kontextmenü öffnen)Kontextmenü öffnen).

c) Ändern Sie die Darstellung des Mux‐Blockes, so dass die Signalnamen an den Eingangs‐ports angezeigt werden. Ändern Sie die Hintergrundfarbe des Integratorblocks. Ändern Sie die Foreground Color des Sinus BlocksSie die Foreground Color des Sinus‐Blocks.

d) Ändern Sie die Darstellung des Ergebnisses. Der Scope‐Block soll die beiden Signale in zwei verschiedenen Fenstern darstellen.

) i d i h d i l k i i d f [ ]e) Begrenzen Sie den y‐Bereich, der im Scope‐Block angezeigt wird, auf [‐2, +2].

f) Begrenzen Sie die gespeicherte Datenmenge auf den letzten 30 Punkte. Was wird dann im Scope‐Block angezeigt ? 

g) Speichern Sie die Werte der beiden Signale in Variablen des Workspace ab. Verwenden Sie verschiedene Lösungsvarianten ‐ Scope‐Block‐ ToWorkspace‐Block

h) Setzen Sie die Amplitude und die Frequenz der Sinus‐Schwingung über zwei Variablen  Aund omega , die im MATLAB‐Workspace definiert werden. Überzeugen Sie sich, dass die 

317

Werte aus dem Workspace tatsächlich von Simulink übernommen werden.

6.2   Nichtlineare Schwingung

Aufgabe 2:   Erstelle  schwingungnichtlinear.slxg g gLösen Sie die folgende nichtlineare DGL zur Beschreibung einer Schwingung mit Simulink. Auslenkung und Geschwindigkeit sollen in zwei unterschiedlichen Fenstern eines Scope‐Blocks dargestellt werden Begrenzen Sie die SchrittweiteFenstern eines Scope‐Blocks dargestellt werden. Begrenzen Sie die Schrittweite.

0)t(y2)t(y5.0dt

yd 32

2

3)0t(y0y,0)0t(y0v

318

6.3   Nichtlineare Schwingung und MATLAB‐Variablen

Aufgabe 3:u gabe 3:Verwenden Sie für die Parameter der nichtlinearen DGL drei Variablen k, m und c, die im MATLAB‐Workspace definiert werden. Die Anfangsbedingungen werden über zwei MATLAB‐Variablen v0 und y0 definiert. Öffnen Sie schwingungnichtlinear variablen.slxy g g _und ändern Sie das Modell geeignet ab. Starten Sie dann die Simulation.

0)t(ymc)t(y

mk

dtyd 32

2

0y)0t(y,0v)0t(y mmdt

319

6.4   Nichtlineare Schwingung und Function‐Block

Aufgabe 4:u gabe :

Ersetzen Sie die Blöcke zur Berechnung der Beschleunigung im Modell schwingungnichtlinear_fblock.slx durch einen Function‐Block. 

320

Page 82: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

6.5   Nichtlineare Schwingung und Subsystem‐Block

Aufgabe 5:u gabe 5:Ersetzen Sie die Blöcke zur Berechnung der Beschleunigung im Modell schwingungnichtlinear_subsystem.slx durch einen Subsystem‐Block. 

Variante 1 : Subsystem‐Block erzeugen und danach das b d lliSubsystem modellieren

Öffnen :DoppelclickModelBrowser

321

6.5   Nichtlineare Schwingung und Subsystem‐Block

Variante 2 : Bestehende Blöcke in Subsystem verlagern

Alle Blöcke, die in das Subsystem verlagert werden sollen, werdenselektiert, ebenso die Eingangs‐

y g

selektiert, ebenso die Eingangsund die Ausgangssignale. Die Selektion erfolgt auf zwei Arten

• einen rechteckigen Bereicheinen rechteckigen Bereichwählen

• Drücken der Shift‐Taste und SelektionSelektion

Danach Menü Diagram‐> Sub‐system&Model Reference ‐> Create Subsystem from SelectionCreate Subsystem from Selection oder Kontextmenü ‐> Create Sub‐system from Selection wählen.

322

6.6   Model‐Workspace

Aufgabe 6:u gabe 6:Verwenden Sie für die Parameter der nichtlinearen DGL drei Variablen k, m und c, die im Model‐Workspace (nicht MATLAB‐Workspace) definiert werden. Die Anfangsbedingungen werden über zwei Variablen v0 und y0 definiert. Öffnen Sie das Modell schwingungmo-y g gdelworkspace.slx und ändern Sie dieses geeignet ab. Starten Sie dann die Simulation.

0)t(ymc)t(y

mk

dtyd 32

2

0y)0t(y,0v)0t(y mmdt

323

Page 83: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 1 von 6 

Hochschule München, FK 03 MB SS 2013  

Name Vorname Matrikelnummer Sem.Gr. Hörsaal Platz

Ingenieurinformatik II – Numerik für Ingenieure Teil 2

Bearbeitungszeit : 60 Minuten Aufgabensteller : Dr. Reichl Hilfsmittel : beliebige eigene, aber kein PC/Notebook, Bearbeitung mit Bleistift erlaubt

Zulassung : Die Prüfung ist nur dann gültig, wenn Sie die erforderliche Zulassungs-voraussetzung erworben haben.

Viel Erfolg !!

1. Aufgabe (ca 23 Punkte) 1.1 Schreiben Sie eine MATLAB-Funktion mittelwert2d, die den Mittelwert der

Elemente eines zweidimensionalen Arrays ( Matrix ) berechnet und zurückgibt. Die MATLAB-Funktionen mean und sum dürfen nicht verwendet werden.

Beispiel :

633

432A Mittelwert der Elemente der Matrix A : 2.5

    Seite 2 von 6 

1.2 Schreiben Sie eine MATLAB-Funktion matrix, an die 3 Werte a, b, c und eine ganze Zahl n übergeben werden. Die Funktion matrix erzeugt eine n*n-Matrix und gibt diese zurück. Die Matrix wird wie folgt gebildet. Die Elemente auf der Diagonalen der Matrix besitzen jeweils den Wert a, die Elemente im oberen Dreieck den Wert b und die Elemente im unteren Dreieck den Wert c.

Geeignete MATLAB-Funktionen dürfen, wenn es nötig sein sollte, verwendet werden.

Beispiel :

Mit a=2, b=3, c=-1 und n=4 wird die nebenstehende Matrix erzeugt :

2111

3211

3321

3332

1.3 Schreiben Sie ein MATLAB-Skript, das mit Hilfe der Funktion matrix die Matrix aus

dem Beispiel in Teilaufgabe 1.2 erzeugt. Dann wird der Mittelwert der Elemente der Matrix mit Hilfe der Funktion aus Teilaufgabe 1.1 berechnet. Ist der Mittelwert kleiner als -0.001 dann gibt das Skript die Meldung "Mittelwert negativ" aus. Ist der Mittelwert größer als 0.001 wird "Mittelwert positiv" ausgegeben, andernfalls "Mittelwert null oder fast null".

Page 84: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 3 von 6 

2. Aufgabe (ca 25 Punkte) Lesen Sie zuerst die gesamte Aufgabe! Bestimmen Sie mit Hilfe der MATLAB‐Funktion ode45 die Lösung des Anfangswertproblems für die folgende Differentialgleichung (DGL), wobei die Größen a und b als Parameter zu behandeln sind. 

0)0t(y,8.0)0t(y,tcosb)t(ycosa)t(y  

Zur Lösung der Aufgabe wird ein MATLAB‐Skript‐File  dgl.m  erstellt, sowie eine MATLAB‐Funktion fundgl.m  zur Definition der DGL und eine weitere MATLAB‐Funktion  maxdt. a) Das Skript  dgl.m  definiert Variablen für die Parameter a und b, die auch von der Funktion 

fundgl verwendet werden. Mit der Funktion ode45 wird die Lösung für das Anfangswertproblem im Bereich [0,30] berechnet. Die Parameter sollen dabei wie folgt gesetzt sein:  a=1.0  und  b=1.2 . Anschließend wird die Auslenkung  y  in Abhängigkeit von der Zeit graphisch dargestellt.  

Die Funktion ode45 verwendet eine Schrittweitensteuerung. Deshalb besitzen die Zeitpunkte, für die die Lösung berechnet wird, nicht die gleichen Abstände. Berechnen Sie mit Hilfe der Funktion maxdt den maximalen Abstand der Zeitpunkte, der bei der Lösung der DGL verwendet wird und geben Sie diesen aus (siehe auch Teilaufgabe d). 

 

    Seite 4 von 6 

b) Schreiben Sie die DGL in ein System von DGLn erster Ordnung um. Schreiben Sie auch die Anfangsbedingungen um. 

           

 

 

 

    c) Schreiben Sie die Funktion  fundgl  zur Definition der DGL. 

              

d) Schreiben Sie die Funktion  maxdt , die in Teilaufgabe a gebraucht wird. Die Funktion untersucht einen Vektor  t , der als Parameter übergeben wird. Dieser Vektor enthält Zeitpunkte, die aufsteigend geordnet sind, d.h. es gilt t(k) < t(k+1)  für alle Elemente von t. Die Funktion  maxdt  berechnet den größten Abstand zweier aufeinanderfolgender Zeitpunkte und gibt diesen zurück. 

Page 85: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 5 von 6 

3. Aufgabe (ca 18 Punkte) Mit Hilfe von Simulink soll die Lösung folgender Differentialgleichung im Intervall  [ 0, 10 ] berechnet und graphisch dargestellt werden.  

2)0t(y,)tsin(a)t(yk)t(y 2  

Die Graphikausgabe soll die Größe  y  anzeigen. Die Größen k und a sind Parameter. 

Es dürfen nur folgende Simulink‐Blöcke verwendet werden 

a) Zeichnen Sie die notwendigen Blöcke und den Signalfluss zur Lösung obiger Aufgabe. Kennzeichnen Sie  y  und die Anfangsbedingung. Kennzeichnen Sie, in welchen Blöcken die Parameter k und a gesetzt werden. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

       Seite 6 von 6 

b) Der Parameter k kann in zwei verschiedenen Workspaces gespeichert werden. Wie heißen diese? Was sind jeweils die Vor‐ und Nachteile ? 

 

 

 

 

 

 

 

c)  Wie lautet die Differential‐gleichung, die durch neben‐stehendes  Simulinkmodell beschrieben wird ? 

 

 

 

 

 

 

d) Wie kann der durch Strichlinien gekennzeichnete Bereich im Simulinkmodell von Teilaufgabe c durch einen einzigen Block ersetzt werden. Benennen Sie den ent‐sprechenden Block und geben Sie den genauen Ausdruck an, den man in diesem Block eintragen muss. 

Page 86: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 1 von 6 

Hochschule München, FK 03 MB WS 2012/13  

Name Vorname Matrikelnummer Sem.Gr. Hörsaal Platz

Ingenieurinformatik II – Numerik für Ingenieure - Teil 2

Bearbeitungszeit : 60 Minuten Aufgabensteller : Dr. Reichl Hilfsmittel : beliebige eigene, aber kein PC/Notebook, Bearbeitung mit Bleistift erlaubt

Zulassung : Die Prüfung ist nur dann gültig, wenn Sie die erforderliche Zulassungs-voraussetzung erworben haben.

Viel Erfolg !! 1. Aufgabe (ca. 20 Punkte) 1.1  Schreiben Sie eine MATLAB‐Funktion  suche ,  mit folgenden Eigenschaften. An die Funktion 

wird ein Vektor x übergeben, der Werte vom Typ double enthält und eine ganze Zahl n, die die Anzahl der Elemente des Vektors x angibt. Die Funktion suche bestimmt, wie viele Elemente von x kleiner als -1 sind, wie viele Elemente zwischen -1 und +1 liegen (ein‐schließlich der Grenzen) und wie viele Elemente größer als 1 sind. Diese drei Ergebnisse werden über Rückgabewerte zurückgegeben. 

    Seite 2 von 6 

1.2  Schreiben Sie ein Skript  aufruf.m  , in dem zuerst ein Vektor x definiert wird (der Vektor ist in der Vorlage bereits vorgegeben) und das dann die Funktion suche geeignet aufruft. Anschließend werden die Ergebnisse, die die Funktion suche zurückliefert, wie folgt ausgegeben. 

     Ergänzen Sie das Skript aufruf.m .  x = [ 8 1 -13 0 5 10 -3 -2 -5 ];

 

1.3  Beschreiben Sie in Worten, was man in der Funktion suche abändern muss, wenn als Parameter nur ein Vektor x übergeben wird, nicht aber die Anzahl der Elemente des Vektors. Die Funktion soll weiterhin die Ergebnisse aus Aufgabe 1.1 zurückliefern 

 

   

 

 

 

 

 

 

Page 87: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 3 von 6 

2. Aufgabe (ca. 29 Punkte) Lesen Sie zuerst die gesamte Aufgabe! Bestimmen Sie mit Hilfe der MATLAB‐Funktion ode45 die Lösung des Anfangswertproblems für die Differentialgleichung (DGL) : 

4)0t(y,3)0t(y,2)0t(y,0)t(ya)t(yk)t(y1.0)t(y 2  

Die Größen k und a sind als Parameter zu behandeln. Zur Lösung der Aufgabe wird ein MATLAB‐Skript‐File  dgl.m  erstellt und eine MATLAB‐Funktion fundgl.m  zur Definition der DGL. a) Das Skript dgl.m definiert Variablen für die Parameter k und a, die auch von der Funktion 

fundgl verwendet werden. Dann wird unter Verwendung der Funktion ode45 die Lösung für das Anfangswertproblem im Bereich [0,10] berechnet. Die Parameter sollen dabei wie folgt gesetzt sein:  k=2.0  und  a=0.2 .  Danach wird k auf 2.5 gesetzt und die Anfangsbedingung für die erste Ableitung von y auf ẏ(t=0)=-3.5  geändert. Dann wird wieder eine Lösung des Anfangswertproblems berechnet. Anschließend soll für beide Lösungen die erste Ableitung von y in einer Graphik dargestellt werden. 

    Seite 4 von 6 

b) Schreiben Sie die DGL dritter Ordnung in ein System von DGLn erster Ordnung um. Schreiben Sie auch die Anfangsbedingungen für die erste Lösung um. 

 

c) Schreiben Sie die Funktion fundgl zur Definition der DGL. 

Page 88: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 5 von 6 

3. Aufgabe (ca. 18 Punkte) Mit Hilfe von Simulink soll die Lösung folgender Differentialgleichung im Intervall  [ 0, 2 ] berechnet und graphisch dargestellt werden.  

4)0t(y,3)0t(y,2)0t(y,0)t(y2.0)t(y1.0)t(y 2  

Die Graphikausgabe soll die Größe  y  und die erste Ableitung  ẏ  zeigen. Die beiden Größen sollen in zwei verschiedenen Fenstern dargestellt werden, im oberen Fenster die Größe y und im unteren Fenster die Größe ẏ . 

Es dürfen nur folgende Simulink‐Blöcke verwendet werden: 

 

 Integrator 

 

 Mux 

 

 Scope  

Fcn  (Function block) 

a) Zeichnen Sie die notwendigen Blöcke und den Signalfluss zur Lösung obiger Aufgabe. Kennzeichnen Sie  y, die erste Ableitung  ẏ  und die zweite Ableitung  ӱ . 

    Seite 6 von 6 

b) Geben Sie an, in welchen Blöcken die Anfangsbedingungen gesetzt werden. Kennzeichnen Sie diese und beschreiben Sie, welche Werte eingetragen werden müssen. 

 

 

 

 

 

 

c) Welcher Ausdruck muss im Function‐Block eingetragen werden? Geben Sie den Ausdruck an. 

 

 

 

 

 

 

d) An welcher Stelle der Simulink‐Programmierumgebung muss etwas geändert werden, wenn die Simulation nicht bei t=0 beginnen soll?  

 

 

 

 

 

Page 89: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 1 von 6 

Hochschule München, FK 03 MB SS 2012  

Name Vorname Matrikelnummer Sem.Gr. Hörsaal Platz

Zulassung geprüft Teil 1 Aufg. 1 Aufg. 2 Aufg. 3 Summe Note

Ingenieurinformatik II – Numerik für Ingenieure Teil 2

Bearbeitungszeit : 60 Minuten Aufgabensteller : Dr. Reichl

Hilfsmittel : beliebige eigene, aber kein PC/Notebook, Bearbeitung mit Bleistift erlaubt

Zulassung : Die Prüfung ist nur dann gültig, wenn Sie die erforderliche Zulassungs-voraussetzung erworben haben.

Viel Erfolg !!

1. Aufgabe (ca. 20 Punkte) Programmieren Sie unter Verwendung einer geeigneten Schleife eine MATLAB‐Funktion  newton  zur Durchführung der Newton‐Iteration. 

0nfürx3

axxx

2n

3n

n1n

 

Das Iterationsverfahren berechnet für den Wert  a  eine Approximation von   3 a  , d.h. die 3. Wurzel von  a. Das Programm soll den Wert der 3. Wurzel für eine vorgegebene Genauigkeit  eps < 1  berechnen. Die Parameter  eps ,  a  und der Startwert  x0  der Iteration sollen Eingangsparameter der Funktion sein. Die Funktion gibt den Wert der Wurzel zurück und die Anzahl der Iterationen, die zur Berechnung notwendig waren. Die Berechnung von  x1  wird als erste Iteration gezählt.  Wie lautet der Aufruf der Funktion newton, wenn für eps der Wert  10-8  gewählt wird,  a = 6 und  x0 = 5.0  gesetzt wird? Das Ergebnis (Wurzel) soll der Variablen  z  zugewiesen werden und die Anzahl der Iterationen der Variablen n. 

    Seite 2 von 6 

Lösung : Tragen Sie hier die Anweisungen für die Funktion  newton  ein. 

Tragen Sie hier die Anweisungen für den Aufruf der Funktion  newton ein : 

Page 90: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 3 von 6 

2. Aufgabe (ca. 29 Punkte) Lesen Sie zuerst die gesamte Aufgabe! 

Bestimmen Sie mit Hilfe der MATLAB‐Funktion ode45 die Lösung des Anfangswert‐problems für die Differentialgleichung (DGL) 

2)0t(yund3)0t(y,eF)t(yk)t(y ta

 

Die Größen  k , F und a sind als Parameter zu behandeln. 

Zur Lösung der Aufgabe wird ein MATLAB‐Skript‐File  dgl.m  erstellt und eine MATLAB‐Funktion fundgl.m  zur Definition der DGL. 

a) Das Skript dgl.m definiert Variablen für die Parameter k, F und a, die auch von der Funktion fundgl verwendet werden. Dann wird unter Verwendung der Funktion ode45 die Lösung für das Anfangswertproblem im Bereich [0,20] berechnet. Die Parameter sollen dabei wie folgt gesetzt sein: k=2.0 , F=3.0 und a=0.2 . Danach wird k auf 5.5 gesetzt und erneut eine Lösung des Anfangswertproblems berechnet. Anschließend sollen beide Lösungen (jeweils nur die Auslenkungen!) in einer Graphik dargestellt werden. 

   

    Seite 4 von 6 

b) Schreiben Sie die DGL 2. Ordnung in ein System von DGLn erster Ordnung um. Schreiben Sie auch die Anfangsbedingungen um. 

c) Schreiben Sie die Funktion fundgl zur Definition der DGL. 

Page 91: Skript - kuepper.userweb.mwn.dekuepper.userweb.mwn.de/informatik/IngenieurinformatikTeil2... · Ingenieurinformatik –Teil II –MATLAB‐Simulink Vorlesung Einleitung Praktikum

    Seite 5 von 6 

3. Aufgabe (ca. 18 Punkte) Mit Hilfe von Simulink soll die Lösung folgender Differentialgleichung im Intervall [0,50] graphisch dargestellt werden. Die Graphikausgabe soll die Auslenkung y  und die 

Geschwindigkeit 

y  enthalten. 

3)0t(yund2)0t(y,0)t(y1.0)t(y)t(y 2

 

Es dürfen nur folgende Simulink‐Blöcke verwendet werden: 

 

Integrator  

Mux 

 

Scope  

Fcn (Function block) 

a) Zeichnen Sie die notwendigen Blöcke und den Signalfluss zur Lösung obiger Aufgabe. 

Kennzeichnen Sie y  und die Ableitung 

y  . 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

    Seite 6 von 6 

b) Geben Sie an, in welchen Blöcken die Anfangsbedingungen gesetzt werden. Kennzeichnen Sie diese und beschreiben Sie, welche Werte eingetragen werden müssen. 

 

 

 

 

 

 

c) Welcher Ausdruck muss im Function‐Block eingetragen werden. Geben Sie den Ausdruck an. 

 

 

 

 

 

 

d) An welcher Stelle wird die Simulationsdauer festgelegt?  

 

 

 

 

 

e) Nach dem Start der Simulation kann es vorkommen, dass die Lösung nicht im gesamten Zeitbereich angezeigt wird. Woran kann das liegen und wie kann man das verhindern?