networkx

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Anfängerin
User
Beiträge: 5
Registriert: Mittwoch 4. Juli 2012, 17:35

Hallo,

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.]]
Wie man sieht habe ich hier mit x die Lösung für Bx=y gefunden, aber ich suche ja eigentlich die für Ax=y. Kennst sich vielleicht jemand damit aus, wie ich jetzt meine rcm-Liste dazu verwende meine Vektoren umzusortieren? Denn der Vektor y sollte in Bx=y ja eigentlich auch anders aussehen, beziehungsweise reicht es natürlich auch nur Zeilen oder nur Spalten zu vertauschen aber in nderen Fällen sicherlich nicht und meine anderen Fälle sehen anders aus.

Es wäre wirklich nett wenn mir jemand helfen könnte.
Viele Grüße von der Anfängerin
Antworten