Gram-Schidtsches Orthogonalisierungsverfahren Schritt für Schritt¶
Wir wollen und das Gram-Schidtsche Orthogonalisierungsverfahren zunächst anhand eines einfachen Beispiels genauer ansehen. Wir orthogonalisieren die Vektoren a1…a3
A=(a1,a2,a3)=(08102460012)
a1 = numpy.array([0,2,0])
a2 = numpy.array([8,4,0])
a3 = numpy.array([10,6,12])
A = [ a1, a2, a3 ]
print "Othogonalisieren von"
print A
Dazu nutzen wir das Gram-Schmidt Verfahren. Wir wollen eine Orthogonalisierung Q berechnen:
Q = [ ]
Wir setzen voraus, dass alle Vektoren ak linear unabhängig sind, d.h. die Matrix AT muss vollen Rang haben und das ist erfüllt, wenn A sollen Rang hat:
assert(numpy.linalg.matrix_rank(A) == 3)
Wir starten mit:
print "erster Vektor"
q = A[0] / linalg.norm(A[0])
Q.append(q)
print q
und erhalten
Q1=(0,1,0)
Der zweite Vektor soll orthogonal zu Q0 stehen:
print "zweiter Vektor"
q = A[1] - numpy.dot(Q[0],A[1])*Q[0]
q = q / linalg.norm(q)
Q.append(q)
print q
und erhalten
Q2=(1,0,0)
Der dritte Vektor wird analog berechnet:
print "dritter Vektor"
q = A[2]
for j in range(0,2):
q = q - numpy.dot(Q[j],A[2])*Q[j]
q = q / linalg.norm(q)
Q.append(q)
print q
und erhalten
Q3=(0,0,1)
Und wir überprüfen, dass Q wirklich unitär und symmetrisch ist:
Q = numpy.array(Q)
print numpy.dot(Q,Q)