WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Drehachse über Eigenvektor bestimmen

 

Inori
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2015, 11:30     Titel: Drehachse über Eigenvektor bestimmen
  Antworten mit Zitat      
Hallo, ich stehe gerade vor einem Problem und weiß nicht wie ich es lösen könnte. Bitte entschuldigt, falls ich mich irgendwie nicht richtig ausdrücke, das ist mein erster Beitrag.

Ich möchte mit Hilfe von Matlab die Drehachse einer Matrix bestimmen. Dazu berechne ich die Eigenvektoren. Nun, ich weiß, dass die Drehachse der normierte Eigenvektor zum Eigenwert 1 ist. Wie kann ich nun mir den dazugehörigen Vektor ausgeben lassen, wenn ich die Eigenwerte bestimme?

Ich habe es zunächst über [Q,D] = eig(R) versucht. Q ist dann die Matrix mit den Eigenvektoren und D mit dazugehörigen Eigenwerten. Ich habe es dann über eine for-Schleife probiert in dem ich nach einem Eigenwert == 1 gesucht habe und dann den dazugehörigen Eigenvektor abgespeichert. Das hat zunächst funktioniert, aber leider musste ich dann feststellen, dass es nicht immer funktioniert. Ich habe teilweise imaginäre Eigenwerte rausbekommen und irgendwie lief dann etwas schief bei dem Vergleich, ob der Eigenwert gleich 1 ist.

Ich wäre euch sehr dankbar, wenn ihr einen guten Tipp für mich hättet.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.04.2015, 15:25     Titel: Re: Drehachse über Eigenvektor bestimmen
  Antworten mit Zitat      
Hallo Inori,

Dann poste doch mal den Code und erkläre im Detail, was genau schief gelaufen ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Inori
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2015, 18:38     Titel: Re: Drehachse über Eigenvektor bestimmen
  Antworten mit Zitat      
Hallo Jan,

mein Code ist folgender:

Code:
[Q,D] = eig(QR);
Drehachse = [];
for i=1:1:3
 if (D(i,i)==1)
  Drehachse = Q(:,i);
 end
end


Das Problem ist nun, das ich zwar ein Eigenwert 1 bekomme, aber bei der if-Abfrage findet er diesen nicht und somit bleibt meine Drehachse leer. Mittlerweile habe ich aber rausgefunden, dass es daran liegt, dass weil die Einträge in der D Matrix in Format float sind, der Eigenwert 1 an irgendeiner Nachkommastelle ungleich 0 ist. Um das zu lösen, runde ich nun die Zahl ab. Somit sieht mein Code so aus:

Code:
[Q,D] = eig(QR);
Drehachse = [];
for i=1:1:3
 if (round(D(i,i),7)==1)
  Drehachse = Q(:,i);
 end
end


Ich frage mich aber, ob das auch ohne Runden irgendwie gehen könnte? Ich befürchte es nämlich, dass ich vielleicht irgendwann zwei solcher Eigenwerte hätte, die zwar gleich 1 sind, aber eine ist vielleicht 1.00000001 und die andere 1.0000000001, somit kommen beide in Frage, aber die zweite wäre die richtige. Oder aber vielleicht ist die Zahl auch 1.00001 und ich runde viel zu weit hinten ab. Vielleicht habe ich auch irgendwo einen Denkfehler.

Liebe Grüße
Inori
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.04.2015, 09:42     Titel: Re: Drehachse über Eigenvektor bestimmen
  Antworten mit Zitat      
Hallo Inori,

Statt mit SINGLEs solltest Du besser mit DOUBLEs rechnen:
Code:
[Q,D] = eig(double(QR));
index = find(abs(diag(D)) - 1 < 1e7);
if length(index) ~= 1
  warning('Several axes of rotation found inside tolerance 1e7!')
  [dummy, index] = min(abs(diag(D)) - 1);
end
Drehachse = Q(:, index);

Es ist immer möglich, dass die Matrix mehrere Eigenwerte mit dem Wert 1 hat. Diesen Fall sollte man mit einer Meldung anzeigen lassen, damit man eine Chance hat darauf zu reagieren.

Die Bestimmung der Eigenwerte geschieht numerisch. Dabei kommt es immer zu Rundungsfehlern. Dies muss man unbedingt berücksichtigen, denn verhindern kann man es nicht. Zudem kann es noch sehr schlecht konditionierte Probleme geben, bei dem die Bestimmung des Eigenwertes bedeutende Rundungfehler geben kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Inori
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2015, 08:53     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Hilfe. Allerdings habe ich jetzt trotzdem noch ein Problem bzw. ich verstehe es noch nicht ganz. In meinem Beispiel bekomme ich drei Eigenwerte raus:

-1.665334536937735e-16 + 9.999999999999998e-01i
-1.665334536937735e-16 - 9.999999999999998e-01i
9.999999999999997e-01 + 0.000000000000000e+00i

Eigentlich kommt ja nur der letzte Eigenwert in frage, die anderen sind doch komplex. Aber es kommt eine Warnung, dass es mehrere Eigenwerte mit dem Wert 1 gibt.

Liebe Güße
Inori
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.