Sie sind auf Seite 1von 2

Numerische Mathematik (EI) (MA9410)

Übungsblatt 2
O. Junge, D. Karrasch 15. Mai 2017

Übung 5
Wir betrachten für |x|  1 folgende zwei Ausdrücke:
log(1 + x)
log(x + 1), und · x,
(1 + x) − 1
sowie ihre Unterteilung in Zwischenschritte:
h g
x −−−−→ 1 + x =: a −−−−→ log(a)
 
h 1 + x =: a g log(a)
x −−−−→ −−−−→ b.
x =: b a−1
(a) Begründen Sie, warum der erste Algorithmus instabil ist.

(b) Plotten Sie Graphen der beiden Ausdrücke für sehr kleine x. In Julia können
Sie wie folgt vorgehen:

using Pkg
Pkg.add("Plots") # bzw. wechseln Sie in den pkg-mode via ]
# und führen Sie add Plots aus
using Plots
plot(xWerte, yWerte)

(c) Geben Sie ein heuristisches Argument dafür, warum der zweite Algorithmus
stabil ist. [Tipp: Nutzen Sie die Taylor-Entwicklung der log-Funktion.]

Übung 6

(a) Schreiben Sie eine Funktion H(n::Int), die für gegebenes n die zugehörige
Hilbertmatrix erzeugt. Schreiben Sie weiterhin eine Funktion Hinv(n::Int),
die die zugehörige Inverse erzeugt.

(b) Vergleichen Sie für einen geeignet dimensionierten Zufallsvektor b (oder wahl-
weise einen deterministischen Vektor) (und verschiedene n) folgende Lösungskan-
didaten für das Gleichungssystem Hx = b: H(n)\b, Hinv(n)*b und
inv(H(n))*b. Stellen Sie vorher Vermutungen auf, welche Lösungen iden-
tisch sein könnten oder müssten und überprüfen Sie Ihre Vermutungen.

(c) Fehleranalyse: Bestimmen Sie für eine beliebige rechte Seite b den Rückwärts-
fehler. Was ist der Vorwärtsfehler? Wievielen Stellen der numerischen Lösung
von Hx = b können Sie vertrauen?

(d) Ist der Lösungsalgorithmus anhand der vorhergehenden Analyse (rückwärts-


)stabil?
Programierübung: Vigenère-Chiffre (f.k.a. „Cäsar-Pi-Verschlüsselung”)
Implementieren Sie folgende Variante der Cäsar-Verschlüsselung. Nehmen Sie einen
Text der Länge n, die ersten n (Nachkomma-)Stellen von π, und verschieben jeden
einzelnen Buchstaben im zyklischen Alphabet um die Zahl an Schritten wie in der
Dezimaldarstellung von π an der Stelle auftritt. Beispiel: der erste Buchstabe wird
um 3 nach rechts verschoben, der zweite um 1, der dritte um 4 usw.
Wie wäre es mit einem Performance-Wettbewerb? Zur Laufzeitmessung von Code
empfehle ich das BenchmarkTools.jl-Paket.
Hilfestellungen:

• Textketten/Strings gibt man über Anführungszeichen ein: text = "Hallo".

• Strings sind indizierbar : man kann sie indizieren wie einen Array (text[2]),
allerdings nicht „komponentenweise” beschreiben (text[2] = "v" geht nicht!).

• Strings sind iterierbar : man kann durch sie direkt durchlaufen, ohne den
Umweg der Indizierung. Probieren Sie:

for letter in text


println(letter)
end

• Für Zahlen mit mehr als 16 Stellen gibt es sogenannte BigFloats. Um genü-
gend Stellen von π zu erfragen, nutzen Sie die Funktionen setprecision und
big(pi), siehe Online-Hilfe.