Wie berechnet man geschickt Eigenwerte einer nicht sym Triagonalmatrix?



  • Hi ich habe zwar schon mal Numbers gesehen, bin aber leider eine Numeriknull.
    Vielen Dank für dein Interesse.

    Ich brauche die Eigenwerte von Matriezen dieser Art, die lokal das Reaktionsverhalten von 75 Stoffen beschreiben, um die schnellen Prozess für einen Transsportprozess entkoppeln zu können.

    Ich habe die Matrix in den Solver von Lapackpp (benutz die Funktion dgeev) gejagt und dann mir mal A*v-lambda*v angeschaut, was mich etwas traurig stimmte ;-(.

    Wie geht man am besten bei einem solchen Problem vor ?

    Muss ich die Matrix Vorkonditionieren, wenn ja wie oder womit ? oder einen anderen Solver benutzen oder die kleinen Werte null setzen und die damit leicht gestörte Matrix betrachten?

    ************ -1.692563e+06 8.442378e-07
    1.692563e+06 -1.665804e+06 1.727985e-06
    1.665804e+06 -1.639139e+06 3.332485e-06
    1.639139e+06 -1.612457e+06 6.189636e-06
    1.612457e+06 -1.585848e+06 1.178237e-02
    1.585848e+06 -1.559327e+06 2.811980e-02
    1.559327e+06 -1.532832e+06 4.843977e-02
    1.532832e+06 -1.506623e+06 8.280591e-02
    1.506623e+06 -1.480319e+06 1.925230e-01
    1.480319e+06 -1.454038e+06 2.911319e-01
    1.454038e+06 -1.427765e+06 4.209331e-01
    1.427765e+06 -1.401547e+06 5.918583e-01
    1.401547e+06 -1.375260e+06 5.380839e-01
    1.375259e+06 -1.349255e+06 8.323239e-01
    1.349255e+06 -1.323754e+06 1.259100e+00
    1.323753e+06 -1.297074e+06 1.850247e+00
    1.297073e+06 -1.271050e+06 2.795535e+00
    1.271049e+06 -1.244989e+06 3.910690e+00
    1.244986e+06 -1.219010e+06 5.415857e+00
    1.219006e+06 -1.193113e+06 7.433379e+00
    1.193108e+06 -1.166954e+06 1.005849e+01
    1.166947e+06 -1.141423e+06 1.362191e+01
    1.141413e+06 -1.115744e+06 1.683691e+01
    1.115730e+06 -1.089386e+06 2.967496e+01
    1.089370e+06 -1.062241e+06 3.830472e+01
    1.062211e+06 -1.037695e+06 5.860879e+01
    1.037656e+06 -1.012154e+06 9.016184e+01
    1.012096e+06 -9.850399e+05 1.230441e+02
    9.849498e+05 -9.605875e+05 1.609580e+02
    9.604644e+05 -9.346342e+05 2.074356e+02
    9.344732e+05 -9.080973e+05 2.261437e+02
    9.078899e+05 -8.829303e+05 3.031178e+02
    8.827042e+05 -8.575945e+05 3.978935e+02
    8.572914e+05 -8.316408e+05 5.086510e+02
    8.312429e+05 -8.064910e+05 6.496802e+02
    8.059824e+05 -7.812532e+05 8.110248e+02
    7.806035e+05 -7.561017e+05 1.003085e+03
    7.552906e+05 -7.310399e+05 1.234566e+03
    7.300369e+05 -7.060603e+05 1.502880e+03
    7.048257e+05 -6.812237e+05 1.832695e+03
    6.797208e+05 -6.569160e+05 1.781016e+03
    6.550834e+05 -6.315510e+05 2.334050e+03
    6.297700e+05 -6.070993e+05 3.020750e+03
    6.047652e+05 -5.834141e+05 3.926743e+03
    5.803933e+05 -5.594718e+05 4.992233e+03
    5.555451e+05 -5.354435e+05 6.387163e+03
    5.304512e+05 -5.122142e+05 8.249146e+03
    5.058271e+05 -4.900116e+05 1.021968e+04
    4.817625e+05 -4.673942e+05 1.295153e+04
    4.571745e+05 -4.456293e+05 1.650311e+04
    4.326777e+05 -4.245405e+05 2.119310e+04
    4.080374e+05 -4.050238e+05 1.965650e+04
    3.838307e+05 -3.794330e+05 2.496564e+04
    3.597765e+05 -3.606793e+05 3.142334e+04
    3.357136e+05 -3.432466e+05 4.160764e+04
    3.118232e+05 -3.298546e+05 9.594033e+03
    2.882469e+05 -2.741963e+05 1.115030e+04
    2.646022e+05 -2.521747e+05 2.584328e+04
    2.410244e+05 -2.434178e+05 2.936490e+04
    2.175746e+05 -2.237428e+05 4.343284e+04
    1.943779e+05 -2.147718e+05 6.391707e+04
    1.713390e+05 -2.125623e+05 9.312763e+04
    1.486452e+05 -2.191559e+05 1.109542e+05
    1.260283e+05 -2.146239e+05 1.846946e+05
    1.036697e+05 -2.663375e+05 3.186550e+05
    8.164293e+04 -3.786582e+05 6.277559e+05
    6.000318e+04 -6.666331e+05 9.423606e+05
    3.887715e+04 -9.608766e+05 2.457585e+06
    1.851592e+04 -2.457585e+06


  • Mod

    Handelt es sich um eine 75x75 Matrix? Numerisch wäre das dann eine Simpelaufgabe, die dir jeder Taschenrechner ohne Tricks lösen kann. Was hat dich denn an der Lösung von Lapack gestört?

    Formulier dein Problem mal sachlich ohne Ausdrücke wie "was mich etwas traurig stimmte". Was soll der Zahlenwust am Ende deines Beitrags darstellen?



  • Ich würde vermuten, dass der Zahlenwust das Ergebnis von A*v - lambda*v ist, wobei v ein Eigenvektor zum Wert lambda sein soll. Das Ergebnis (insbesondere die Einträge die in die Millionen gehen, statt schön nah bei 0 zu sein) würde mich auch traurig stimmen.



  • Vielen Dank für deine Hilfe.

    Die Zahlen sind die Spalten der Tridiagonalmatrix:

    Unterenebendiagonale; Hauptdiagonale;Oberenebendiagonale

    Der 70.Eigenvektor ist -1.168371e+05 und die Komponenten des zugehörigen
    Eigenvektors variieren von 1.0e-63 bis 1.0e-01.

    Wenn ich nun zum Test A*v-lambda*v aus rechne, wo man Null erwarten sollte,
    bekomme ich 1.1271e+00, was zehn mal so groß ist, wie der größte Wert im Eigenvektor. Dies lässt mich an der richtigen Lösung zweifeln.



  • Sorry, wenn ich etwas unverständlich schreibe.

    Es heist nicht:
    Die Zahlen sind die Spalten der Tridiagonalmatrix:

    Sondern sollte heissen:
    Die drei Zahlenspalten sind die Unterenebendiagonale Hauptdiag. und die Oberenebendiagonale.



  • Rechne doch mal den relativen Fehler

    ||Av - lambda*v|| / ||v||

    aus. Wenn so riesige Einträge in deinem Eigenvektor drin stehen, ist ein absoluter Fehler von ≈1 ja schon fast eine Null 🙂



  • Oder mal etwas anschaulicher: Wenn theoretisch deine Konzentration von 10^5 Teile pro Volumen mit der Zeit gegen Null entwickeln sollte, aber numerisch noch zwei, drei Teile pro Volumen übrig bleiben, ist doch alles gut.



  • Huch, mir ist da gestern ein "A" verloren gegangen. Der relative Fehler ist natürlich

    ||Av - lambda*v|| / ||Av||

    (wenn man nur durch ||v|| teilen würde, wäre das Quatsch, weil die Länge eines Eigenvektors ja nicht eindeutig ist.)



  • Magst du uns denn noch erzählen, ob du das Problem inzwischen gelöst hast?



  • Hi Mups,

    habe auf deinen Vorschlag hin mal den relativen Fehler
    ||Av-lambda*v||/||Av|| unter Verwendung der Maximumsnorm und der eukl. Norm berechnet und Werte zwischen 0,2 bis 1,0 für Maxnorm und 1,0-5,0 für die eukl. Norm bekommen.
    Ich hätte 10^(-5) oder so erwartet.
    Sieht irgendwie bescheiden schön aus.

    Danke für deine Hilfe und dein Interesse.



  • Wie mir schein, hat ein dummer Programmierfehler mich ziemlich auf Glatteis gebracht. Die ausgerechneten Eigenwerte waren eigentlich die ganze Zeit recht ordentlich.

    Sorry für eure Mühen und vielen Dank



  • Das kommt in den besten Familien vor 🤡


Anmelden zum Antworten