Praktische Einführung und Programmierung
Stefan Bosse
Universität Koblenz - FB Informatik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik ::
Mathematik ist Algorithmik!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik ::
Mathematik ist Algorithmik!
Das Lösen von mathematischen Problemen ist Algorithmik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik ::
Mathematik ist Algorithmik!
Das Lösen von mathematischen Problemen ist Algorithmik
Das Lösen von mathematischen Problemen mit Computer Algorithmen ist seinerseits ein Problem!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Mathematik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Künstliche Intelligenz
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik
Man spricht von numerischen Algorithmen wenn diese basierend auf mathematischen Prinzipien und optional auf naturwissenschaftlichen Modellen "natürliche" Daten verarbeiten, also i.A. gemessene Daten.
numalg Beziehung der Numerik zu anderen Bereichen:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik
Das Ziel der Numerik ist die Konstruktion ökonomischer (effizienter) und stabiler Algorithmen. Speziell gilt es, mögliche Fehlerquellen zu berücksichtigen. Diese ergeben sich durch Modellierungsfehler, durch Fehler in den Eingangsdaten, durch Fehler im Algorithmus, und durch Diskretisierungsfehler in der Numerik.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik: Anwendungen und Probleme
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik: Anwendungen und Probleme
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik: Anwendungen und Probleme
Da sich viele konstruktive Verfahren aus der Theorie nicht zur praktischen Durchführung auf Computern eignen (Numerik), erfordert für schwierige Probleme die Entwicklung guter numerischer Verfahren umfangreiche Kenntnisse und große Erfahrung.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik: Fehleranalyse
Wir haben bei numerischen Problemen folgende Randbedingungen zu berücksichtigen:
algomat Beim Ausführen von Rechnungen gibt es verschiedene Fehlerquellen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik: Fehleranalyse
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Numerik und Zahlensysteme
Mathematisch können wir zwei Basismengen von Zahlen unterscheiden:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Computer Zahlensysteme
Maschinenzahlen werden durch Datenbits repräsentiert (kodiert).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Computer Zahlensysteme
Die digitalen Zahlen (Kodierung) d kann man in dezimale mit der gewichteten Summe umrechnen (Binärzahlensystem mit Basis b=2):
a=(−1)sm−1∑i=0di⋅bi
algomat Zahlenbereich hängt von der Anzahl Bits ab (m). Für das Vorzeichen kommt noch ein Bit hinzu (oder der Zahlenbereich verringert sich). Es gibt keinen Rundungsfehler!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Arithmetik
Es gibt die grundlegenden numerischen arithmetischen Operationen:
Die Reihenfolge von arithmetischen Operationen kann in der Numerik von elementarer Bedeutung sein. Top oder Flop! Vor allem bei Integer Zahlenarithmetik
a=1; b=10; c=100;x1 = (a/b)*cx2 = (a*c)/bprint(x1,x2)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Arithmetik
Das Experiment (Hinweis: JavaScript verarbeitet alle Zahlen als Gleitkommazahlen, daher ist Umwandlung in Integer erforderlich)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Arithmetik
a=(−1)sm−1∑i=0di⋅b−i+e
Eigenschaften verschiedener Datenformate bei Gleitkommazahlen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Rundungsfehler
oder richtig ausgedrückt Diskretisierungsfehler bezüglich des Zahlensystems und deren Kodierung (da niemand explizit rundet)
Rundungsfehler, Über- und Unterlauf und "Not a Number NaN" können bei arithmetischen Operationen auftreten.
Die Dikretisierung von Integer Zahlen ist ohne Genauigkeitsverlust möglich, nur die Wertemenge ist begrenzt
Die Diskretisierung von reelen Zahlen ist i.A. immer mit Genauigkeitsverlust und einer Einschränkung der Wertemenge verbunden (also schon hier RUndungsfehler möglich)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Rundungsfehler
Arithmetische Operationen wie Division können bei ganzen Zahlen zu erheblichen Rundungsfehlern führen (bis zu 100%), Addition und Multiplikation führen keine weiteren Rundungsfehler ein, können aber zum Überlauf bei Integer Zahlen führen!
Arithmetische Operationen können bei Gleitkommazahlen (aber nicht reellen) zu Rundungsfehlern führen (bis zu 1%), und es kann zum Überlauf kommen!
Der Klassiker in der Numerik: Ein Quotient wird Null obwohl es mathematisch eine Zahl ≠ 0 ergeben müsste.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Funktionen und Schleifen
Rekursion
function fac(n) { if (n<2) return 1 else return n*fac(n-1)}
Schleife
y=1for(i=2;i<=n;i++) { y=y*i}
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
numalg pp 6
Es gibt viele verschiedene Möglichkeiten, um die Eulersche Zahl e numerisch zu approximieren. Nachfolgendend führen wir vier verschiedene Varianten ein.
e=limn→∞(1+xn)n
für x=1 berechnen.
⇒ Grenzwerte können nicht direkt prozedural (iterativ) algorithmisch gelöst werden (deklarative und symbolische Methodik erforderlich). Nur endliche Approximation möglich!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
n=100e=pow(1+1/n,n)print(e)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
ex=∞∑n=0xnn!
für x=1 zu berechnen.
e=0;N=100function fac(n) { return n<2?1:n*fac(n-1) } for(n=0;n<=N;n++) { e=e+1/fac(n)}print(e)
Was ändert sich algorithmisch und bei der Laufzeit im Vergelich zu Methode 1?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
numalg Vergleich der Ergebnisse von den beiden Varianten 1 und 2 zur Berechnung der Eulerschen Zahle e für verschiedene n (n=10m). Es gibt eine Überraschung!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
Warum scheitert Verfahren 1 (numerisch!) für große n, aber nicht Verfahren 2?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 1: Berechnung von e
Warum scheitert Verfahren 1 (numerisch!) für große n, aber nicht Verfahren 2?
Hinweis: Wir haben diskrete und intervallbegrenzte Numerik!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2: Approximierte Berechnung des Integrals
Die Riemann Summe kann für die diskretisierte Berechnung des Integrals verwendet werden:
∫baf(x)dx≈N∑i=1Δxif(x⋆i)De<yxi=xi−xi−1x⋆i∈[xi−1,xi]
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2: Approximierte Berechnung des Integrals
Wikipedia
Die Genauigkeit der approximierten Berechnung vom Integral hängt von der Partitionierung und der diskretisierten x-Auswahl ab
Algorithmus
function f(x) { return sin(x) }function integrate1(f,a,b,n) { y=0;dx=(b-a)/n for(i=0;i<n;i++) { xi=a+i*dx y=y+(dx*f(xi)) } return y}print(integrate1(f,1,2,100))
Einfache Integralberechnung mit einer einzigen Stütztelle pro Diskretisierungsintervall
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2: Approximierte Berechnung des Integrals
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2: Approximierte Berechnung des Integrals
Einige Fragen:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
Bisher haben wir nur einen Funktionswert pro Stützpunkt evaluiert hatten ist die Berechnung schwierig vorherzusagen, je nachdem welchen x Wert wir aus dem Intervall [xi,xi+1] gewählt haben.
Da wir den richtigen x Wert innerhalb des Diskretisierungsintervalls nicht unmittelbar auswählen können, wäre eine Mittelwertbildung der Fläche von Ober- und Untersummen hilfreich
Bei einer Verfeinerung der Zerlegung wird die Obersumme kleiner, die Untersumme größer, die Different abs(O-U) ist der Diskretisierungsfehler.
Wikipedia
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
Wikipedia Annäherung eines nichtlinearen Kurvenverlaufs durch eine lineare Funkion durch zwei Stützpunkte xi und xi+1
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
function f(x) { return sin(x) }function integrate2(f,a,b,n) { y=0;dx=(b-a)/n for(i=1;i<n;i++) { xi1=a+(i-1)*dx xi2=a+(i)*dx y=y+(dx/2*(f(xi1)+f(xi2)) } return y}print(integrate2(f,1,2,100))
Integralberechnung mit Trapezregel und zwei Stützstellen pro Intervall
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
Es können mehr als zwei (Sub)Stützpunkte zwischen zwei Schritten gewählt und berechnet werden, d.h., statt einer linearen Interpolation dann eine polynomielle höherer Ordnung
Aber letztlich ist das eine Erhöhung der gesamten Anzahl der Stützpunkte N und bringt noch nicht die Balance zwischen Genauigkeit und Effizienz.
Stützstellen zwischen [x,x+δ] und die Termgewichte
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
Vereinfachung: Die Parabel oder das Parabelstück zwischen zwei Stützstellen wird durch Rechtecke approximiert.
Wikipedia Simpson Regel für die Integration von Funktionen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
function I(f,a,b,k) { switch (k) { case 1: h = (b-a)/1 IS=h/f(a); // oder f(b) break; case 2: // Trapez-Regel h = (b-a)/1 IS = h/2 * (f(a) + f(b)) break case 3: // N=3 Simpson's-Regel h = (b-a)/2 IS = h/3 * (f(a) + 4*f(a+h) + f(b)) break case 4: // N=4 Simpson's-3/8-Regel h = (b-a)/3 IS = 3*h/8 * (f(a) + 3*f(a+h) + 3*f(a+2*h) + f(b)) break case 5: // N=5 Regel h = (b-a)/4 IS = 2*h/45 * (7*f(a) + 32*f(a+h) + 12*f(a+2*h) + 32*f(a+3*h) + 7*f(b)) break } return IS}
Vergleich der Integration mit verschiedener Anzahl von Interpolationspunkten (k, Interpolationsgrad) in einem diskreten Integrationsintervall
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
function integrate(f,a,b,n,k) { y=0; dx=(b-a)/n for(x=a;x<b;x=x+dx) { y=y+I(f,x,x+dx,k) } return y}print(integrate(f,1,2,100,3))
Wie zuvor muss jetzt noch eine iterative Summation für das gesamte Intervall [a,b] erfolgen. k ist der Interpolationsgrad.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
numbook Zusammenfassung der wichtigsten Integralapproximationen (ein Intervallschritt Δx ∈ [a,b])
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2B: Approximierte Berechnung des Integrals
Bisher haben wir nur mit äquidistanten Knoten gearbeitet und so ein einfaches und klares Formelrepertoire erhalten. Wollten wir höhere Genauigkeiten, so wurden einfach der Grad oder die Anzahl der Zusammensetzungen erhöht, um eine geringere Maschen-breite und einen als geringer abschätzbaren Fehler zu erhalten. Die Verfahren sind zwar recht einfach, doch rechnen diese bei schon längst vorhandener hoher Genauigkeit der Iteration immer noch weiter.
Bessere Approximation (höhere Genauigkeit) bei dynamisch adaptiven Intervallen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 2C: Approximierte Berechnung des Integrals
Die Genauigkeit hängt von der Intervallbreite Δx und somit n, aber auch von dem Kurvenverlauf der zu integrierenden Funktion sab.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Iterative numerische Algorithmen haben immer eine Schrittweite. Diese Schrittweite kann statisch oder adaptive veränderlich sein.
Wie schon bei der diskreten und approximierten Integration von Funktionen gezeigt kann eine adaptive Berechnung die auf Fehlertoleranzen und Fehlerschwellen mit der Anpassung der Schrittweite basiert das Endergebnis deutlich verbessern.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Alexander Schwanecke Beispiel einer oszillierenden Funktion
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Wie soll ohne Fehlerbetrachtung ein günstiges kleineres Intervall dx gewählt werden?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Wie soll ohne Fehlerbetrachtung ein günstiges kleineres Intervall dx gewählt werden?
Durch dynamische Verkleinerung des Intervalls wird jetzt die Rechenzeit (also das tatsächliche N) abhängig von der zu integrierenden Funktion (also den Daten)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
function f(x) { return pow(x,5) }function integrate1b(f,a,b,n) { y=0;x=a,dx0=(b-a)/n;dx=dx0 while (x<b) { dy=(f(x+dx)-f(x))/dx dx=dx0/abs(dy) y=y+(dx*f(x)) x=x+dx } return y}print(integrate1b(f,1,2,10))
Adaptive Integralberechnung mittels naiver Gradientenberechnung der Funktion um die Schrittweite dx anzupassen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Aber eigentlich interessiert uns nicht der Gradient der Funktion (Fehler immer noch vom Startwert n abhängig), sonder der Fehler selbst. Den Fehler wollen wir unter eine Schwelle ε bringen (auch Toleranz genannt).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Aber eigentlich interessiert uns nicht der Gradient der Funktion (Fehler immer noch vom Startwert n abhängig), sonder der Fehler selbst. Den Fehler wollen wir unter eine Schwelle ε bringen (auch Toleranz genannt).
Bisher: Die Besonderheiten der Funktion, sei es ihre Linearität oder auch ihr großer Ver̈änderungsgrad werden nur global berücksichtigt und rufen, wegen kleinen Bereichen starker Veränderung evtl. eine sehr enge Maschenbreite bei vorgegebenem Fehler hervor.
Wir müssen jetzt den aktuellen Diskretisierungsfehler abschätzen. Aber wie? Wir kennen das "richtige" Ergebnis nicht.
Aber wir können die Simpsonregel mit verschiedener Anzahl von Stützpunkten vergleichen. Beide haben einen Fehler relativ zum "richtigen" Wert, aber unterschiedlich. Dieser Unterschied definiert die Entscheidung ob verfeinert wird oder nicht.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Alexander Schwanecke
a = 0.; // Linke Grenze.b = 1.; // Rechte Grenze.e = 1e-7; // Erlaubter Gesamtfehler.function SV(f,a,b,e,t,h) { g = 15*e/(b-a) if (t >= b) return 0// Erforderlicher Bereich integriert? // Die Simpsonregel. IS = h/3*(f(t)+ 4*f(t+h)+f(t+2*h)) // Die zusammengesetzte Simpsonregel. IZS = h/6*(f(t)+4*f(t+h/2)+2*f(t+h)+4*f(t+3*h/2)+f(t+2*h)) if (abs(IZS-IS) <= (g*h)) { // Die Fehlerabschaetzung. I = IZS; // Aufsummierung. I += SV(f,a,b,e,t+2*h,(b-(t+2*h))/2) // Restlicher Intervall. return I } else return SV(f,a,b,e,t,h/2) // Verfeinerung. }function integrate4(f,a,b,eps) { y=SV(f,a,b,eps,a(b-a)/2) return y}
In Abhängigkeit vom Fehler zweier unterschiedlicher Teilberechnungen wird entweder das Teilergebnis für die Summation verwendet oder verfeinert.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Adaptive Algorithmen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Universelle Berechnungsfunktionen
In dynamisch typisierten Programmiersprachen und funktionalen Sprachen kein Problem. Man benötigt dazu nur einfache Lambda Ausdrücke.
Die unverselle Funktion F(f,p) soll eine parametrisierte Berechnung (Parametersatz p, wie z.B. Integralgrenzen, Stützpunkte usw.) einer beliebigen Funktion f durchführen.
Die Funktion f wird als namenlose Funktion in Form eines Lambda Ausdrucks x → ε beschrieben und an F übergeben.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Universelle Berechnungsfunktionen
function mean(f,p) { dx=(p.b-p.a)/p.n x=p.a; sum=0 for(i=0;i<p.n;i++) { sum+=f(x) x+dx } return sum/p.n}print(mean(x => (1/x),{ a:1, b:10, n:5}))
Berechnung des Mittelwerts einer beliebigen Funktion
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Universelle Berechnungsfunktionen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Universelle Berechnungsfunktionen
Function <T,R>
import java.util.function.Function;class MyMath { public float mean(Function <Float,Float> f,float a, float b,float delta) { float y=0; int n=0; for(float x=a;x<=b;x+=delta) { n++; y+=(f.apply(x)) }; return y/n; } }class Test { public static void main(String[] args) { Function<Float,Float> foo = (x) -> { return x+1; }; MyMath m = new MyMath(); System.out.println(m.mean(foo,1,2,(float)0.1)); System.out.println(m.mean((x) -> { return 1/x; },1,2,(float)0.1)); }}
Lambda Ausdrücke in Java
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Universelle Berechnungsfunktionen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 3: Iterative Berechnung der Quadratwurzel
matalg
Gegeben: eine positive reelle Zahl a > 0.
Gesucht: eine numerische Näherung für die Quadratwurzel von a.
Die Berechnung ist iterativ nach dem Heron Verfahren:
xn+1=12(xn+axn)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 3: Iterative Berechnung der Quadratwurzel
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 3: Iterative Berechnung der Quadratwurzel
Fragen:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 4: Vektorprodukt
function vmul(a,b) { c=[]; for(i=0;i<length(a);i++) c[i]=a[i]*b[i]; return c }function vdot(a,b) { c=0; for(i=0;i<length(a);i++) c=c+a[i]*b[i]; return c }
vmul: Elementweise Multiplikation vdot:Skalarprodukt
Wie sieht es mit dem Rechenaufwand bezüglich N=length(vec) aus?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 4: Vektorprodukt
Welchen Rechenaufwand hat das Vektorprodukt (als Größe der Vektorelemente N)?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 5: Matrixprodukt
function mmul(a,b) { function mdot(a,b) { c=matrix(nrow(a),ncol(a)); c=matrix(nrow(a),ncol(b)); for(i=0;i<nrow(a);i++) for(i=0;i<nrow(a);i++) for(j=0;j<ncol(a);j++) for(j=0;j<ncol(b);j++) c[i][j]=a[i][j]*b[i][j]; for(k=0;k<ncol(a);k++) return c c[i][j]=c[i][j]+a[i][k]*b[k][j]; return c} }
mmul: Elementweise Multiplikation mdot:Matrixprodukt
Wie sieht es mit dem Rechenaufwand bezüglich N=max(nrow(mat),ncol(mat)) aus?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 4: Matrixprodukt
Welchen Rechenaufwand hat das Matrixprodukt im Vergleich zum Vektorprodukt (mit Größe von N als die Anzahl Zeilen oder Spalten)?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 6: Polynomberechnung
y=n−1∑i=0pi⋅xii
⇒ ML Anwendung (Messwertvorhersage)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 6: Polynomberechnung
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Ein LGS ist gegeben als:
^A→x=→b^A=⎛⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜⎝a1,1a1,2....a1,na2,1a2,2....a2,n⋮⋮⋱⋮⋮⋮⋮⋮⋱⋮an,1an,2....an,n⎞⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟⎠→b=(b1,b2,..,bn)→x=(x1,x2,..,xn)
Der Vector x wird gesucht, mit einem gegebene Satz an Parametern ai.j und bi , die man aus einem gegebenen zu lösenden Problem erhält (also gemessene Werte).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Bei der Lösung des Gleichungssystems Ax=b spielen Dreiecksformen der A-Matrize eine große Rolle. Man spricht von der linken (L) und rechten (R, oder U für Upper) Dreiecksmatrix.
^L=⎛⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜⎝l1,10....0l2,1l2,2....0⋮⋮⋱⋮⋮⋮⋮⋮⋱0ln,1ln,2....an,n⎞⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟⎠,^R=⎛⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜⎝r1,1r1,2....r1,n0r2,2....r2,n0⋮⋱⋮⋮⋮⋮⋮⋱⋮00....rn,n⎞⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟⎠
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Hat die Matrix A linke oder rechte Dreiecksgestalt, dann ist das Lösen des Gleichungssystems besonders einfach. Beim Lösen von
Lx=b
spricht man von Vorwärtssubstitution und beim Lösen von
Rx=b
spricht man von Rückwärtssubstitution.
Bei Lösen von Rx = b werden die Unbekannten xi sukzessive “rückwärts” bestimmt, d.h. zuerst xn = bn / an,n , dann damit xn−1, dann xn−2 usw.
Dieses Vorwärts- und Rückwärtseinsetzen formalisieren wir in den folgenden zwei Algorithmen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Bei der Vorwärtssubstitution ist A=L, bei der Rückwärtssubstitution ist A=R, und man erhält dann folgende Algorithmen die x vollständig berechnen:
for(i=l;i≤n;i++)doxi=1ai,i(bi−i−1∑k=1ai,kxk)for(i=n;i≥1;i−−)doxi=1ai,i(xi−n∑k=i+1ai,kxk)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Wir haben gesehen, dass gestaffelte Gleichungssysteme (d.h. solche, bei denen die Matrix A linke oder rechte Dreiecksgestalt hat) besonders einfach aufzulösen sind.
Der Gauss'sche Algorithmus führt nun den allgemeinen Fall auf diese beiden Fälle zurück, indem er eine Matrix A in ein Produkt aus einer Linksdreiecksmatrix und einer Rechtsdreiecks-matrix zerlegt:
^A=^L^R
Im Grunde ist die LR Zerlegung das Verfahren was wir aus der Schule kennen um händisch ein LGS zu lösen ↠ Treppeniteration.
Der Ansatz: Die LR-Zerlegung einer Matrix A geschieht in n − 1 Schritten.
li,1=ai,la1,1a(1)i,j=ai,j−a1,jli,1
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
function LR(A) { n=nrow(A) L=matrix(n,n) R=matrix(n,n) for(i=0;i<n;i++) L[i][i]=1; // Identitätsmatrix for(k=0;k<(n-1);k++) { for(i=k+1;i<n;i++) { L[i][k]=A[i][k]/A[k][k] for(j=k+1;j<n;j++) { A[i][j]=A[i][j]-L[i][k]*A[k][j] } } } // R=Rechtsdreiecksanteil von A for(i=0;i<n;i++) { for(j=i;j<n;j++) { R[i][j]=A[i][j] } } return [L,R]}
Inplace (L) Gauss'sche LR Zerlegung ohne Pivotsuche
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Gesamte Vorgehensweise:
Achtung: LR-Zerlegung nur möglich wenn Diagonalelemente (Pivotelemente) von A(ak,k) nicht Null sind. Ein Pivot wäre in einen der Zwischenschritte dass Ak,k = 0 ist.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Teilberechnung | Laufzeit |
---|---|
LR-Zerlegung | 1/3 n(n-1)(n+1) |
Vorwärtssubstitution | 1/2 n(n-1) |
Rückwärtssubstitution | 1/2 n(n-1) |
Gesamt | 1/3 n3+n2-1/3n = O(n3) |
Kosten für das Lösen eines linearen Gleichungssystems nach Guass
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
In der Praxis (z.B. in der Strukturmechanik und bei der Diskretiersierung von partiellen Differen-tialgleichungen) sind die auftretenden Matrizen oft schwach besetzt (engl. sparse), d.h. viele Einträge von A sind gleich Null. Dies kann in zweierlei Hinsicht ausgenutzt werden:
Speicherersparnis: Man speichert nicht die gesamte Matrix A ab, sondern nur die wesentliche Information, d.h. welche Einträge von Null verschieden sind und was ihre Werte sind.
Die Matrizen L, R der LR-Zerlegung von A sind ebenfalls schwach besetzt. Auch hier kann Speicher und Rechenzeit eingespart werden, indem nur die nicht-trivialen Einträge von L und R berechnet werden.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Spezielle Matrizen sind:
Big O bleibt auch bei der Rechnung mit reduzierten Matrizen O(n3), die Komplxitätsklasse bleibt unverändert. Aber dennoch sinkt die Rechenzeit signifikant, was schon hilfreich sein kann (i.A. n•p•q, wobei p,q < n sind.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 7: Lösung eines Linearen Gleichungssystems
Was machen wir wenn Diagonalelemente Null sind oder bei der Iteration Null werden?
Die Zeilenvertauschungen müssen notiert werden, da später bei der Resubstituierung die richigen b Werte und x Zuordnungen ausgweählt werden müssen.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 8: Differenzieren und Gradientenberechnung
Neben der Integration von Funktionen die wir schon kennen gelernt haben ist das Differenzieren von Funktion eine weitgere häufig vorkommende und wichtige Methode in der Mathematik und Numerik.
numbook Kann man eine Funktion f(x) in abschnittsweise lineare Abschnitte (lineare Teilfunktionen) zerlegn ("Hüte"), dann ist die Ableitung dieser linearisierten Funktion f'(x) dann eine Folge von konstanten Funktionen. (Pice-wise linear Function)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 8: Differenzieren und Gradientenberechnung
Ansatz ist die Approximation durch endliche Differenzen...
f'(x)=limh→0f(x+h)−f(x)h
Entfällt der Grenzwert dann kann auch schreiben:
f'(x)=f(x+h)−f(x)h+O(h)
O(h) ist ein Fehlerterm, und schließlich gilt:
f'(x)≈f(x+h)−f(x)h
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 9: KNN / Perzeptron
Die Berechnung von künstlichen neuronalen Netzwerken (KNN) basiert starak auf Matrixakgebra und Grdaientberechnung (also Differentiation)
Ein KNN ist mathematisch eine i.A. nicht-lineare und zumeist sehr komplexe Funktion die EIngabedaten X auf Ausgabedaten Y abbildet (Y also berechnet):
ML:X→Yf(X):X→Y
Man unterscheidet bei KNN zwei Phasen der Berechnung:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 9: KNN / Perzeptron
Fehlerminimierung mit absteigenden Gradienten
Stefan Bosse - Algorithmen und Datenstrukturen - Modul B Numerische Algorithemen und Mathematik :: Algorithmus 10: CNN