例如,如果我使用下面的代码来计算两个向量x
和p
之间的角度:为什么使用acos获得复数?
x = [1 1 -1];
p = [-1 -1 1];
angle = acos(dot(x,p)/(norm(x) * norm(p)));
它表明angle = 3.141592653589793 - 0.000000021073424i
,这是一个复杂的数字。
但我们都知道,x
和p
点积-3,的x
和p
规范的产品是3,那么angle = acos(-3/3)
,所以角度应该完全PI,3.14159。为什么MatLab会给出一个复数,而我怎样才能让结果成为一个真正的数字呢?
我不MATLAB附近,但你可以检查中间值实际上是-1不是很接近,但外面[-1,1]的范围,由于浮点错误? – Amro
这里是一个相关页面:http://www.mathworks.com/matlabcentral/answers/101590-how-can-i-determine-the-angle-between-two-vectors-in-matlab(特别看比较'acos'和'atan2'准确度)。 – Amro