我已经在这里待了2个多小时。每条线都打印出我要找的结果。但是,当我运行程序中的所有行时,python打印值或Ixx,Iyy和Ixy。这是为什么?
import numpy as np
Ixx = 14600000
Iyy = 14600000
Ixy = 7080*(47.2-12.5)**2
alpha = 45
x = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)+Ixy*np.sin(2*alpha/180*np.pi)
y = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)-Ixy*np.sin(2*alpha/180*np.pi)
z = 0.5*(Ixx-Iyy)*np.sin(2*alpha/180*np.pi)+Ixy*np.cos(2*alpha/180*np.pi)
print x,y,z
答案 0 :(得分:4)
如果你在python2.x下运行它,那么你将丢失语句2*alpha/180*np.pi
(python3.x应该可以工作)。
按优先顺序(在本例中为从左到右)评估操作,这给出了
((2 * alpha) / 180) * ni.pi
=> (90 / 180) * ni.pi # integer division truncates this to 0
=> 0 * ni.pi
您需要手动转换为浮点数:
np.sin(2.0*alpha/180*np.pi) # the floating point 2.0 will promote alpha to float for the multiply
或者
np.sin(2*float(alpha)/180*np.pi) # explicit, very clear
或者
alpha = 45.0 # this is a little dangerous as you might change the angle in the future and forget to make it a float again
答案 1 :(得分:0)
我不能说我理解为什么,但改变我的鼻窦内部和cosinus术语解决了这个问题。我改变了
x = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)+Ixy*np.sin(2*alpha/180*np.pi)
y = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)-Ixy*np.sin(2*alpha/180*np.pi)
z = 0.5*(Ixx-Iyy)*np.sin(2*alpha/180*np.pi)+Ixy*np.cos(2*alpha/180*np.pi)
到
Ixx_a = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(np.pi*alpha/90) + Ixy*np.sin(np.pi*alpha/90)
Iyy_a = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(np.pi*alpha/90) - Ixy*np.sin(np.pi*alpha/90)
Ixy_a = 0.5*(Ixx-Iyy)*np.sin(np.pi*alpha/90)+Ixy*np.cos(np.pi*alpha/90)
在数学上是等价的,但显然numpy发现它更容易计算。