Lehrstuhl für Regelungstechnik und Systemtheorie Prof. Dr.-Ing. Martin Mönnigmann
Klausur „Einführung in Matlab“
Bitte vollständig und lesbar ausfüllen: SoSe18 23.08.2018
Name:
Vorname:
Matrikelnummer:
Unterschrift:
Als Hilfsmittel ist eine unveränderte, gedruckte Sammlung der Vorlesungsfolien gestattet. Außerdem darf auf das Matlab-Hilfesystem zugegriffen werden.
Das Mitführen von unerlaubten Hilfsmitteln wird als Täuschungsversuch gewertet. Insbesondere in der Kleidung mitgeführte oder am Arbeitsplatz abgelegte netzwerkfähige Geräte wie Telefone werden als Täuschungsversuch gewertet. Das Aufrufen von Internetseiten und insbesondere das Benutzen von Internet-Suchmaschinen (z.B. Google) werden ebenfalls als Täuschungsversuch gewertet.
Zum Bestehen der Klausur sind 48 Punkte aus den Aufgaben 1 bis 5 notwendig.
Die Bearbeitungszeit beträgt 120 Minuten. Berücksichtigen Sie die zu den jeweiligen Aufgaben
gegebenen Hinweise bezüglich der als Lösung abzugebenden Dateien.
Die von Ihnen abzugebende Lösung der Klausur besteht aus verschiedenen Dateien, die Sie in ein
dafür bereitgestelltes Verzeichnis legen. Geben Sie zum Ende der Klausur ebenfalls die
Aufgabenstellung wieder ab!
Aufgabe
max. Punkte
erzielte Punkte
Unterschrift Korrektor
1
25
2
21
3
32
4
27
5
15
∑
120
Pkt.
Note:
Aufgabe 1: Grundlagen, Vektoren und Matrizen (25 P)
Aufgaben:
a) Im Folgenden soll ein Programm entwickelt werden, das eine Funktion
𝑓(𝑥) = 𝑚𝑥 + 𝑛
aufleitet. Die Stammfunktion habe dann die Form 𝑦=𝐹(𝑥)=𝑎𝑥2 +𝑏𝑥+𝑐.
Ein Punkt 𝑦0 = 𝐹(𝑥0) der Stammfunktion sei bekannt. (8 P)
i. LegenSiedieVariablen𝑚=𝜋,𝑛=1,𝑥0 =1und𝑦0 =2imWorkspacean.
ii. Berechnen Sie die gesuchten Vorfaktoren 𝑎 = 𝑚, 𝑏 = 𝑛 und 𝑐 = 𝑦0 − 𝑎𝑥02 − 2
𝑏𝑥0.
iii. Berechnen Sie 𝐹(𝑥) für 𝑥 = 4 und lassen Sie das Ergebnis im Command
Window anzeigen.
iv. Berechnen sie die 𝑥-Werte zu 𝑦 = 𝐹(𝑥) = 2 (Hinweis: hierzu müssen Sie die
𝐹(𝑥)-Formel mittels pq-Formel nach 𝑥 auflösen) und lassen Sie das Ergebnis
im Command Window anzeigen.
v. Runden Sie 𝑎 auf die nächste Ganzzahl ab.
vi. Wandeln Sie 𝑎 in einen geeigneten speichereffizienteren Datentyp um. Geben Sie in einem Kommentar den erlaubten Wertebereich für 𝑚 an, der daraus resultiert.
b) Durchschnittliche Tagessonnenstunden in Deutschland (in h): (9 P)
i. Legen Sie einen Zeilenvektor 𝑇𝑠𝑠 mit den Tagessonnenstunden an.
ii. Lassen Sie sich die Länge des erstellten Vektors ausgeben, um sicherzustellen,
dass Sie keine Zahl vergessen haben.
iii. Einem RUB-Meteorologen scheint der Wert des Monats August nicht
plausibel. Korrigieren Sie diesen Eintrag im Vektor auf 6,7.
iv. Lassen Sie sich automatisiert den Monat mit den meisten
Tagessonnenstunden und den dazugehörigen Wert anzeigen.
v. Berechnen Sie automatisiert die Gesamtsonnenstunden im Jahr. Gehen Sie
dabei vereinfacht von einer konstanten Monatsdauer von 30,5 Tagen aus:
𝐺𝑠𝑠vereinfacht = 30,5 ∙ ∑ 𝑇𝑠𝑠𝑖 𝑖
vi. Berechnen Sie erneut die Gesamtsonnenstunden im Jahr, diesmal ohne die vereinfachte konstante Monatsdauer. Multiplizieren Sie dazu 𝑇𝑠𝑠 mit einen Spaltenvektor der die Anzahl der Tage pro Monat enthält (Schaltjahre werden nicht berücksichtigt).
vii. Um wieviel Prozent weicht das vereinfachte Ergebnis vom genauen Ergebnis ab? Lassen Sie dies im Command Window anzeigen.
Legen Sie zur Lösung dieser Aufgabe ein .m-File mit dem Namen
A1.m
an. Schreiben Sie in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
Beginnen Sie jede Teilaufgabe mit einem Kommentar, z.B.: %% a)
Monat
Jan
Feb
März
April
Mai
Juni
Juli
Aug
Sep
Okt
Nov
Dez
Tagessonnenstd.
1,6
2,7
3,8
5,3
6,8
7,2
7,1
0
5,2
3,7
2,0
1,4
2
c) „Ich weiß was du denkst“ für Fortgeschrittene (7 P)
i. Fordern Sie den Nutzer im Command Window zur Eingabe eines Vektors mit
sechs Einträgen auf.
ii. Erzeugen Sie eine Diagonalmatrix 𝐴 mit den sechs Zahlen des Vektors auf der
Hauptdiagonalen.
iii. Multiplizieren Sie 𝐴 mit der Einheitsmatrix.
iv. Multiplizieren Sie das Ergebnis mit der Inversen von 𝐴.
v. Invertieren Sie das Ergebnis.
vi. Multiplizieren Sie dazu die Transponierte von 𝐴
vii. Lassen Sie sich die Einträge der Hauptdiagonalen des Ergebnisses im Command Window ausgeben.
d) Löschen Sie alle Variablen aus dem Workspace. (1 P)
3
Aufgabe 2: Schleifen, Funktionen und Strukturen (21 P)
In der folgenden Aufgabenstellung soll eine Primzahlensuche bis zu einer beliebigen, vom Nutzer wählbaren Zahl in einer separaten Funktion implementiert werden. Diese soll anschließend aus einem Skript aufgerufen werden.
Die genauen Funktionalitäten werden in den Unteraufgaben a)-c) weiter erläutert:
Hinweis: Eine Primzahl ist dadurch charakterisiert, dass sie aus der Menge der natürlichen Zahlen genau zwei Teiler besitzt, die Zahl eins und sich selbst. Aus diesem Grund wird die Zahl eins nicht zu den Primzahlen gezählt.
Aufgaben:
a) Erstellen Sie eine Funktion mit dem Namen Primzahlensuche, die als
Eingangsparameter die Zahl, bis zu der die Primzahlen gesucht werden sollen, sowie einen Rückgabeparameter mit beliebigem Namen enthält.
Erstellen Sie einen Datentyp, in dem die gefundenen Primzahlen gespeichert werden.
(4 P)
b) Erstellen Sie mithilfe von Schleifenkonstruktionen eine Logik, die alle Primzahlen bis
zu der vom Nutzer vorgegeben Zahl findet und in dem in Aufgabenteil a) erstellten
Datentyp speichert. (12 P)
c) Der Rückgabeparameter soll sowohl die Liste der gefundenen Primzahlen als auch die
Anzahl an insgesamt gefundenen Primzahlen enthalten.
Wählen Sie dafür einen geeigneten Datentyp aus und ergänzen Sie diesen
entsprechend.
(3 P)
d) Rufen Sie die Funktion aus einem separaten Skript für eine von Ihnen ausgewählte
obere Grenze auf und speichern Sie den Rückgabewert in einer Variablen. (2 P)
Legen Sie zur Lösung dieser Aufgabe .m-Files mit den Namen Primzahlensuche.m und A2.m
an. Schreiben Sie in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
4
Aufgabe 3: Objektorientierte Programmierung (32 P)
Ihr Unternehmen bietet maßgeschneiderte Stahlzylinder an. Sie sind nun damit beauftragt, eine Klasse „Zylinder“ zu implementieren. Die Klasse besteht dabei aus drei Eigenschaften (Radius, Höhe, Dichte), die zusammen den Zylinder beschreiben. Mit einem Konstruktor werden Werte für den Radius und die Höhe definiert, die von entsprechenden Eingabekontrollen auf ihre Sinnhaftigkeit überprüft werden sollen. Die Dichte ist vorgegeben und darf nicht verändert werden. Eine Methode „calculateMass“ ermittelt das Gewicht des konfigurierten Zylinders, da dieser den Verkaufspreis bestimmt.
Aufgaben:
a) Definieren Sie die Klasse „Zylinder“. (2 P)
b) Definieren Sie nun die Eigenschaften. Fügen Sie dem entsprechenden Abschnitt
Variablen für den Radius in cm, die Höhe in cm und die Dichte hinzu. Die Dichte soll zwar angezeigt werden können, darf aber nicht verändert werden. Die Dichte von Stahl beträgt 7,9 g/cm3. Achten Sie auf sinnvolle und gut lesbare Variablennamen! (7 P)
Nun sollen im Folgenden die Methoden implementiert werden.
c) Definieren Sie den Konstruktor, um den Eigenschaften bei Definition eines Objektes
Werte zuzuweisen! (6 P)
d) Stellen Sie durch entsprechende Abfragen im Konstruktor sicher, dass nur sinnvolle
Werte an den Konstruktor übergeben werden! (Die Eigenschaften sollten Zahlen sein und größer Null). Sollten falsche Eingaben gemacht werden, soll eine Fehlermeldung erscheinen. (6 P)
Der letzte Schritt ist die Definition der Methode „calculateMass“.
e) Zunächst soll in der Methode „calculateMass“ das Volumen des konfigurierten
Zylinders ermittelt werden. (Hinweis: 𝑉 = 𝜋𝑟2 ∗ h) (3 P) 𝑍𝑦𝑙𝑖𝑛𝑑𝑒𝑟
f) Darauf folgend soll die Masse des Zylinders in kg berechnet werden. Diese soll in folgender Form in der Konsole ausgegeben werden (5 P):
Nun sollen die Klasse und ihre Methoden getestet werden. Bearbeiten Sie diese Schritte bitte in einem Skript A3.m.
g) Erzeugen Sie ein Objekt „klausurZylinder“ und übergeben Sie dem Konstruktor die
folgenden Werte: (2 P)
i. Radius: 5 cm
ii. Höhe: 10 cm
h) Erzeugen Sie nun die Ausgabe des Gewichts des konfigurierten Zylinders, indem Sie die dafür implementierte Methode aufrufen! (1 P)
Legen Sie zur Lösung dieser Aufgabe .m-Files mit den Namen Zylinder.m und A3.m
an. Schreiben Sie jeweils in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
5
Aufgabe 4: Symbolisches Rechnen, Lösen von DGLn (27 P)
Der Van-der-Pol Oszillator ist ein häufig verwendetes Beispiel zur Demonstration von scheinbar chaotischem Systemverhalten. Die Differentialgleichung des Oszillators lautet
𝑥̈(𝑡) − 𝑎 ⋅ (1 − 𝑏 ⋅ 𝑥2(𝑡)) ⋅ 𝑥̇(𝑡) + 𝑐 ⋅ 𝑥(𝑡) = 𝐹(𝑡) ,
wobei 𝐹(𝑡) die anregende Funktion darstellt. Hier soll eine Sinusschwingung als Anregung gewählt werden:
𝐹(𝑡) = sin(𝑤 ⋅ 𝑡) .
Aufgaben:
a) Legen Sie die Parameter 𝑎 = 𝑏 = 0, 𝑐 = 𝑤 = 1 als symbolische Variablen an. (2 P)
b) Legen Sie die DGL des Oszillators und die anregende Funktion symbolisch an. (7 P)
c) Lassen Sie die DGL analytisch lösen mit der Anfangsbedingung
𝑥(𝑡 = 0) = 𝑥̇(𝑡 = 0) = 0 und geben Sie die Lösung mittelsdisp()aus. (4 P)
d) Plotten Sie das Zeitverhalten der Lösung im Bereich von 0 bis 30 Sekunden mittels
der Funktion fplot() in figure(1). (2 P)
Für 𝑏 = 1 kann keine analytische Lösung mehr gefunden werden. Die Berechnung muss in diesem Fall also numerisch erfolgen. Dazu kann der Oszillator in ein explizites Differentialgleichungssystem ungeformt werden:
(𝑥̇1(𝑡)) = 𝑥2(𝑡)
𝑥̇ (𝑡) 𝑎⋅(1−𝑏⋅𝑥2(𝑡))⋅𝑥 (𝑡)−𝑐⋅𝑥 (𝑡)+sin(𝑤⋅𝑡) 2121
e) Legen Sie das obige DGL-System als vektorwertige Inline-Funktion f(t,x) an. SetzenSiedieParameterzu 𝑎=𝑏=𝑐=1,𝑤=0,2.(5P)
f) Lösen Sie die in e) angelegte Funktion mittels dem numerischen Löser ode45. Berechnen Sie die Lösung für das Zeitintervall von 0 bis 30 Sekunden und geben Sie die Anfangsbedingung 𝑥1(𝑡 = 0) = 𝑥2(𝑡 = 0) = 0 vor. (5 P)
g) Plotten Sie die Lösung 𝑦(𝑡) = 𝑥1(𝑡) in figure(2). (2 P)
Legen Sie zur Lösung dieser Aufgabe ein .m-File mit dem Namen
A4.m
an. Schreiben Sie in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
Beginnen Sie jede Teilaufgabe mit einem Kommentar, z.B.: %% a)
6
Aufgabe 5: Lineare Programme (15 P)
Das Unternehmen ChessNATM hat sich auf das Drehen hochwertiger Schachfiguren spezialisiert. Besonders gewinnbringend lassen sich Damen D, Könige K und Türme T verkaufen. Der Gewinn pro Stück beträgt bei Damen 2,75 €, bei den Königen 3,20 € und bei Türmen 1,80 €. Der Gesamtgewinn G kann mit der Formel
𝐺 = 2.75⋅𝑥1 +3.2⋅𝑥2 +1.8⋅𝑥3
berechnet werden, wobei 𝑥1 die Anzahl der Damen, 𝑥2 die Anzahl der Könige und 𝑥3 die
Anzahl der Türme beschreibt.
Zur Produktion stehen die Drehmaschinen DM1 und DM2 zur Verfügung. Da mit den Maschinen auch die anderen Spielfiguren hergestellt werden, steht DM1 nur 260 Stunden und DM2 nur 215 Stunden pro Monat für die Produktion von Damen, Königen und Türmen zur Verfügung. Die Herstellung einer Dame erfordert 1.5 Arbeitsstunden an DM1 und 2 Arbeitsstunden an DM2. Bei der Herstellung eines Königs sind es 2.5 Arbeitsstunden an DM1 und 1.5 Arbeitsstunden an DM2 und für einen Turm werden 2 Arbeitsstunden an DM1 und 2 Arbeitsstunden an DM2 benötigt. Aufgrund eines knappen Rohstoffbestandes können maximal 80 Damen hergestellt werden. Zudem muss die Abnahmemenge von 50 Türmen garantiert werden.
Ihre Aufgabe ist es, den monatlichen Gewinn durch Ermittlung der optimalen Werte für 𝑥1 und 𝑥2 zu maximieren. Das Optimierungsproblem lässt sich wie folgt modellieren:
max(2.75⋅𝑥1 +3.2⋅ 𝑥2 +1.8⋅𝑥3) 𝑢. 𝑑. 𝑁. 1.5 ⋅ 𝑥1 + 2.5 ⋅ 𝑥2 + 2𝑥3 ≤ 260
2 ⋅ 𝑥1 + 1.5 ⋅ 𝑥2 + 2 ⋅ 𝑥3 ≤ 215 0≤𝑥1 ≤80, 0≤𝑥2, 50≤𝑥3
Zur Lösung des Optimierungsproblems soll die Funktion linprog eingesetzt werden, mit der Minimierungsprobleme mit linearer Kostenfunktion gelöst werden können.
Aufgaben:
a) Definieren Sie anhand der beschriebenen Modellierung einen Vektor f mit den
linearen Koeffizienten der Kostenfunktion, mit dem Sie den Gewinn maximieren
können, wenn Sie zur Optimierung die Funktion linprog nutzen wollen. (2 P)
b) Definieren Sie Matrix A und Vektor b zur Formulierung der Nebenbedingungen in
Standardform. (3 P)
c) Definieren Sie je einen Vektor für die obere und einen Vektor für die untere Grenze
der Optimierungsvariablen 𝑥1, 𝑥2 und 𝑥3. (3 P)
d) Erstellen Sie eine options-Struktur und definieren Sie den ‚interior-point‘-Algorithmus
als Löser für das Optimierungsproblem. (1 P)
e) Lösen Sie das Maximierungsproblem, indem Sie die Funktion linprog mit den in
Teilaufgaben a) – c) ermittelten Werten und den in d) definierten Optionen aufrufen.
(Die Lösung muss nicht ganzzahlig sein!) (4 P)
f) Geben Sie die optimale Anzahl für 𝑥1, 𝑥2 und 𝑥3 sowie den Gewinn im Command
Legen Sie zur Lösung dieser Aufgabe ein .m-File mit dem Namen
A5.m
an. Schreiben Sie in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
Beginnen Sie jede Teilaufgabe mit einem Kommentar, z.B.: %% a)
Window aus. (2 P)
7