Zum Beispiel, wenn I den folgenden Code verwenden, um den Winkel zwischen zwei Vektoren x
und p
zu berechnen:Warum bekomme ich eine komplexe Nummer mit acos?
x = [1 1 -1];
p = [-1 -1 1];
angle = acos(dot(x,p)/(norm(x) * norm(p)));
es zeigt, dass angle = 3.141592653589793 - 0.000000021073424i
, die eine komplexe Zahl ist.
Aber wir alle wissen, dass das Punktprodukt von x
und p
ist -3, und das Produkt der Normen x
und p
3, so angle = acos(-3/3)
, so sollten Winkel genau Pi, 3.14159. Warum gibt MatLab eine komplexe Zahl, und wie mache ich das Ergebnis stattdessen zu einer reellen Zahl?
ich nicht in der Nähe von MATLAB‘, aber können Sie prüfen, ob der Zwischenwert ist eigentlich -1 nicht etwas, ganz in der Nähe, aber außerhalb [-1,1] reichen aufgrund Gleitkomma Fehler? – Amro
hier ist eine relevante Seite: http://www.mathworks.com/matlabcentral/answers/101590-how-can-i-determine-the-angle-between-two-vectors-in-matlab (siehe insbesondere den Vergleich zwischen 'acos' und' atan2' Genauigkeit. – Amro