2 logische Indizierung, Kontrollstrukturen, Funk

Werbung
TU München
April 2009
2. Übungsblatt
Ferienkurs Matlab
Boris von Loesch
2
http://ferienkurse.ma.tum.de/
logische Indizierung, Kontrollstrukturen, Funktionen
Aufgabe 2.1
Erzeugen Sie eine 40 × 40-Matrix mit Zufallswerten zwischen −0.5 und 2.
Finden Sie mit einem Befehl raus,
a) ob, alle Einträge positiv sind,
b) ob alle Spalten negative Einträge haben,
c) ob ein Eintrag gröÿer als 1.99 ist.
d) die Nummern der Zeilen, die einen negativen und einen Eintrag gröÿer
als 1.99 hat.
Aufgabe 2.2
Permutationen auf {1 . . . n} können als Permutationsmatrix oder in folgender
Form dargestellt werden:
σ=
1
2
···
n
σ(1) σ(2) · · · σ(n)
Im letzteren Fall reicht es, die zweite Zeile zu speichern. Finden Sie Wege, in
MATLAB die eine in die andere Form umzuwandeln und umgekehrt.


0 0 1
Z.B. P = 1 0 0 korrespondiert zu s = (2, 3, 1)
0 1 0

1

Aufgabe 2.3
0
Es sei die Matrix A = 
4
16
25
1 1 1
1 0 2
3 8 9
4 28 1
3 4 5

1
0

1
 gegeben.
2
6
T
a) Lösen Sie das lineare Gleichungssystem Ax = b für b = 25 25 134 166 147 .


19 25 26 19 18
 20 20 23 20 17 



b) Lösen Sie Ax = B mit B = 
111 139 166 105 115
118 206 294 90 148
128 118 149 90 108
Überprüfen Sie die Lösungen!
TU München
April 2009
2. Übungsblatt
Ferienkurs Matlab
Boris von Loesch
http://ferienkurse.ma.tum.de/

1 3 5
1 1 2
Aufgabe 2.4


T

Es sei die Matrix A = 
1 −1 0 und b = (0.9, 0.7, 0.5, 20, 4) gegeben.
1 −3 2
1 0 5
Bestimmen sie x so, dass kAx − bk2 minimal ist, einmal mit Hilfe des Backslash Operators, einmal durch Lösen der Normalengleichung (AT Ax = AT b).

Stimmen die Lösungen überein?
Aufgabe 2.5
Erzeugen Sie die Hilbertmatrix H der Dimension 10 × 10 und den Vektor b
mit den Zahlen von 1 bis 10.
Lösen Sie das lineare Gleichungssystem Hx = b mit folgenden Methoden:
a) Explizit mit der inversen Hilbertmatrix (invhilb(10)),
b) mit dem Backslash Operator,
c) durch eine LR-Zerlegung mit Pivotierung ([L,R,P]=lu(H))
d) durch eine QR-Zerlegung.
Vergleichen Sie die Ergebnisse, wo ist der Fehler in der 2-Norm am gröÿten?
Welchen Algorithmus verwendet der Backslash Operator intern? (Tipp: Hilfe
zu mldivide)
Ferienkurs Matlab
Boris von Loesch
TU München
April 2009
2. Übungsblatt
http://ferienkurse.ma.tum.de/
Aufgabe 2.6
x sei ein Zeilenvektor (z.B. x=1:10). Eliminieren Sie die for-Schleife:
a) n=0;
for i=1:length(x)
n = n + x(i)^2
end
b) y = zeros(1,length(x));
y(1) = x(1) + 2*x(end);
for i=2:length(x);
y(i) = x(i) + 2*x(i-1);
end
c) max_err = 0;
n=100;
f0 = sin(pi/4); f1 = sin(1);
for x=linspace(0,1,n),
p=x*f1+(1-x)*f0;
err=abs(sin(x)-p);
max_err=max(max_err,err);
end
Überzeugen Sie sich, dass Ihre Ergebnisse stimmen, indem Sie die Rückgabe
Ihrer Lösung mit dem angegeben Programm vergleichen.
Aufgabe 2.7
Erzeugen Sie mit dem inline Befehl die Funktion (x2 · y 2 )/2. Funktioniert
die Funktion auch, wenn man einen Vektor als Argument übergibt? Ändern
Sie Ihre Funktion ggf. ab.
Was macht der Befehl vectorize.
Aufgabe 2.8
Erstellen Sie eine Funktion f, die für die Eingabe x ∈ R+ den Mittelwert aus
x und 2/x berechnet.
Speichern Sie in y eine beliebige positive Zahl. Konvergiert die Iteration
y = f(y)? Implementieren Sie eine while-Schleife, die bei Konvergenz abbricht (|y − f (y)| ≤ 10−16 ).
Haben Sie eine Idee was das Ergebnis ist?
Aufgabe 2.9
Bearbeiten Sie Aufgabe 1.25, wenn Sie es noch nicht gemacht haben.
TU München
April 2009
2. Übungsblatt
Ferienkurs Matlab
Boris von Loesch
http://ferienkurse.ma.tum.de/
Aufgabe 2.10
Schreiben Sie eine Funktion H=hilb_gen(n), die eine n x n Hilbertmatrix
erzeugt. Verwenden sie möglichst wenig for-Schleifen. Hilbertmatrizen sind
deniert als

Hn =
1
i+j−1
i,j=1,··· ,n
1
1
2
=  ..
.
1
n
1
2
1
3
···
···
1
n
1
n+1
1
n+1
···
1
2n−1
..
.



.. 
. 
Überprüfen sie für n = 1, · · · , 5, ob ihre eben geschrieben Funktion die gleiche
Matrix ausgibt wie hilb(n).
Aufgabe 2.11
Finden Sie einen möglichst kurzen Weg, der Diagonalen einer Matrix den
Wert 0 zuzuweisen. Schreiben Sie eine Funktion zero_diag, die als Eingabe
eine Matrix erhält und die wie oben veränderte Matrix zurückgibt.
Erweitern Sie diese Funktion um einen zweiten Parameter k , der angeben soll,
welche Diagonale überschrieben wird (z.B. k = −1 für die Subdiagonale).
Testen Sie ihre Funktion an einer zufälligen 5 × 5-Matrix und einer 3 × 6Matrix.
Aufgabe 2.12
Schreiben Sie eine Funktion, die als Parameter eine Funktionsreferenz, eine
natürliche Zahl n und zwei double-Werte a, b hat. Sie soll nun die Funktionsreferenz an n gleich weit voneinander entfernten Stellen, beginnend bei
a bis zur Obergrenze b, auswerten und die Ergebnisse in einem Vektor y
speichern, der dann zurückgegeben wird. Testen Sie ihre Funktion mit der
x2
Funktionsreferenz √12π e− 2 , n = 60, a = −3, b = 3.
Aufgabe 2.13
Implementieren Sie eine eigene Variante der MATLAB-Funktion primes.
Diese Funktion berechnet die Primzahlen von 2 bis n. Dabei soll weder die
Matlab-Funtion primes noch die Funktion isprime verwendet werden.
>> myprimes(11)
ans =
2
3
5
7
11
Verwenden Sie dazu das Sieb des Eratosthenes :
Legen Sie einen Vektor mit allen Zahlen von 2 bis n an. Streichen bzw.
markieren Sie nun alle Vielfachen der ersten Zahl des Vektors. Wiederholen
Sie das Vorgehen mit der nächsten nicht markierten Zahl im Vektor und so
fort. Brechen Sie ab, wenn Sie die letzte Zahl erreicht haben.
Herunterladen