Blatt2 - Universität Ulm

Prof. Dr. Dirk Lebiedz
Dipl.-Math. Jonas unger
Dipl.-Math. oec. Klaus Stolle
Universität Ulm
Institut für Numerische Mathematik
Wintersemester 2015/16
Numerische Lineare Algebra - Übungsblatt 2
Einführung
Die ersten Schritte:
1. Tippen Sie in der Benutzeroberfläche a=1.2e3 ein. Dadurch wird eine 1 × 1-Matrix namens a und mit dem Eintrag
1.2e3 angelegt. Diese “Matrix” kann man sich wieder ansehen, indem man einfach a eingibt. In Matlab müssen
Variablen nicht deklariert werden.
2. Tippen Sie nun a=1.3; ein. Was ist der Unterschied zu vorher? Welchen Wert hat die Variable a nun? Das Semikolon
am Ende unterdrückt die Bildschirmausgabe.
3. Tippen Sie nun z.B. b=[1, 2 , 3; 4 5 6 ] ein. Matrizen werden in eckige Klammern eingeschlossen. Das Komma
trennt dabei die Spalten, das Semikolon die Zeilen. Das Komma kann auch durch Leerzeichen ersetzt werden.
4. Greifen Sie mir b(2,1) auf das erste Element in der zweiten Spalte zu.
5. Was erhält man durch size(b)?
6. Transponieren Sie b durch die Operation c=b’.
7. Erzeugen Sie einen “liegenden” Vektor (eine 1 × 20-Matrix) [1,2,...,20] durch Eingabe von d=[1:20] und einen
Vektor [1,3,5,...,19] durch Eingabe von d=[1:2:19]. Wie kann man die Vektoren zu “stehenden” Vektoren
machen?
8. Was erhält man mit length(d)?
9. Erzeugen Sie einen Vektor t=[0:0.1:10].
10. Was erzeugt f=sin(t)? Viele mathematische Funktionen (exp, log, abs, sqrt, sign, round, real, conj,
...) wirken einzeln auf die Vektor-/Matrixelemente.
11. Plotten Sie den Sinus, indem Sie plot(t,f) eingeben. Was erzeugt plot([0,1,2], [1,-1,1])?
12. Spezielle Matrizen kann man erzeugen durch die Kommandos zeros(5,2), ones(5,2), eye(5,2), rand(5,2).
Was erzeugen diese jeweils?
13. Tippen Sie help rand ein. Mit help können Sie jederzeit Hilfe über eine beliebige Funktion bekommen.
14. Erzeugen Sie mit A=rand(10,10) eine Zufallsmatrix. Mit d=diag(A) bekommen Sie die Diagonalelemente der
Matrix als Vektor. Der Befehl diag(d) erzeugt wiederum eine Matrix mit den Diagonalelementen aus d. Also: diag
holt entweder aus einer Matrix die Diagonalelemente heraus oder macht aus einem Vektor eine Diagonalmatrix.
15. Rechteckige Untermatrizen bekommt man z.B. durch A(1:3,1:2) aus einer Matrix heraus. Was kommt mit
A(3:end,1) heraus, was mit A(:,1)?
16. Gewöhnliche Matrixoperationen haben in Matlab die einfachst mögliche Form: Für A=[1,2; 3, 4] und B=[0,
1; 1, 1] kann man z.B. einfach A+B, 10*A, A*B, A-B, oder A^2 ausführen.
17. Sollen Multiplikationen, Divisionen oder Potenzen elementweise, also einzeln für alle einzelnen Matrixeinträge
berechnet werden, so setzt man einen Punkt vor den Operator. Testen Sie A.*B, B./A und A.^2.
18. Definieren Sie den Vektor t=[0,1,2]’ und berechnen Sie die sogenannte Vandermonde-Matrix V=[t.^0, t.^1,
t.^2].
19. Speichern Sie diesen Vektor und die Matrix im aktuellen Verzeichnis ab, indem Sie save ’filename’ t V eingeben.
Strings werden in Hochkommata eingeschlossen.
20. Der Befehl clear löscht alle von Ihnen bis jetzt erzeugten Variablen.
21. Mit load(’filename’) können Sie die Daten wieder laden.
22. Wiederholungsaufgabe: Erzeugen Sie auf möglichst einfache Weise (unter Zuhilfenahme des Kommandos ones
und des dyadischen Produktes x*y’ zweier stehender Vektoren x,y) die 20 × 10-Matrizen




1 2 3 · · · 10
1 2 3 · · · 10 








1 2 3 · · · 10

 2 4 6 · · · 20 

A= . . . .
und B =
.
.
.
.
.
.
.. .. ..
. . .. 
..
..
..
..
.. 














