Beruflich Dokumente
Kultur Dokumente
Ulrich Rüde
Lehrstuhl für Systemsimulation
FAU Erlangen-Nürnberg
Name, Vorname:
Geburtsdatum:
Matrikelnummer:
Studienfach:
Raum, Sitzplatz:
Aufgabe 1 2 3 4 5 6 7 8 9
Max. Punktzahl 10 12 11 12 7 9 10 7 12
Erreichte Punkte
Gesamtpunktzahl
Note
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 2
Organisatorische Hinweise
Die folgenden Hinweise bitte aufmerksam lesen und die Kenntnisnahme durch Unterschrift bestätigen!
• Bitte legen Sie Ihren Studentenausweis und einen Lichtbildausweis zur Personenkontrolle bereit.
• Hilfsmittel (außer Schreibmaterial und Lineal) sind nicht zugelassen. Elektronische Geräte sind auszu-
schalten.
• Fragen zu den Prüfungsaufgaben werden grundsätzlich nicht beantwortet.
• Die Lösung einer Aufgabe muss auf das jeweilige Aufgabenblatt geschrieben werden. Sollte der Platz
nicht reichen, verwenden Sie die Zusatzseiten am Ende der Klausur. Fügen Sie einen Hinweis in Ihre
Lösung ein, wenn die Lösung auf den Zusatzseiten fortgesetzt wurde und beschriften Sie diese mit der
richtigen Aufgabennummer.
• Es können durch die Aufsicht zusätzlich Seiten eingeheftet werden, sollte mehr Platz benötigt werden.
Bitte beschriften Sie den Kopf dieser Seiten mit Ihrem Namen und Matrikelnummer. Streichen Sie alles
was nicht verwendet werden soll doppelt aus.
• Die Programmieraufgaben sind in der Programmiersprache Python 3 zu bearbeiten.
• Bei allen Programieraufgaben kann angenommen werden, dass numpy als np importiert worden ist.
• Wenn Sie die Prüfung aus gesundheitlichen Gründen abbrechen müssen, so muss Ihre Prüfungsunfähig-
keit durch eine Untersuchung bei einem Vertrauensarzt nachgewiesen werden. Melden Sie sich bei der
Aufsicht und lassen Sie sich das entsprechende Formular aushändigen.
• Die Bearbeitungszeit beträgt 90 Minuten.
• Überprüfen Sie die Prüfungsaufgaben auf Vollständigkeit (20 Seiten inklusive Deckblatt) und einwand-
freies Druckbild.
• Vergessen Sie nicht, auf dem Deckblatt die Angaben zur Person einzutragen und die Erklärungen auf
dieser Seite zu unterschreiben.
• Viel Erfolg!
Erklärungen
Durch meine Unterschrift bestätige ich den Empfang der vollständigen Klausurunterlagen und die Kenntnis-
nahme der obigen Informationen.
• In der Vorlesung wurden zwei verschiedene Klassen von Verfahren zum Lösen von linearen Gleichungs-
sytemen behandelt. Nennen Sie diese!
• Aus welchen beide Teilen, außer dem Vorzeichen, besteht eine IEEE 754 Gleitpunktzahl?
• Nennen Sie eine Polynom-basis die sich für die Interpolation eignet.
b) Geben Sie eine beliebige 2x2 Matrix an, die keine 0 Einträge enthält und jeweils die folgende Eigenschaft
erfüllt:
∗ ∗
b) Gegen ist eine Matrix B und eine Rotationsmatrix S, sodass S · B = gilt.
0 ∗
6 5 0.6 0.8
B= ,S =
8 5 −0.8 0.6
Bestimmen Sie die QR-Zerlegung der Matrix B indem Sie die Rotationsmatrix S verwenden.
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 5
b) Lagrange Polynome Geben Sie die drei Lagrangepolynome L1 (x), L2 (x), L3 (x) zu den Stützstellen
x1 = −0.5, x2 = 0, x3 = 0.5 an. Vereinfachen Sie die Darstellung bis zu einer Polynomdarstellung (ax2 +
bx + c).
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 7
c) Bilineare Interpolation Gegeben ist ein rechteckiges Gebiet, das in x-Richtung durch x1 und x2 mit
x1 < x2 und in y-Richtung durch y1 und y2 mit y1 < y2 begrenzt ist. An den Ecken sind folgende Werte
gegeben:
Hinweis: Vergessen Sie nicht, Ihren Code richtig einzurücken! Orientieren Sie sich dabei an den gepunkteten
Hilfslinien.
• Beispiel: Prüfen, ob eine Zahl größer 5 ist.
def bigger_than_five(n):
return n > 5
• Eine Kopie der Liste L1 zurückgeben, wobei nur die Elemente der Liste L2 vorkommen dürfen.
• Den Median einer Liste L zurückgeben. Bei einer geraden Anzahl an Elementen wird nicht Interpoliert,
sondern das kleinere genommen. Hinweis: Es handelt sich um eine Liste von Zahlen. Median ist nicht
der Mittelwert.
def median_low(L):
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 9
• Den Index des Elements e in einer Liste L zurück geben. Falls das Elemente e nicht in der Liste L
vorkommt, soll −1 zurückgegeben werden.
Ausgabe:
import numpy as np
A = np.ones((2,2))
print((A @ A)[0,0])
Ausgabe:
l1 = [1,2,3,4]
l2 = l1.copy()
print(l1 is l2)
Ausgabe:
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 10
c) BCRS Beschreiben Sie das BCRS Format und dessen Vorteile im Vergleich zum CRS Format.
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 11
b) Notwendige Bedingung für Optimalität: Für die Funktion f werden nun lokale Extremstellen
x ∈ Rn gesucht. Auch hierfür kann das Newtonverfahren verwendet werden. Welcher Zusammenhang wird
dabei genutzt?
d) Partielle Ableitungen: Geben Sie für den Fall n = 3, d.h. f : [x y z]T 7→ f (x, y, z), J f und H f mit
allen Matrixeinträgen an.
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 12
a) Gleichungssystem Aufstellen Sie erinnern sich daran, dass die Position aller Punkte auf der Membran
durch die Poisson-Gleichung −∆u = f beschrieben wird, und dass man die Poisson-Gleichung mit folgender
Formel diskretisieren kann:
Die Seiten der Membran sind bei x = 2 fixiert, d.h., x0 = x4 = 2. Durch den Magneten wird in der Mitte der
Membran eine Kraft mit Stärke 4 ausgeübt, d.h., f1 = f3 = 0, f2 = 4. Stellen Sie mit diesen Informationen
das Gleichungssystem auf, das die Auslenkung der Membran beschreibt.
x1
x2 =
x3
b) Konvergenz Sie beschließen zur Lösung eines ähnlichen Problems den SOR Algorithmus zu verwenden.
Für welche Werte des Relaxationsparameter ω ist die Konvergenz des SOR-Verfahrens garantiert, wenn A
eine positiv definite Matrix ist?
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 13
c) Jacobi-Verfahren Sie wollen nun das Jacobi-Verfahren auf folgendes Gleichungssystem anwenden:
−4 2 0 x1 2
2 −2 1 x2 = 3
0 2 −1 x3 −5
Führen Sie zwei Iterationen des Jacobi-Verfahrens mit dem Startwert x0 = [x1 , x2 , x3 ]T = [1, 1, 1]T durch.
Geben Sie die resultierenden Vektoren x1 und x2 an.
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 14
a) Kompression Nennen Sie zwei Verfahren außer der SVD, die sich ebenfalls zur Bildkompression eignen.
b) SVD Kompression Schreiben Sie eine Funktion compress die ein 2D-Numpy-Array picture mithilfe
von k-Rank Approximation komprimiert. Die Funktion compress gibt drei Objekte zurück: Die kompri-
mierten Arrays u, s, vt.
Die Beispielgrafiken zeigen die Anwendung der Kompression und deren erneuten Zusammensetzung (i.e.
from_compress(*compress(picture, k))) für verschiedene Werte von k.
Die SVD einer Matrix A = U ΣV H wird mit u, s, vh = np.linalg.svd(A) berechnet und ist schon vor-
gegeben. Dabei sind u und vh die unitären Matrizen als 2D-Numpy-Arrays. s ist ein 1D-Numpy-Array, das
aus den Singulärwerten besteht.
Das Array des schwarzweißen Bildes ist stets n × n groß.
def compress(picture, k)
u, s, vh = np.linalg.svd(picture)
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
c) Bilderzeugung aus komprimierten Daten Schreiben Sie eine Funktion from_compress, welche die
k-Rank SVD Approximation u, s, vh zu einem 2D-Numpy-Array (e.g. Bild) transformiert. Das so trans-
formierte Bild hat Dabei die gleiche Größe wie das nicht komprimierte Ursprungsbild.
Hinweis: Nutzen Sie np.diag um as einem 1D-Numpy-Array eine Diagonalmatrix zu erzeugen.
a) Game of Life Schreiben Sie eine Funktion next_step, die für ein grid den nächsten Zeitschritt des
Zellulären Automaten ”Game of Life“ bestimmt. Die Randbedingungen seien dabei periodisch, d.h., eine Zelle
am oberen Rand hat als oberen Nachbarn die zugehörige Zelle am unteren Rand. Die anderen drei Randfälle
seien analog.
Die Regeln:
1. Eine tote Zelle mit genau drei lebendigen Nachbarn erwacht zum Leben (d.h., wird auf den Wert 1
gesetzt).
2. Eine lebendige Zelle mit weniger als zwei lebendigen Nachbarn stirbt (d.h., wird auf den Wert 0 gesetzt).
3. Eine lebendige Zelle mit zwei oder drei lebendigen Nachbarn lebt weiter.
4. Eine lebendige Zelle mit mehr als drei lebenden Nachbarn stirbt.
def next_step(grid):
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 17
b) Periodic Life Schreiben Sie eine Funktion is_periodic, die für ein grid und einer Iterationsanzahlt N
bestimmt, ob das grid innerhalb der N Schritten in sein Initialzustand zurückkehrt.
Hinweis: np.array_equal(a1, a2) gibt zurück, ob Zwei Numpy-Arrays a1, a2 gleich sind.
c) Static Life Schreiben Sie eine Funktion is_static, die für ein grid bestimmt, ob das grid statisch
bleibt, i.e. sich nicht unter der Anwendung von ”Game of Life“ verändert.
def is_static(grid):
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
.
. .
. .
. .
. .
.
. . . . .
Klausur: Algorithmik kontinuierlicher Systeme, 23. Juli 2021 18