Verfasst am: 31.05.2015, 09:54
Titel: Eigenwerte und Eigenvektoren
Hallo zusammen
Ich habe bald einmal eine Klausur und muss mit MATLAB an dieser Klausur Eigenwerte und Eigenvektoren berechnen können. Bis jetzt hat dies auch super funktioniert.
Bei einer Aufgabe bekam ich aber ein anderes Resultat als die eigentliche Lösung. Ich fragte also bei einem Kollegen nach, was er bekam und er kam mit meiner Eingabe auf das richtige Resultat.
Meine Frage ist jetzt:
Wie kann es sein, dass mein Kollege auf ein anderes Resultat kommt wie ich, wenn wir genau das Selbe eingeben?
Die Aufgabenstellung ist die folgende:
1. Bestimmen Sie alle Eigenwerte und die zugehörigen orthonomen Eigenvektoren der Matrix A=[6 10 2; 10 -15 -5; 2 -5 9]
2. Geben Sie die Resultate exakt an (mit Brüchen bzw. Wurzeln, ohne Rundung)
Er versuchte es vor ein paar Sekunden noch auf dem Tablet aus und bekam da auch das falsche Resultat. An was liegt dies?
(Version beidem er das richtige Resultat bekam ist die Selbe wie bei meinem Laptop wo mir das falsche Ergebnis lieferte)
Und auf welchen Prozessoren und Betriebssystem werden die Ergebnisse produziert?
EIG bestimmt ja nicht die Eigenwerte im mathematischen Sinn, sondern berechnet sie näherungsweise numerisch. Nun haben numerische Verfahren nur eine begrenzte Stabilität, so dass minimale Rundungsfehler zu unterschiedlichen Ergebnissen führen können.
Wenn man jetzt noch bedenkt, was die Eigenvektoren sind und einem auffällt, dass sie bei der Test-Matrix senkrecht aufeinander stehen und zwei Eigenwerte identisch sind, kommt man zu dem Schluss, dass beide Lösungen richtig sind. Versuche einfach mal den Code laufen zu lassen, den ich gepostet habe. Wenn die Eigenwert-Gleichungen gelöst werden (mit der gegebenen numerischen Toleranz), sind die Ergebnisse "richtig" - aber halt einfach nicht eindeutig.
Bei mir läuft es mit Windows 8.1 (64-Bit), auf einem Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
Bei meinem Kollegen müsste ich kurz nachfragen, auf dem Tablet hat er aber sicher auch Windows 8 und es ist das Surface Pro.
Ein Rundungsfehler wird es nicht sein denke ich. Sonst wäre die Matrix, die ich bekomme nicht so föllig daneben, oder?
Ich denke, senkrecht aufeinander stehen könnten diese zwei Lösungen. Aber ich liess dies kurz ploten (hoffentlich richtig) und sehe nichts senkrecht aufeinander:
Code:
A=[6102; 10-15-5; 2-59];
[V, W]=eig(A)
D = diag(W)
A * V(:, 1) - D(1) * V(:, 1)
A * V(:, 2) - D(2) * V(:, 2)
A * V(:, 3) - D(3) * V(:, 3)
Nach abklärung mit dem Dozenten habe ich hier nun seine Antwort auf die Unklarheiten meinerseits. Folgend poste ich dir, falls es dich interessiert, seine Antwort:
Zunächst erkennen Sie ja richtig, dass Ihnen Matlab bei einer symmetrischen Matrix einen Satz von orthogonalen, normierten Vektoren liefert. Der Eigenwert 10 ist aber doppelt. Also gehört dazu eine ganze Ebene von Eigenvektoren, alles was senkrecht zu v1 (=w1) steht. Die von Matlab numerisch bestimmten Vektoren v2 und v3 liegen zwar in dieser Ebene, sehen aber nicht sehr appetitlich aus. Um "schönere" Komponenten zu erhalten, können Sie mit dem Eigenwert 10 das Eigenvektorproblem A*v=10*v lösen, bzw. (A-10*E)*v=0. Mit rref([A-10*eye(3)]) erhalten Sie die Bedingung x1-2.5x2-0.5x3=0, wobei zwei Parameter (x2 und x3) beliebig sind. Mit x2=2 und x3=0 finden Sie so den Vektor [5 2 0]'. Den dritten finden Sie entweder mit x2=0 und x3=2 und anschliessender Schmidt'scher Orthogonalisierung, oder einfacher aus dem Vektorprodukt von w1 und w2.
In einer Ebene ist es immer möglich, bei einem Vektor mindestens eine Komponente zu 0 zu machen.
Ich danke dir vielmals, dass du dir für mich Zeit genommen hast und dich meiner Frage gewidmet hast!
Ein Rundungsfehler wird es nicht sein denke ich. Sonst wäre die Matrix, die ich bekomme nicht so föllig daneben, oder?
Doch, genau das können Rundungsfehler bewirken, wenn das Problem im mathematischen Sinne nicht eindeutig ist. Wenn es verschiedene gültige Lösungen gibt können kleinste Rundungen dazu führen, dass verschieden Lösungen berechnet werden.
Wie die Gegenprobe ergab, ist Deine Lösung ja richtig! Die Ergebnisse der Residuen in der Größenordnung 1e-14 zeigen klar, dass die gefundenen Eigenvektoren das Problem lösen.
Man kann an diesem Beispiel viel über Numerik lernen: Zu dem mehrfachen Eigenwert gehörte eine Ebene von Eigenvektoren. Also sind die eigentlichen vektoen gar nicht mehr eindeutig bestimmt. Wenn man nun einfach nur EIG verwendet und dies nicht bedenkt, kann man sich sehr wundern, dass zwei verschieden Rechner unterschiedliche "Lösungen" bestimmen. In diesem Fall lässt sich das Problem noch leicht analysieren. Wenn man aber z.B. an eine Gesamt-Fahrzeug-Simulation denkt, bei der komplexe Systeme mechanisch und dynamisch zusammen wirken, kann es zu sehr verblüffenden Ergebnissen führen.
Genau das ist das Kern-Problem der Numerik. Man löst mal eben eine Differentialgleichung mit einem Integrator und vergisst die Natur der DGL zu analysieren. Vielleicht gibt es Unstetigkeiten, die DGL kann steif sein, oder sehr empfindlich gegenüber den Anfangswerten. Man bekommt trotzdem ein "Ergebnis", aber das ist nicht unbedingt eine realistische "Lösung". Man kann z.B. einen Bleistift simulieren, der stundenlang stabil auf seiner Spitze steht. Mit der Realität hat das dann nichts mehr zu tun! Es ist also keine validierbare Integration, sondern bei der Idealisierung als mathematisches Modell sind wichtige physikalische Hintergründe verloren gegangen.
Das Beispiel mit dem Integrator und der Gesamt-Fahrzeug-Simulation ist übrigens real: Ein großer deutscher Automobil-Produzent hat für einen Integrator einen Schrittweiten-Schätzer verwendet, der nicht zur Natur des Problems passte und deshalb über längere Zeit groben Unfug zusammen simuliert. Leider merkt man das den "Lösungen" nicht an. Und deshalb ist Numerik eine Wissenschaft und nicht nur ein großer Taschenrechner.
Insofern war diese Aufgabe also sehr gut, gerade weil unterschiedliche Ergebnisse dabei heraus kamen!
Was für mich trotzdem immer noch nicht klar erscheint ist, dass wir auf zwei verschiedenen Rechnern zwei verschiedene Resultate bekamen.
Matlab sollte doch das selbe Resultat ausspucken?
Die Einstellungen des Matlabs wurden nicht geändert, es laufen beide auf dem Windows 8, 64 Bit, etc.
Gruss
Pu5h1
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.