ich möchte gerne den reverse-cuthill-Mckee Algorithmus zur Lösung linearer Gleichungssysteme lösen. Mein Problem ist, ich weiß nicht wie man die rechte Seite dann verändert, damit man das richtige System löst und wie man den Lösungsvektor dann wieder in die richtige Reihenfolge sortiert.
Muss ich dann rcm auch auf die beiden Vektoren anwenden, oder mach ich das einfach indem ich mir die rcm-Liste anschaue und dann meine Vektoren danach umsortiere?
Ein Beispiel dazu findet man hier:
http://networkx.lanl.gov/examples/algorithms/rcm.html
Code: Alles auswählen
from networkx import *
from numpy import *
from scipy.linalg.decomp_lu import *
from networkx.utils.rcm import reverse_cuthill_mckee_ordering
A=matrix([[0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0]])
y=matrix([[3],[2],[1],[5]])
G=to_networkx_graph(A)
rcm=list(reverse_cuthill_mckee_ordering(G))
B=adjacency_matrix(G,rcm)
print B
[[ 0. 1. 0. 0.]
[ 1. 0. 0. 0.]
[ 0. 0. 0. 1.]
[ 0. 0. 1. 0.]]
lu,piv= lu_factor(B)
x=lu_solve((lu,piv), y)
print x
[[ 2.]
[ 3.]
[ 5.]
[ 1.]]
print dot(B,x)
[[ 3.]
[ 2.]
[ 1.]
[ 5.]]
print y
[[3]
[2]
[1]
[5]]
print dot(A,x)
[[ 1.]
[ 5.]
[ 3.]
[ 2.]]
Es wäre wirklich nett wenn mir jemand helfen könnte.
Viele Grüße von der Anfängerin