Schnelle Matrizenoperationen von Christian Büttner

Werbung
Schnelle Matrizenoperationen
von Christian Büttner
Proseminar Ergänzende Kapitel zu DAP II
Informationsquelle: Cormen, Leiserson, Rivest
Introduction to algorithm
Was erwartet uns?
Strassens Algorithmus
Lineare Gleichungssysteme
Invertieren von Matrizen
Symetrisch positiv definite Matrizen
Strassens Algorithmus
• Warum ein Algorithmus?
Matrixoperationen sind wichtig in der Wissenschaft z.B.
Strömungsverhalten von Wasser.
• Was macht der Algorithmus?
Berechnung des Produktes zweier n  n Matrizen
• Vergleich zum naiven Algorithmus?
Der naive Algorithmus benötigt
Strassens Algorithmus nur
Q( n 3 )
Q(nlg7 )  Q(n 2,81 )
Strassens Algorithmus
Der Algorithmus basiert auf der Divide & Conquer Idee.
Sei A, B, C  matn ( R)
und sei a, b, c, d , e, f , g , h  mat n ( R)
2
C  A* B
r s  a b   e

  
 * 
t
u
c
d

 
 f
g

h 
Dann ergeben sich die vier Gleichungen
r  a *e  b* f
s  a* g  b*h
t  c*e  d * f
u  c* g  d *h
Multiplikation ist nicht
Kommutativ !
Strassens Algorithmus
Dies liefert einen rekursiven Algorithmus mit Laufzeit
n
T ( n )  8 * T ( )  Q( n 2 )  Q( n 3 )
2
Strassens Algorithmus hingegen liefert:
n
T (n)  7 * T ( )  Q(n 2 )  Q(n lg(7 ) )
2
Strassens Algorithmus
1) Eingangsmatrix in
n n

2 2
Untermatrizen teilen.
2
2) Mit Q(n ) skalar Additionen/Subtraktionen 14
Matrizen aufstellen
n n

2 2
A1 , B1 , A2 , B2 , A3 , B3 , A4 , B4 , A5 , B5 , A6 , B6 , A7 , B7
3) rekursiv Pi  Ai * Bi für i  1,...,7 berechnen
4) berechne r,s,t,u durch addieren/subtrahieren der
verschiedenen Pi Matrizen
Strassens Algorithmus
Pi  Ai * Bi  ( i1 * a   i 2 * b   i 3 * c   i 4 * d ) * (  i1 * e   i 2 * f   i 3 * g   i 4 * h)
mit  i1 ,  i 2 ,  i 3 ,  i 4 ,  i1 ,  i 2 ,  i 3 ,  i 4  {1,0,1} und i  1,...,7
1

0
r  (a * e  bf )  a b c d 
0

0

0 0 0  e 
 
1 0 0  f 
0 0 0  g 
 
0 0 0  h 
e
a
b
c
d
f
g h
   
   
   
   
s  a* g  b*h
t  c*e  d * f
u  c* g  d *h







 

 
 

 












 

 
 

  









 




 

 
 

  
Strassens Algorithmus
s  P1  P2







Kann man wie folgt darstellen
  



  



  



   

a* g  a*h
  



  



  



   

+ a*h  b*h =
 a * ( g  h) : P1
  

  
  

   
a* g  b*h
 (a  b) * h : P2
Analog kann man mit t  P3  P4 verfahren







  



  



  



   

c *e  d *e
+
 (c  d ) * e : P3
  
 


  
 

 
  


 
   

d * f  d *e
 d * ( f  e) : P4
=
 

 
 

  
c*e  d * f
Strassens Algorithmus







 

 
 

  
 a * e  a * h  d * e  d * h  a * (e  h)  d * (e  h)  (a  d ) * (e  h)  P5











    
 
   

   
 
     
P5
   
 
   

   
 
     
P4
    
 
     

    
 
      
P2
 

 
 

  
 a*e  d *h  d * f  b*h
Strassens Algorithmus



P6  




  

  
 b * f  b * h  d * f  d * h  b * ( f  h)  d * ( f  h)  (b  d ) * ( f  h)
  

   
Nun kann man r wie folgt bestimmen
r  P5  P4  P2  P6  a * e  b * f
Strassens Algorithmus
Weiter kann man folgendes machen
P5  P1  P3  a * e  a * g  c * e  d * h



























 

 
 

  



 a * e  a * g  c * e  c * g  a * (e  g )  c * (e  g )  ( a  c ) * (e  g )



 
 u  P5  P1  P3  P7
Strassens Algorithmus
Beispiel
1 3 8 4  r s 

 * 
  

5 7  6 2  t u 
 26 10 

 
 82 34 
