Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Ralph Gerber Geändert vor über 7 Jahren
1
Matrixmethoden in Textmining, 4. Sitzung, 15.11.10 Einführung in Octave Schwerpunkt Matrizenrechnung und lineare Algebra
2
Inhalt 1/2 Vorstellung/ Bedienung Grundwissen Variablen und Arithmetik Datenstrukturen Kontrollstrukturen Module/ Funktionen Einfache Modulbeispiele (Anhang)
3
Inhalt 2/2 Wichtige Matrixfunktionen Genauigkeit und Rundungsfehler Automatisches Lösen linearer Gleichungssysteme Manuelle Lösung linearer quadratischer Gleichungssysteme LR-Zerlegung ohne Pivotisierung Gaußsche Elimination mit Pivotisierung
4
Vorstellung/ Bedienung Höhere wissenschaftliche Computersprache zur numerischen Berechnung mathematischer Probleme Entwickelt seit 1992 von John W. Eaton, Administrator an der Universität von Wisconsin- Madison Aktuelle Version: 3.0 (21.12.2007) Anwendung in Wissenschaft und Industrie als Alternative zum proprietären MATLAB
5
Vorstellung/ Bedienung Eigenschaften: Interpretersprache (schwach, dynamisch) Modular Nicht objektorientiert Kommandozeilenbasiert Batch-Programmierung möglich Nutzt localen Adressraum voll aus (64 Bit) Nutzt GPU zur Matrizenrechnung
6
Grundwissen: Variablen u. Arithm. Grundrechenarten: +, -, *, /, ^ Konstanten: e, pi, i, … Elementare Funktionen: sin(x), cos(x), exp(x), sqrt(x), min(x,y), max(x,y), sum( ), … Hilfe: help sin Variablendeklaration: x = 3 Info: whos x Löschen: clear x
7
Datenstrukturen: Numerische Obj. Skalare sind intern 1x1-Matrizen realmin : Zeigt die untere numerische Grenze realmax : Zeigt die obere numerisch Grenze eps : Zeigt die Genauigkeit des Systems format long : Ändert Ausgabeformat isinteger(x) : Ob Objekt eine Integer-Zahl ist → Octave speichert Zahlen intern standardmäßig als Double- Fließkommazahlen (64 Bit)
8
Datenstrukturen: Numerische Obj. Typumwandlungen x = single(x) x = int8(x) x = int16(x) x = int32(x) x = int64(x) x = uint8(x) x = uint16(x) x = uint32(x) x = uint64(x)
9
Datenstrukturen: Vektoren & Matrizen I Zeilenvektoren: x = [1,2,3] oder x = [1 2 3] oder x = [1:3] Spaltenvektoren: x = [1;2;3] oder x = [1:3]’ Matrizen: m = [1 2 3; 4 5 6] Zugriff Vektor: x(2) → ans = 2 Matrix: m(2,1) → ans = 4 Mit Range-Operator Gibt Vektor zurück: x(2:3) oder m(1:2) Gibt Matrix zurück: m(:, 2:3)
10
Datenstrukturen: Strings Strings sind Vektoren auf Character Mehrere Strings können zeilenweise in einer Matrix angeordnet werden Alle Matrixoperationen sind somit auf Strings anwendbar Besonderheit: Konkatenation durch Definition von Zeilenvektoren auf Strings Beispiele: x = [ "s", "t", "r", "i", "n", "g"] m = [ "s", "t", "r", "i", "n", "g"; "t", "e", "x", "t"]
11
Datenstrukturen: Strings In einer Stringmatrix werden nicht besetzte Positionen kürzerer Strings mit einem vordefinierten Füllcharakter besetzt. Nützliche Funktionen: ischar(A) : Ob Objekt eine Matrix aus Charakteren ist isvector(A) : Ob Objekt ein Vektor ist (in Verbindung mit ischar(): Ob Objekt ein gültiger String ist) val = string_fill_char() : Zeigt Charakter an, der unbesetzte Positionen in Charaktermatrizen ausfüllt old_val = string_fill_char(new_val) : Definiert Füllcharakter
12
Datenstrukturen: Strukturen Variablen können unter einer Dachstruktur vereinigt werden. Der Name der Dachstruktur fungiert dann als Namensraum. Beispiel: x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string"; x.c → ans = string x → x = { a = 1 b = 1 2 3 4 c = string }
13
Datenstrukturen: Cell Arrays Matrizen → numerische Arrays Cell Arrays → Arrays mit nicht-skalaren Elementen Beispiel: c={"1","2","3";"a","b","c";"4","5","6"}; Zugriff: c{2,3} → ans = c Falls der Inhalt als weiteres Cell Array interpretiert werden soll: Zugriff: c(2, 3) → ans = { [1,1] = c }
14
Kontrollstrukturen: if - else if (//condition//) //then-body// elseif (condition) //elseif-body// else //else-body// endif Wichtig: Stringvergleiche sind nicht möglich! → Statt if (X == "string"): Switch verwenden
15
Kontrollstrukturen: while while (//condition//) //body// endwhile break; und continue; funktionieren nach bekannten Regeln.
16
Kontrollstrukturen: do - until do //body// until (//condition//) break; und continue; funktionieren nach bekannten Regeln.
17
Kontrollstrukturen: for for //var// = //expression// //body// endfor Beispiel: for i=0:-2:-10 printf("%d\n",i); endfor
18
Kontrollstrukturen: ”foreach” for [ //val, key// ] = //expression// //body// endfor Expression muss hier eine Struktur sein.
19
Kontrollstrukturen: switch switch //expression// case //label// //command_list// case //label// //command_list// otherwise //command_list// endswitch
20
Module/ Funktionen Module (bzw. Funktionen) sind ausgelagerte Programmteile, die von der Eingabeaufforderung oder von einem Skript aus aufgerufen werden können. Eine Funktion erfüllt nur eine bestimmte Aufgabe (Input → Output) Moduldateien müssen den Namen der enthaltenen Funktion und die Endung.m besitzen, z.B. ”addiere.m”
21
Module/ Funktionen: Syntax Interner Aufbau: function result = do_something(x, y);... return; Anstelle von return; kann auch endfunction angegeben werden. Mit return; lässt sich die Funktion an jeder beliebigen Stelle verlassen Wichtig! Octave kennt keine Übergabe per Referenz! Funktionsargumente werden immer als Kopie übergeben!
22
Module/ Funktionen: Ergebnisvektoren Mehrere Ergebnisse können als Elemente von Ergebnisvektoren zurückgegeben werden: function [a b c] = makevector(x, y, z); a = x; b = y; c = z; return;
23
Rekursion ist möglich, aber beschränkt. Über built-in-Funktionen wird die maximale Rekursionstiefe begrenzt: val = max_recursion_depth() old_val = max_recursion_depth(new_val) Module/ Funktionen: Rekursion
24
Module/ Funktionen: Dyn. Arg. Die Anzahl der Funktionsargumente muss nicht unbedingt bekannt sein. Potentiell unendlich viele Argumente können mit Hilfe eines Cell Arrays übergeben werden. Die built-in-Variable nargin enthält deren Anzahl. function s = addiere(varargin) if (nargin==0) s = 0; else s = varargin{1} + \ addiere(varargin{2:nargin}); endif endfunction
25
Module/ Funktionen: Dyn. Erg. Ebenso ermöglicht ein Cell Array die Ausgabe dynamisch großer Ergebnisvektoren. function varargout = zuweisen(data) for k=1:nargout varargout{k} = data(:,k); endfor endfunction nargout wird die erwartete Anzahl der Werte zugewiesen. Bei Funktionsaufruf mit ans ist nargout Null. Nützliche Funktion: nargchk (nargin_min, nargin_max, varargin)
26
Wichtige Matrixfunktionen: Matrixgenerierung eye(n): Quadratische Identitätsmatrix der Größe n*n zeros(n): Quadratische Nullmatrix der Größe n*n ones(n): Quadratische Einsermatrix der Größe n*n rand(n): Quadratische Matrix der Größe n*n aus zufälligen Zahlen zw. 0 und 1 diag(z): Quadratische Matrix mit Vektor z als Diagonalvektor
27
Wichtige Matrixfunktionen: Werteextraktion diag(A): Spaltenvektor aus Diagonalvektor der Matrix A inv(A): Inverse der Matrix A pinv(A): Pseudoinverse der Matrix A det(A): Determinante der Matrix A (!= 0 bei eindeutiger Lösbarkeit eines LG mit Koeffizientenmatrix A) rank(A): Rang der Matrix A
28
Wichtige Matrixfunktionen: Methoden abs(n): Gibt den Betrag von n zurück rref(A): Gaußsche Elimination. Gibt um Lösungsvektor erweiterte Identitätsmatrix zurück: I x [l u p] = lu(A): LU-Dekomposition mit optionaler Pivotisierung (Permutationsmatrix). [q r p] = qr(A): QR-Dekomposition mit optionaler Pivotisierung (Permutationsmatrix p).
29
Genauigkeit und Rundungsfehler Fakt: Octave produziert numerische Lösungen zu mathematischen Problemen Problem: Rechenfehler beim Arbeiten mit Zahlen die: Sehr klein sind Sehr groß sind Viele Dezimalstellen besitzen In binärer Form nicht endlich darstellbar sind
30
Genauigkeit und Rundungsfehler Zahlen in Octave: 64-Bit-Doubles → Maximal 15 Dezimalstellen 1. Folge: Inkompatibilität verschiedener Größenordnungen Beispiel: x = 1; while (1 + x > 1) x /= 2; end → terminiert (1 + x entspricht irgendwann 1)
31
Genauigkeit und Rundungsfehler 2. Folge: Binäre Darstellung dezimaler Zahlen hat manchmal unendlich viele Stellen (s. hier)s. hier → Verwendung von Näherungswerten Beispiel: 1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.2 → Ergebnis: ans = 5.5511e-017 Konsequenz für das Lösen linearer Gleichungssysteme: Pivotisierung
32
Automatisches Lösen linearer Gleichungsysteme Ax = b 4 Fälle: Reguläre quadratische Koeffizientenmatrix Singuläre quadratische Koeffizientenmatrix Singuläre überbestimmte Koeffizientenmatrix Singuläre unterbestimmte bestimmte Koeffizientenmatrix
33
Automatisches Lösen linearer Gleichungsysteme Ax = b Einfachster Fall: Reguläre quadratische Koeffizientenmatrix Anxn → Besitzt Inverses A^-1 (det(A) != 0) → Umformung möglich zu: x = A^-1 * b Befehl: x = inv(A) * b Mit Octave-Matrixdivision: Gaussche Elimination x = A \ b → Slash-Operator implementiert je nach Fall verschiedene Lösungswege
34
Automatisches Lösen linearer Gleichungsysteme Ax = b 2. Fall: Singuläre quadratische Koeffizientenmatrix Anxn → Besitzt kein Inverses (det(A) == 0) → Keine eindeutige Lösung Befehl: x = A \ b → Warnmeldung: attempting to find minimum norm solution → Lösungsweg in Octave: Methode der kleinsten Quadrate
35
Automatisches Lösen linearer Gleichungsysteme Ax = b 3./4. Fall: Singuläre über/unterbestimmte Koeffizientenmatrix Amxn → Besitzen kein Inverses (det(A) == 0) → Keine (eindeutige) Lösung Befehl: x = A \ b → Lösungsweg in Octave: QR-Zerlegung im Sinne der Methode der kleinsten Quadrate Alternativ: (A' * A)\(A’ * b) Oder: inv(A' * A) * A' * b Bzw: pinv(A) * b
36
Manuelle Lösung linearer quadratischer Gleichungssysteme LR-Zerlegung ohne Pivotisierung Effizientere Alternative zur Gaußschen Elimination für Rechnerimplementationen → Elimination geschieht nur ein Mal bei verschiedenen rechten Seiten b Siehe Anhang: solveLE.m lr_decomposition.m forSubst.m backSubst.m
37
Manuelle Lösung linearer quadratischer Gleichungssysteme Gaussche Elimination mit Pivotisierung Siehe Anhang: solveLE_pivot.m pivotize.m eliminate.m backwards_substitution.m
38
Referenzen Introduction to Octave, Dr. P.J.G. Long, University of Cambridge, Department of Engineering, 2005 http://www.delorie.com/gnu/docs/octave/octave _145.html
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.