Hallo zusammen,
ich habe ein kleines Problem, bei dem Ihr mir hoffentlich helfen könnt.
Ich habe zwei Matrizen A und B und muss dafür das generalisierte Eigenwertproblem, also die Gleichung:
A*x = lambda*B*x
lösen. A ist die Laplacian Matrix eines Graphen, auf der Diagonalen steht also jeweils der Grad eines Knotens, sind zwei Knoten mit einander verbunden ist der korrespondierende Eintrag -1, sonst ist die Matrix mit 0 aufgefüllt. Damit ist sie ja symmetrisch. B hat einfach auf der Diagonalen jeweils den Grad des Knotens. Und damit ist B auch symmetrisch. Was ich weiss, ist, dass 0 immer einer der Eigenwerte sein soll, wenn man das Problem für diese beiden Matrizen löst.
Jetzt mein Problem: Als einziges Paket, dass das generalisierte Eigenwertproblem lösen kann (und das ich beim Programmieren benutzen kann), habe ich bisher LAPACK bzw. JLAPACK (ich programmiere in Java) gefunden. Allerdings gibt es hier ziemlich viele verschiedene Methoden, die das Problem für verschiedene Fälle lösen.
Die Lösungen für die Fälle, dass mehr als eine der Matrizen nicht symmetrisch ist, kann ich wohl aussen vor lassen. Bei den symmetrischen Fällen gibt es dann teilweise die Einschränkung, dass B positiv definit sein muss, also alle Eigenwerte > 0 sein sollen für B. Da das so ist (denke ich), habe ich mich letztlich für DSYGV entschieden (falls sich jemand mit LAPACK auskennt). Problem: 0 ist für ein konkretes Fallbeispiel, das ich reingesteckt habe, keiner der Eigenwerte.
Aus diesem Dilemma ergeben sich folgende Fragen:
-
Ist eine Matrix mit den Eigenschaften von B wirklich immer positiv definit? Wenn sie das nicht wäre, würde die Berechnung so wie ich sie habe machen lassen nicht funktionieren. Es klappt aber alles, nur ist 0 nicht wie gefordert einer der Eigenwerte.
-
0 ist nicht bei den Eigenwerten dabei - naja, so ganz stimmt das nicht. Der niedrigste gefundene Eigenwert liegt im Bereich von 10^-16, ist also schon ziemlich klein. Der nächst größere ist 15 Größenordnungen größer. Kann es sein, dass ich durch die Beschränkungen meines Rechners nicht genau auf 0 sondern nur nahe an 0 komme?
-
Für die Berechnung von Eigenwerten findet man ziemlich viele Beispiele, so dass man immer schön überprüfen kann, ob man es richtig gemacht hat oder nicht - für das generalisierte Problem ist das etwas schwieriger, ich konnte bisher kein Beispiel dazu finden. Kann jemand ein einfaches kleines Beispiel für die Lösung des generalisierten Problems geben, wenn möglich mit Matrizen die die oben genannten Eigenschaften haben? Dann wüsste ich wenigstens, wann ich richtig liege.
-
Kennt sich jemand mit LAPACK aus und weiss ob ich für den oben beschriebenen Fall mit DSYGV die richtige Routine benutze?
-
Kennt jemand andere Programme / Bibliotheken, die das Problem lösen können? Wir haben hier sonst noch Mathematica, aber das ist anscheined zur Lösung auf irgendetwas externes angewiesen, mit dem ich nicht dienen kann.
Dann schonmal vielen Dank fürs zuhören.
Viele Grüße
Schorsch