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.
© Copyright 2025 ExpyDoc