in einer Simulation berechne ich eine Vielzahl von Vektoren A[0], A[1], ... die im unteren Code als eine Matrix A zusammengefasst ist. Auf diese Vektoren wende ich das Gram-Schmidt-Verfahren in zwei Schritten an. Zuerst entferne ich den Anteil der anderen Vektoren und speichere dessen Längen. Erst dann wird der Vektor auf Einheitslänge normiert.
Der oben beschrieben Zusammenhang ist in dem folgenden Code beispielhaft gezeigt:
Code: Alles auswählen
from numpy import random
N = 3 # Anzahl der Zeilen und Spalten: In meinem Fall ist N = 100
l1, l2, l3 = 0, 0, 0 # In meinem Fall habe ich also 100 Variablen l1,l2,...,l100
for t in range(10**3):
''' for i in range(10**5):
In dieser Schleife wird die Matrix A berechnet. '''
A = random.rand(N, N) # Um den Code kurz zu halten, wird diese zufällig erstellt
'''Auf die Vektoren A[0], A[1], A[2] wird das Gram-Schmidt-Verfahren angewendet'''
orth_1 = A[0]
l1 += log(norm(orth_1))
A[0] = orth_1 / norm(orth_1)
orth_2 = A[1] - dot(A[1], A[0]) * A[0]
l2 += log(norm(orth_2))
A[1] = orth_2 / norm(orth_2) # orthogonaler und normierter Vektor
orth_3 = A[2] - (dot(A[2], A[1]) * A[1]) - (dot(A[2], A[0]) * A[0])
l3 += log(norm(orth_3))
A[2] = orth_3 / norm(orth_3)
orth_x mit zunehmener Anzahl von Vektoren (also N) immer länger werden. In meinen Fall mit N = 100 wäre es sehr umständlich alle Gleichungen orth_i , i=1,2,..,100 auszuschreiben um so die gesuchten Größen l_i zu bestimmten.
Hat jemand eine Idee, wie ich diesen ganzen Prozess automatisieren kann?
Mir fällt
keine Effiziente Variante ein, deswegen muss ich die Gleichungen explizit ausschreiben. Diese
Gleichungen werden mit zunehmender Anzahl von Vektoren (also N) immer länger und in meinem Fall
wo N = 100 ist