Upload
duongbao
View
240
Download
8
Embed Size (px)
Citation preview
Skript
Ingenieurinformatik ‐Teil 2
MATLAB ‐ Simulink
Teil 1 : Vorlesung
Teil 2 : Praktikum
Teil 3 : Klausuren
Wintersemester 2013/14
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
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
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
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
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
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 !
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.
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
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
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
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
( , , );
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 . .
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
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
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
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
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!
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
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
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)
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
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
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 )
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
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);
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).
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?
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.
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 :
2π
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°.
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
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
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
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
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)
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
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.
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
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
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
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?
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
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.
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
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
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
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
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
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
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?
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
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.
9.5.3 Blöcke „To Workspace“ und „FromWorkspace“ . . .
205 206
207 208
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
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.
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
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
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).
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 ?
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
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
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]
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)
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
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.
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?“
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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".
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.
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.
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
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.
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?
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 :
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.
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?