例如,如果我使用以下代码计算两个向量x
和p
之间的角度:
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,所以{ {1}},所以角度应该是pi,3.14159。为什么MatLab给出一个复数,我如何将结果改为实数呢?
答案 0 :(得分:2)
您的问题始于规范化:
plt.xticks()
在这里,您获得的值略微偏离plt.plot(data['velocity'])
plt.xticks(range(len(data['time'])), data['time'])
您所期望的值:
norm(x) * norm(p)
传播错误,最后得到一个acos(x),其中x略高于1。
3
是一种可能导致合理结果的操作。用笔和纸解决它时,你会保留平方根并先进行乘法运算。以这种方式重写它以获得更好的数值概率:
> (norm(x) * norm(p))-3
ans = -4.4409e-16