P1  1* (4  2)  2
P2  (1  3) * 2  8
P3  (5  7) * 8  96
P4  7 * (6  8)  14
P5  (1  7)(8  2)  80
P6  (3  7) * (6  2)  32
P7  (1  5) * (8  4)  42
s  P1  P2  10
t  P3  P4  82
r  P5  P4  P2  P6  26
u  P5  P1  P3  P7  34
Strassens Algorithmus
Satz: Sei (R,+,*) ein Ring, dann ist auch(matnn ( R),,*) ein
Ring
Beweis:
Assoziativgesetz bzgl + wird “vererbt”.
Neutrales Element ist die Matrix die nur aus dem
neutralen Element des Rings R besteht. Oft als 0
bezeichnet
Additives inverse ist die Matrix aus den additiven
inversen Elementen des Rings R.
Kommutativität bzgl. + wird “vererbt”.
Strassens Algorithmus
  a11  a1n   b11  b1n    c11  c1n 

 
 

  * 
  * 
 
 
 a  a  b  b  c  c 
nn   n1
nn    n1
nn 
  n1
n
n n
 n

  aki * bij  * clj   aki * bij * clj 

l 1  i 1
l 1 i 1

n
n
 a
i 1 l 1
n
n
ki
* bij * clj   aki * (bij * clj ) 
i 1 l 1
n
 a *b
i 1
ki
n
l 1
ij
* clj 
 a11  a1n    b11  b1n   c11  c1n  

 
 

  * 
  * 
 
 
 a  a  b  b  c  c 
nn    n1
nn   n1
nn  
 n1
Strassens Algorithmus
Anmerkung Binärmatrizen
({0,1},, ) kein Ring
Die Definition der Multiplikation
C  A * B mit
A, B, C  mat n ({0,1)}
n
cij   aik  bkj
k 1
Konvertiere die Binärmatrix in die reellen Zahlen und führe
Strassens Algorithmus durch.
Prüfe ob ein wert ungleich 0 ist, wenn ja ersetze ihn durch 1
Lineare Gleichungssysteme
Problemstellung:
Ax  b mit A  mat nn () und x, b   n
Satz: Ist A invertierbar so gibt es genau eine Lösung
Seien x und x' zwei Lösungen
Ax  Ax'  b
x  ( A1 A) x  A1 ( Ax)  A1 ( Ax' )  A1 Ax'  x'
Mögliche Lösung eines LGS:
Ax  b
 A 1 Ax  A 1b
 x  A 1b
Problem: numerisch instabil
Lineare Gleichungssysteme
LUP-Decomposition
PA=LU
 1 0  0  *   *




 * 1    0 *
PA  
   0      



 *  * 1  0  0 *



P ist Permutationsmatrix
L ist linker untere normierte Dreicksmatrix
U ist rechte obere Dreiecksmatrix
Ax  b
 PAx  Pb
 LUx  Pb
mit y  Ux
 Ly  Pb lösen mit forward substituation
 Ux  y lösen mit backsubstituation
Lineare Gleichungssysteme
Forward substitution
 b (1)
y1
l21 * y1

ln1 y1
 y2
 ln 2 y 2

 lnn1 yn 1
i 1
y (i )  b (i )   lij y j
j 1
 yn
 b ( 2)


 b ( n )
Lineare Gleichungssysteme
Backsubstitution
u11x1
   u1n xn


unn xn
yi 
xi 
n
u
j i 1
uij
ij
xj



y1

yn
Lineare Gleichungssysteme
Beispiel LU-Decomposition
2 3 1 5
6 13 5 19
2 19 10 23
4 10 11 31
2 3 1 5  1

 
6
13
5
19

 3
 2 19 10 23    1

 
 4 10 11 31   2

 
2 3 1 5
3 4 2 4
1 16 9 18
2 4 9 21
0 0 0  2

1 0 0  0
4 1 0  0

1 7 1  0
3 1 5

4 2 4
0 1 2

0 0 3 
2
3
1
2
3
4
4
1
1 5
2 4
1 2
7 17
2
3
1
2
3
4
4
1
1
2
1
7
5
4
2
3
Lineare Gleichungssysteme
LUP-Decomposition
-LU-Decomposition mit Spaltenpivotierung.
Betragsgrösstes Element suchen und Zeilen
vertauschen und in einem Permutationsvektor
speichern
=> numerisch stabiler und Division durch NULL
wird vermieden
Laufzeitverhalten ist Q(n³)
Matrizen invertieren
Was können wir ?
Ax  b
Lösen von linearen Gleichungen auch für
verschiedene b
Was bringt uns das?
A * A1  I
A * xi  ei
Kann man auch für jede Spalte einzeln
Lösen
mit xi Spalten von A1 für i  1,..., n
Matrizen invertieren
Zeitaufwand:
LUP-Zerlegung Q(n³)
Lösen der linearen Gleichung für n
Spaltenvektoren n* Q(n²)= Q(n³)
=> Q(n³)
Matrizen invertieren
Satz: Sei M(n) die Zeit um zwei nn Matrizen zu multiplizieren
und I(n) die Zeit um eine nn Matrix zu invertieren, dann gilt
I(n)=Q(M(n))
Beweis: “M(n)=O(I(n))”
Seien A,B zwei nn Matrizen.
 In

D 0
0

 In

1
D  0
0

A
In
0
0

B
I n 
 A AB 

In  B 
0
I n 
D lässt sich in
O(I(3n)) =O(I(n))
invertieren
=> M(n)=O(I(n))
Matrizen invertieren
“I(n)=O(M(n))” Beweis Idee
-erweitern der Matrix mit “Identität, so dass man eine
Potenz von 2 erhält
-für symetrisch positiv definite Matrizen definiert man
einen rekursiven Algorithmus mit Laufzeitverhalten
I(n)2I(n/2)+4M(n)+O(n²)= 2I(n/2)+O(M(n))=O(M(n))
Die Matrix ist nicht symetrisch positiv definit
Atr * A
1
1
( A * A) * A  A * A
tr
tr
tr 1
* Atr  A1
Symmetrisch positive definite Matrizen
Definition: Eine symetrisch positiv definite Matrix erfüllt folgende
Bedingungen
1)
A  Atr
2) x tr Ax  0 für x  0
Satz: Jede positiv definite Matrix ist invertierbar
Beweis: Sei Ax=0 d.h. die Zeilen der Matrix sind linear
abhängig. Dies ist ein Widerspruch zu Eigenschaft 2)
Symmetrisch positive definite Matrizen
Satz: Ist A symetrisch und positiv definit, so ist jede linke
obere Untermatrix symetrisch und positiv definit.
Beweis:
-symetrisch ist klar
 A' B  x 
 A' x 
