Python 求解一个有两个变量的系统函数方程
我正在尝试模拟一个篮球三分球。考虑到不同的力,我有球的位置和速度的方程。我的目标是找到初始速度v0=(v0x,v0y,v0z)和角自旋omega0x的不同组合,从而最大限度地提高得分3分的机会 我的策略是数值求解t=1s时的速度方程,保持除初速和自旋外的所有变量不变。我的初速和自旋是一个包含不同值的数组。一旦我得到了时间t=1时的速度值,对于不同的v0和ω0,我将把它们插入到位置方程中,然后根据不同的速度和自旋得到最终的x,y和z坐标的不同值 我的方程式如下:Python 求解一个有两个变量的系统函数方程,python,numpy,physics,equation,Python,Numpy,Physics,Equation,我正在尝试模拟一个篮球三分球。考虑到不同的力,我有球的位置和速度的方程。我的目标是找到初始速度v0=(v0x,v0y,v0z)和角自旋omega0x的不同组合,从而最大限度地提高得分3分的机会 我的策略是数值求解t=1s时的速度方程,保持除初速和自旋外的所有变量不变。我的初速和自旋是一个包含不同值的数组。一旦我得到了时间t=1时的速度值,对于不同的v0和ω0,我将把它们插入到位置方程中,然后根据不同的速度和自旋得到最终的x,y和z坐标的不同值 我的方程式如下: #velocity vector
#velocity vector components
vx = v0x + F_m*t /m - F_d/m * vx/(np.sqrt(vx**2 +vy**2 +vz**2)) *t
vy = v0y - F_d*t/m * vy/(np.sqrt(vx**2 +vy**2 +vz**2)) *t
vz = v0z - F_d*t/m * vz/(np.sqrt(vx**2 +vy**2 +vz**2)) *t
#Position vector components
x= v0x*t + F_m *t**2 /(2*m) - F_d*t**2/(2*m)*vx/(np.sqrt(vx**2 +vy**2 +vz**2))
y= v0y*t + F_m *t**2 /(2*m) - F_d*t**2/(2*m)*vy/(np.sqrt(vx**2 +vy**2 +vz**2))
z= v0z*t + F_m *t**2 /(2*m) - F_d*t**2/(2*m)*vz/(np.sqrt(vx**2 +vy**2 +vz**2))
t = 1
v0x = np.arange()
v0y = np.arange()
v0z = np.arange()
omega = np.arange()
m =
F_d =
F_m =
问题是这个等式看起来很糟糕,我不知道Python中有什么方法可以让我解决这个问题。此外,还有许多不同的v0x、v0y、v0z和ω组合可供尝试。
任何帮助都会很好。看来是最好的选择。不过,你的方程式需要一些重要的重写。基本上,您需要找到一种方法,以dy/dt=f(y,t)
的形式重写方程(在您的情况下,y
将是[vx,vy,vz,x,y,z]
。这是物理学中的一项标准技术,你可以在任何物理教科书中找到,因此如果你不熟悉,我建议从那里开始。一旦你找到了f
,你可以将它输入到scipy
的ODE解算器中,并得到球的轨迹
至于初始参数,恐怕这里没有很好的通解,它实际上取决于你正在研究的系统,所以我先简单地施加几千个初始条件,看看你得到了什么样的结果。你确定你的方程是正确的吗?(我问这个问题是因为
omega
没有出现在它们里面)。否则,scipy.integrate.OdeSolver
对于这类问题总是一个很好的工具。您好,谢谢您的提问。ω是角速度。为了简化起见,我决定它是常数,并且只作用于x方向。它是马格纳斯力F_m的一部分。