Praktikum zu Vorlesung Modellreduktion parametrisierter Systeme

Mario Ohlberger, Felix Schindler, Tim Keil

Blatt 06, 29.05.2019

  • Aktivieren Sie wie gewohnt ihre Arbeitsumgebung und starten Sie den Jupyter Notebook server, siehe zB Blatt 1, Aufgabe 0.

  • Erstellen Sie ein neues Python 3 Notebook oder laden Sie dieses von der Homepage herunter.

  • Importieren Sie numpy und pymor.basic und machen Sie matplotlib für das Notebook nutzbar.

Aufgabe 1: Clean up

  1. Erstellen Sie ein Modul problems, in dem Sie die Methoden problem_B3_A1, problem_B3_A2, problem_B3_A3_parametric, problem_B4_A1 und problem_B4_A1_parametric implementieren. Diese sollen die in den jeweiligen Aufgaben von Blatt 3 und Blatt 4 definierten analytischen Probleme zurückgeben. Importieren Sie dieses Modul.
  1. Testen Sie ihre implementierung indem Sie jedes Problem einmal mit einem Diameter von 1/100 diskretisieren und visualisieren.
  1. Erstellen Sie mit Hilfe von Blatt 5 ein Modul algorithms mit den Methoden
    • orthogonal_projection(U , basis, product = None, basis_is_orthogonal=False, return_projection_matrix=False)
    • greedy_approximation(U, basis_size, rtol=0, product=None).

Der greedy_algorithm soll neben der genereierten Basis auch die Folge der im Algorithmus berechneten Projektionsfehler zurückgeben und zusäzlich abbrechen, sobald der relative Approximationsfehler unter die durch rtol gegebene Schranke fällt.
Tipp: Validieren Sie ihren Code indem Sie Blatt 5 Aufgabe 1 zum Beispiel mit problem_B4_A1_parametric wiederholen.

Aufgabe 2

Im Folgenden benötigen wir ein weiteres Problem problem_B5_A2_parametric bei dem die Effekte der unterschiedlichen Basisgenerierungsverfahren am besten beobachtet werden können. Benutzen Sie hierfür problem_B3_A3_parametric aber statten Sie zusätlich die Diffusion mit einem Parameter $d_{\mu}$ (anstatt 0.001) aus. Passen Sie auch ihren parameter_space entsprechend an (Der Diffusionsparameter sollte in einer range von [0.0001,1] liegen).

  1. Wiederholen Sie die Berechnungen von Blatt 5 Aufgabe 1, wobei sie zusätzlich die Basisvektoren in U mittels pymor.algorithms.gram_schmidt mit dem Gram-Schmidt-Verfahren orthogonalisieren. Vergleichen Sie die Ergebnisse mit Blatt 5 Aufgabe 1.
  1. Erweitern Sie auch greedy_approximation, sodass in jeder Iteration der neu gewählte Basisvektor zur bestehenden Basis ortogonalisiert wird. Nutzen Sie hierzu den offset-Parameter der gram_schmidt-Methode. Wiederholen Sie die Experimente von Blatt 5 Aufgabe 2 und vergleichen Sie.