tr
   ( x ,0)
  x tr A' x  0
( x ,0)
 C D  0 
 Cx 
tr
Symmetrisch positive definite Matrizen
Satz: Ist A eine symetrisch, positiv definite Matrix,
dann ist das Schur-komplement auch symetrisch
positiv definit
 Ak B tr 

A  

B C
1 tr
S  C  BAk B
Definition des Schurkomplemtes
Symmetrisch positive definite Matrizen
Beweis: Man kann zeigen, dass S symetrisch ist. Wir wollen
nur zeigen, dass S positiv definit ist.
tr

 y 
A
B
tr
tr
tr
k
  
x Ax  y
z 
 z
B
C

 
tr
tr tr
tr
tr
y Ak y  y B y  z By  z Cz 


( y  Ak1 B tr z )tr Ak ( y  Ak1 B tr z )  z tr (C  BAk1 B tr ) z
 z tr (C  BAk1 B tr ) z  z tr Sz  0
q.e.d.
Symmetrisch positive definite Matrizen
Korollar: Symmetrisch positiv definite Matrizen verursachen
bei einer LU-Decompositon nie eine Division durch 0.
Beweis: Sei A eine symetrisch positiv definite Matrix. Da
jede linke obere Untermatrix positiv definit ist, ist auch das
erste Element positiv insbesondere nicht 0. Der erste Schritt
der LU-Decomposition erstellt das Schurkomplement. Nun
kann man per Induktion zeigen dass alle Pivotelemente
ungleich 0 sind.
Symmetrisch positive definite Matrizen
Gegeben sei eine Menge von Punkten. Nun möchte
man ein Polynom des Grades n finden, so dass die
Kurve möglichst nah an allen Punkten vorbei geht.
( x1 , y1 ), ( x2 , y2 ),..., ( xm , ym )
yi  F ( xi )   i
für i  1,..., m
Symmetrisch positive definite Matrizen
Was ist
F ( xi )
?
n
F ( xi )   c j f j ( x)
j 1
Was ist nun
z.B.
Wobei n die Anzahl der
Basisfunktionen angibt.
f j (x ) ?
f j ( x)  x j 1
 F ( x)  c1  c2 x  ...  cn x n 1
 f1 ( x1 )

 f (x )
Ac   1 2


 f (x )
 1 m
f 2 ( x1 ) 
f 2 ( x2 ) 


f 2 ( xm ) 
f n ( x1 )  c1   F ( x1 ) 
  

f n ( x2 )  c2   F ( x2 ) 

      
  





f n ( xm )  cn   F ( xm ) 
Symmetrisch positive definite Matrizen
Nun wollen wir den Fehler dabei betrachten
  Ac  y


m
     i2 
 i 1

2
d
1
2




 Ac  y     aij c j  yi 
i 1  j 1

2
m
n
 n

  2  aij c j  yi aik  0
dck
i 1  j 1

äquivalent zu
2
m
( Ac  y ) tr A  0
 Atr ( Ac  y )  0  Atr Ac  Atr y
c  (( Atr A) 1 Atr ) y
2
Symmetrisch positive definite Matrizen
Beispiel: Die Punkte (-1,2),(1,1),(2,1),(3,0),(5,3) sollen
durch eine quadratische Kurve approximiert werden.
F ( x)  c1  c2 x  c3 x 2
1

1
A  1

1

1
x1
x2
x3
x4
x5
x12  1  1 1 
 

2
x2  1 1 1 
x32   1 2 4 


2
x4  1 3 9 
 

x52  1 5 25 
0,300
0,200
0,100
 0,100 
 0,500


tr
1 tr
( A A) A    0,388 0.093
0,190
0,193  0.,088 
 0,060  0,036  0,048  0,036 0,060 


 1,200 


( Atr A) 1 Atr y  c    0,757 
 0,214 


F ( x)  1,2  0,757 x  0,214 x 2
Ich habe fertig!
Herunterladen