1 2 3 · · · 10
20 40 60 · · · 200
und sehen Sie sich die Diagonalelemente aus B an.
Matlab für die Mathematik:
Matlab stellt viele Basisroutinen aus der numerischen linearen Algebra fertig zur Verfügung: Z.B. zur Inversenberechnung inv(A) oder zur LR-Zerlegung (engl.: LU ), mit der Sie lineare Gleichungssysteme lösen (Stichwort: GaußElimination) können. Wenn dabei mehrere Outputs herauskommen, wie z.B. bei der LU -Zerlegung, schreibt man sie
in eckigen Klammern auf die linke Seite, also [L,U]=lu(A). Die Reihenfolge der Outputs kann man durch help lu
etc. erfahren.
1. Führen Sie eine LR-Zerlegung der Zufallsmatrix A=rand(5,5) mit [L,U]=lu(A) durch und überlegen Sie sich wie
man das zur Lösung eines linearen Gleichungssystems verwenden kann.
2. Praktisch sind auch die folgenden Vektorfunktionen: max(v), min(v), sum(v), sort(v), mean(v).
3. In Matlab kann ein Plot einfach über das Menü abgespeichert werden.
Programmierung in Matlab:
Matlab bietet die Möglichkeit, eigene Skripte und Funktionen zu definieren.
1. Öffnen Sie einen Editor Ihrer Wahl, z.B. durch Eingabe von emacs & in der Shell und öffnen Sie ein Dokument names
myscript.m. Geben Sie zwei beliebige Matlab-Zeilen ein und speichern Sie das Dokument in Ihrem Verzeichnis.
Falls Sie mit Emacs nicht vertraut sind: Gehen Sie auf Files dann Open File und geben Sie den Namen
myscript.m ein. Emacs kann man zwar durch das Menü bedienen, aber wesentlich schneller wird es, wenn man die
Abkürzungen benutzt. C-v heißt, dass man CONTROL und v gleichzeitig drücken soll und M-v meint die ALT Taste
und v (bzw., wenn dies nicht funktioniert, die ESCAPE Taste und danach v). Wenn Kombinationen hintereinander
stehen, drückt man die Kombination einfach nacheinander. Ein Dokument speicher man durch C-x C-s (save) und
durch Drücken von C-x C-c verlässt man EMACS wieder. Durch C-h t kommt man in ein Tutorial.
2. Gehen Sie wieder in die Matlab Oberfläche und starten Sie das Skript, indem Sie einfach myscript eingeben.
Es passiert genau dasselbe, als wenn Sie die Zeilen direkt in die Matlab-Shell eingetippt hätten. Dies ist eine
Möglichkeit, häufig wiederholte Schritte abzuspeichern.
3. Im Gegensatz zu einem Skript hat einne Matlab-Funktion lokale, abgekapselte Variablen. Matlab-Funktionen starten
immer mit einer Zeile function [output1, output2, ...]=myfunction(input1,input2,...). Dabei sind alle
Inputs und Outputs Matrizen und die Outputs müssen irgendwo im Porgrammcode definiert werden. Der Filename
muss mit dem Funktionsnamen übereinstimmen, hier wäre es also z.B. myfunction.m und es kann immer nur eine
Funktion in einem File stehen.
4. Schreiben Sie eine Funktion, z.B.
function [b]=mysquare(a)
b=a.*a;
und speichern Sie diese unter mysquare.m ab.
5. Den Start einer Funktion, deren File im aktuellen Verzeichnis liegt, erreicht man einfach durch Aufruf in der
Matlab-Shell, also z.B. durch mysquare(4).
6. Kommentare stehen im Rest einer Zeile nach dem Prozentzeichen %.
7. Konstante Strings kann man durch disp(’hallo’) ausgeben.
8. Eine for-Schleife wird z.B. durch
for i=[1:10]
i
end
geschrieben, wobei der Zähler i nacheinander die Elemente des Zeilenvektors [1:10] durchläuft (falls stattdessen
dort eine Matrix steht, wird i ein Vektor und nimmt nacheinander die Werte der Spaltenvektoren an). Diese Zeilen
können Sie übrigens direkt in der Matlab-Shell testen.
9. Eine while-Schleife wird z.B. durch
x=0; while (x<1)
disp(’Hallo’)
x=x+0.1;
end
geschrieben, wobei die Schleife solange durchlaufen wird bis die Bedingung x < 1 nicht mehr erfüllt ist.
10. Eine Verzweigung kann mit if, end und evtl else oder elseif formuliert werden. Dabei sind die Bedingungen
durch Zahlen dargestellt und gelten immer als WAHR, wenn sie nicht 0 sind. Falls if A mit einer “echten” Matrix
A geschrieben wird, wird der Befehl nur ausgeführt, wenn ALLE Elemente ungleich null sind.
Vergleiche sind möglich durch == (gleich; Achtung, nicht = !), <=, <, ~= (ungleich). Logische Verknüpfungen sind
durch & (und), | (oder), ~ (nicht) möglich. Vergleiche und Verknüpfungen von Matrizen werden komponentenweise
durchgeführt. Ein Beispiel wäre
if i<4
disp(’i ist kleiner als vier’)
else
disp(’i ist nicht kleiner als vier’)
end
Aufgabe 1
(4 Punkte)
Die Zahl e kann durch folgenden Grenzwert approximiert werden
x
1
.
lim f (x), f (x) = 1 +
x→∞
x
Schreiben Sie ein Programm, dass die Zahl e bis zu einer vorgegebenen Genauigkeit über diesen Grenzwert berechnet.
Schreiben Sie dazu zuerst eine Funktion, die f (x) für beliebige x auswertet. Plotten Sie den Wert Ihrer Approximation
gegen x um die Genauigkeit der Approximation zu visualisieren.
Aufgabe 2
(6 Punkte)
Im Alltag werden verschiedene Zahlensysteme verwendet. Ein wichtiges System ist z.B. das Binärdarsystem. Dieses
spielt im Umgang mit Computern eine enorme Bedeutung. Zunächst beschränken wir uns auf natürliche Zahlen
n ∈ N und suchen deren Zahlendarstellung zu einer gegeben Basis b ∈ N≥2 := {2, 3, 4, ...}. Gesucht ist also folgende
Darstellung
n=
m
X
ak bk
k=0
mit den Koeffizienten ak ∈ {0, 1, ..., b − 1} für k = 0, ..., m.
a) Schreiben Sie eine Funktion
a = convert2basis(b,n)
mit Übergabeparameter b ∈ N≥2 und n ∈ N, welche die Koeffizienten der Zahldarstellung bzgl. der Basis b zurück
gibt, also
a = (am , am−1 , ..., a1 , a0 ).
b) Testen Sie die Funktion mit Hilfe des Skriptes test convert2basis.m, welches auf der Homepage verfügbar ist.