12. Übungsblatt zur Programmierung für Mathematiker

Werbung
FB MI - Mathematik
Univ.-Prof. Dr. Thomas Schuster
M.Sc. Dipl.-Phys. Anne Wald
Sommersemester 2017
12. Übungsblatt zur Programmierung für
Mathematiker
Aufgabe 1 Makros
4 Punkte
a) Schreiben Sie Makros REAL, IMAG, SETZE_REAL und SETZE_IMAG, mit denen Sie auf Realbzw. Imaginärteil komplexer Zahlen lesend bzw. schreibend zugreifen können. Die komplexen Zahlen sollen analog zum Skript als Struktur definiert werden.
b) Schreiben Sie ein Makro zur Ausgabe komplexer Zahlen am Bildschirm.
Hinweis: Aufgabe 2.
c) Schreiben Sie die Funktionen newComplexPolar() und complexProduct() aus dem Skript
als Makros, wobei jedoch die Struktur selbst, statt ein Zeiger auf diese durch die Makros
zurückgegeben werden soll.
d) Testen Sie Ihre Makros in einem Hauptprogramm, indem Sie zunächst eine komplexe Zahl
definieren und diese überschreiben, eine zweite mit Hilfe des Makros NEW_COMPLEX_POLAR
definieren und anschließend das Produkt dieser beiden Zahlen berechnen. Geben Sie die
komplexen Zahlen am Bildschirm aus.
Aufgabe 2 Makros
Welches der folgenden Makros liefert beim Aufruf
2 Punkte
PRINT_COMPLEX("Zahl %d: ", z1, 1);
die Ausgabe
Zahl 1:
1.000000-2.000000i,
wenn z1 eine komplexe Zahl ist mit Realteil 1.0 und Imaginärteil -2.0?
a)
#define PRINT_COMPLEX(_FMT_STR, Z, ...) \
printf(_FMT_STR "%lf%+lfi\n", REAL((Z)), IMAG((Z)), ##__VA_ARGS__)
1
b)
#define PRINT_COMPLEX(_FMT_STR, Z, ...) \
printf(_FMT_STR "%lf%+lfi\n", #__VA_ARGS__, REAL((Z)), IMAG((Z)))
c)
#define PRINT_COMPLEX(_FMT_STR, Z, ...) \
printf(_FMT_STR "%lf%+lfi\n", ##__VA_ARGS__, REAL((Z)), IMAG((Z)))
d)
#define PRINT_COMPLEX(_FMT_STR, Z, ...) \
printf("%lf%+lfi\n", ##__VA_ARGS__, REAL((Z)), IMAG((Z)))
Aufgabe 3 Vektoriteration in MATLAB
4 Punkte
Das Ziel bei der Vektoriteration ist die numerische Bestimmung des betragsmäßig größten Eigenwertes λm einer Matrix A ∈ Rn×n und eines zugehörigen Eigenvektors vm . Sei ein Startwert
x(0) ∈ Rn gegeben. Für k = 0, 1, ..., kmax iteriert man nun
u(k+1) := Ax(k)
sowie
x
(k+1)
:=
u(k+1)
(k+1)
(k+1)
(k)
,
λ
:=
uj2
uj1
(k)
,
xj1
wobei die Indizes j1 , j2 ∈ {1, ..., n} so bestimmt werden, dass
(k) (k) xj1 = x ∞
,
(k+1) (k+1) uj2
= u
∞
.
Dann gilt
lim λ(k) = λm ,
k→∞
lim x(k) = β · vm .
k→∞
für ein β ∈ R. Implementieren Sie die Iteration in Matlab mithilfe der Matrix-Funktionen sum,
max, abs, norm etc. Testen Sie Ihr Programm für die Matrix

3
2

A=
1
1
2
2
1
0

1 1
1 0


4 3
3 4.
Verwenden Sie z.B. den Startwert x(0) = (1, 1, 1, 1)T sowie kmax = 15 und vergleichen Sie das
Ergebnis der Iteration mit dem Ergebnis der Matlab-Funktion eig.
Abgabe: Dienstag, 18.07.2017 bis 16.00 Uhr per Mail an [email protected]
2
Herunterladen