Lehrstuhl für Regelungstechnik und Systemtheorie Prof. Dr.-Ing. Martin Mönnigmann
Klausur „Einführung in Matlab“ Bitte vollständig und lesbar ausfüllen:
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
30
2
20
3
32
4
22
5
16
∑
120
Pkt.
Note:
Aufgabe 1: Grundlagen, Vektoren und Matrizen (30 P)
a) Erzeugen Sie automatisiert den Zeilenvektor: 𝑎 = (15 15,75 16,5 17,25 ⋯ 30). i. Ändern Sie den 5. Eintrag in die Zahl 20,1.
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)
ii. Berechnen Sie den arithmetischen Mittelwert 𝑎̅ der Einträge.
iii. Drehen Sie den Vektor 𝑎 um (Einträge in umgekehrter Reihenfolge).
iv. Lassen Sie sich den letzten Eintrag im umgedrehten 𝑎-Vektor in der Konsole
ausgeben.
b) Erzeugen Sie die Matrix 𝐴 = (4 2 5 2).
i. Zeigen Sie, dass 𝐴 multipliziert mit seiner Inversen nicht exakt gleich der Einheitsmatrix ist. Erläutern Sie in einem Kommentar, was die Ursache für diese Abweichungen sein könnte.
(5 P)
ii. Berechnen Sie die Determinante 𝐴𝑑𝑒𝑡 von 𝐴.
iii. Erzeugen Sie automatisiert die Diagonalmatrix 𝐵 =
6000000 0900000 0050000 0003000 . 0000200 0000050 (0 0 0 0 0 0 8)
1364
7933 7620
iv. Löschen Sie die 3., 4. und 5. Spalte und die letzten 5 Zeilen von 𝐵.
v. Multiplizieren Sie 𝐴 mit 𝐵𝑇 und lassen Sie sich automatisiert den größten Eintrag 𝑏 des Produkts ausgeben.
(13 P) c) Fordern Sie den Nutzer nacheinander zur Eingabe des heutigen Tages und Monats auf und
speichern Sie diese Variablen unter 𝑇 und 𝑀 ab.
i. Aus diesen Eingaben soll nun berechnet werden, wie viele Tage 𝑆 es noch bis
Silvester sind. Verwenden Sie hierfür folgende überschlägige Formel: 𝑆 = 30,4 ∙
(12 − 𝑀) + (30,4 − 𝑇) .
ii. Runden Sie die Zahl 𝑆 auf eine Ganzzahl und speichern Sie 𝑆 möglichst
speichereffizient ab.
iii. Lassen Sie nun „noch 𝑆 Tage bis Silvester“ in der Konsole anzeigen (𝑆 soll natürlich
durch die gerade berechnete Zahl ersetzt werden). d) Löschen Sie die Matrizen 𝐴 und 𝐵 aus dem Workspace.
(10 P) (2 P)
2
Aufgabe 2: Schleifen, Funktionen und Strukturen (20 P)
Laut der Collatz-Vermutung konvergiert eine beliebige Zahl 𝑛 zu 1, wenn auf diese folgende Regeln angewendet werden:
1. Wenn die Zahl gerade ist, teile diese durch 2.
2. Wenn die Zahl ungerade ist, multipliziere sie mit 3 und addiere 1.
3. Wiederhole das Vorgehen auf das resultierende Ergebnis
Für z.B. die Startzahl 𝑛 = 10 ergibt sich folgende Zahlenfolge:
10,5,16,8,4,2,1
Es soll eine Funktion erstellt werden, die für einen beliebigen Startwert das Collatz-Problem bis zum erstmaligen Erreichen der Zahl 1 löst. Als Rückgabewert soll die berechnete Zahl sowie ihre Zahlenfolge zurückgegeben werden. Ein möglicher Funktionsaufruf für das obige Beispiel könnte wie folgt lauten:
Die genauen Funktionalitäten werden in den Unteraufgaben a)-c) weiter erläutert:
a) Erstellen Sie eine Funktion mit dem Namen CollatzProblem, die als Eingangsparameter den Startwert und als Ausgangsparameter eine Variable LoesungCollatz enthält. (3 P)
b) Erstellen Sie eine Schleife, in der die Collatzreihe berechnet wird. Die Schleife soll abbrechen, wenn die Zahl 1 das erste Mal erreicht wird. In der Schleife soll zusätzlich die Anzahl der Durchläufe gezählt werden und die Zahlenfolge in einer Variablen gespeichert werden. (12 P)
c) Ergänzen Sie den Ausgangsparameter LoesungCollatz, so dass in diesem die Zahl mit der Anzahl der Schleifendurchläufe sowie die Zahlenreihe zurückgegeben wird. Überlegen Sie sich dafür zunächst einen geeigneten Datentyp. (5 P)
Legen Sie zur Lösung dieser Aufgabe ein .m-File mit dem Namen
CollatzProblem.m
an. Schreiben Sie in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
CollatzProblem(10)
ans =
struct with fields:
Schritte: 6
Zahlenfolge: [7×1 double]
3
Aufgabe 3: Objektorientierte Programmierung (32 P)
Im Folgenden soll eine Klasse „Grafiktest“ implementiert werden. Die Klasse besteht dabei aus drei Eigenschaften, die zusammen die x-Werte (untere Schranke, Schrittweite, obere Schranke) für eine zu plottende Funktion bilden. Mit einem Konstruktor werden den Eigenschaften Werte zugeordnet. Eine Methode „printFunction“ bildet mit den x-Werten Funktionswerte und stellt diese grafisch dar.
a) Definieren Sie eine Klasse „Grafiktest“. (3 P)
b) Definieren Sie nun die Eigenschaften. Fügen Sie dem entsprechenden Abschnitt Variablen für
eine untere Schranke, eine Schrittweite und eine obere Schranke hinzu. Achten Sie auf sinnvolle und gut lesbare Variablennamen! (4 P)
Nun sollen im Folgenden die Methoden implementiert werden:
c) Definieren Sie den Konstruktor, um den Eigenschaften bei der Instanziierung eines Objektes
Werte zuzuweisen! (5 P)
d) Definieren Sie die Methode „printFunction“.
i. In dieser soll zunächst ein Vektor für die x-Werte erzeugt werden, welcher von der unteren bis zur oberen Schranke mit der angegebenen Schrittweite läuft.
ii. Im zweiten Schritt soll die folgende Funktion als inline-Funktion implementiert werden
𝑦 = 𝑥4 + 2𝑥3 − 5𝑥2 + 4𝑥,
welcher die x-Werte übergeben werden und welche die y-Werte zurückgibt. Achten
Sie darauf, dass ein Vektor übergeben und ein Vektor wieder ausgegeben werden
soll! (Hinweis: Punktoperationen)
iii. Erweitern Sie die Methode nun um einen „plot“-Befehl, um die erzeugten y-Werte
entlang der eingegebenen x-Werte grafisch darzustellen. In der entstandenen Grafik sollen ein Gitter, eine Legende („Datensatz“) sowie die Achsenbeschriftungen „x- Werte“ und „y-Werte“ vorhanden sein!
(17 P)
Nun sollen die Klasse und ihre Methoden getestet werden. Bearbeiten Sie diese Schritte bitte in einem neuen Skript „A3.m“.
e) Erzeugen Sie ein Objekt „Klausur“ und übergeben Sie dem Konstruktor die folgenden Werte:
Untere Schranke: -5
Schrittweite: 0.2
Obere Schranke: 5
(2 P)
f) Erzeugen Sie nun eine grafische Darstellung der erzeugten y-Werte entlang der übergebenen x-Werte, indem Sie die dafür implementierte Methode aufrufen! (1 P)
Legen Sie zur Lösung dieser Aufgabe .m-Files mit den Namen Grafiktest.m und A3.m
an. Schreiben Sie jeweils in die erste Zeile einen Kommentar mit folgender Syntax:
% Name, Vorname, Matrikelnummer
Beginnen Sie jede Teilaufgabe mit einem Kommentar, z.B.: %% a)
4
Aufgabe 4: Symbolisches Rechnen, globale Optimierung (22 P)
Gegeben sei folgende Funktion:
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)
Es soll a)
b) c)
d)
𝑓(𝑥) = (𝑥 − 3) ⋅ (𝑥 − 2) ⋅ 𝑥 ⋅ (𝑥 + 1) ⋅ (𝑥 + 2) ⋅ (𝑥 + 3) das globale Minimum der Funktion im Intervall [−3, 3] gefunden werden.
Legen Sie die Funktion als symbolische Funktion f(x) mit der symbolischen Variable x an! (5 P)
Plotten Sie die Funktion für 𝑥 ∈ [−3, 3] in figure(1)! (3 P)
Wandeln Sie die symbolische Funktion f(x) in eine inline-Funktion g(x) um, indem Sie die Funktion matlabFunction() nutzen! (2 P)
Suchen Sie mithilfe des Simulated Annealing Verfahrens das globale Minimum der Funktion im Intervall [−3, 3]. Der Algorithmus des Simulated Annealing ist in folgendem Diagramm gegeben:
Setzen Sie den Algorithmus in Matlab um! Nutzen Sie für die lokale Minimumsuche die Funktion fmincon()und beschränken Sie diese auf das Intervall [−3, 3]! Setzen Sie die Option display auf none, um die Ausgabe zu unterdrücken. (10 P)
Führen Sie Ihr Programm aus und prüfen Sie, ob das globale Minimum gefunden wurde, indem Sie das Ergebnis aus Teilaufgabe d) in figure(1) plotten (zusätzlich zur bereits geplotteten Funktion f(x))! (2 P)
Setze Startwerte: xk := -1
zähle t von 10 bis 0, Schrittweite -1
Finde lokales Minimum:
xkp1 := min ( g(x) ), Startwert xk
Addiere Zufallswert zur Lösung:
xk := xkp1 + randn * t * 0,1
e)
Hinweis: Das Verfahren arbeitet Zufallsbasiert, es kann also sein, dass Sie ihr Programm mehrmals aufrufen müssen, um das erwartete Verhalten zu sehen.
5
Aufgabe 5: Lineare Programme (16 P)
Eine Firma stellt zwei Typen von Zahnrädern her, die mit Z1 bezeichneten Stirnräder und die mit Z2 bezeichneten Kegelräder. Der Gewinn pro Stück beträgt bei Typ Z1 9,50 € und bei Typ Z2 11,20 €. Der Gesamtgewinn G kann daher mit der Formel
𝐺 = 9.5⋅𝑥1 +11.2⋅𝑥2
berechnet werden, wobei 𝑥1 die Anzahl der Zahnräder vom Typ Z1 und 𝑥2 die Anzahl der Zahnräder
vom Typ Z2 beschreibt.
Zur Produktion stehen die Fräsmaschinen FM1 und FM2 zur Verfügung. Da beide Maschinen auch in anderen Projekten im Einsatz sind, steht FM1 nur 240 Stunden und FM2 nur 194 Stunden pro Monat zur Verfügung. Die Herstellung eines Zahnrads vom Typ Z1 erfordert 2 Arbeitsstunden an FM1 und 1 Arbeitsstunde an FM2. Bei der Herstellung eines Zahnrads des Typs Z2 sind es 1,5 Arbeitsstunden an FM1 und 3 Arbeitsstunden an FM2. Aufgrund eines knappen Rohstoffbestandes können maximal 90 Zahnräder vom Typ Z1 hergestellt 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:
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)
unter den Nebenbedingungen:
max(9.5 ⋅ 𝑥1 + 11.2 ⋅ 𝑥2)
2 ⋅ 𝑥1 + 1.5 ⋅ 𝑥2 ≤ 240
1 ⋅ 𝑥1 + 3 ⋅ 𝑥2 ≤ 194
0≤𝑥1 ≤90, 0≤𝑥2
Zur Lösung des Optimierungsproblems soll die Funktion linprog eingesetzt werden, mit der Minimierungsprobleme mit linearer Kostenfunktion gelöst werden können.
a) Definieren Sie anhand der beschriebenen Modellierung einen Vektor f mit den linearen Koeffizienten der Kostenfunktion, mit dem Sie den Gewinn maximieren können. (2 P)
b) Definieren Sie Matrix A und Vektor b zur Formulierung der Nebenbedingungen in Standardform. (4 P)
c) Definieren Sie je einen Vektor für die obere und einen Vektor für die untere Grenze der Optimierungsvariablen 𝑥1 und 𝑥2.(2 P)
d) Lösen Sie das Maximierungsproblem, indem Sie die Funktion linprog mit den in Teilaufgaben a) – c) ermittelten Werten aufrufen. (Die Lösung muss nicht ganzzahlig sein!) (5 P)
e) Geben Sie die optimale Anzahl für 𝑥1 und 𝑥2 sowie den Gewinn im Command Window aus. (3 P)
6