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 a1a3

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)