我有一个物理问题,从来没有在python上使用odeint或任何数值求解ODE而且有点困惑。我试着看其他例子,但无法理解,我希望得到一些帮助。我的ODE是:
其中α是给定角度,g是常数。
R = SQRT(X ^ 2 + Y ^ 2)
该程序将要求x_0,dx / dt_0和dy / dt_0。
我大多不确定如何在python中解决ODE问题。我已经看到我应该将我的ODE分成dr'/ dt,因为odeint只会执行一阶ODE。有人可以帮助解释如何做到这一点?
我尝试使用另一个例子来尽可能地做,但我被卡住了:
import numpy as np
import matplotlib.pylab as plt
from scipy.integrate import odeint
pi=np.pi
sin=np.sin
cos=np.cos
sqrt=np.sqrt
alpha=pi/4
g=9.80665
y0=0.0
theta0=0.0
x=[]
y=[]
sina = sin(alpha)**2
second_term = g*sin(alpha)*cos(alpha)
x0 = float(raw_input('What is the initial x in meters?'))
x_vel0 = float(raw_input('What is the initial velocity in the x direction in m/s?'))
y_vel0 = float(raw_input('what is the initial velocity in the y direction in m/s?'))
t_f = float(raw_input('What is the maximum time in seconds?'))
r0 = x0
r = sqrt(float(x)**2 + float(y)**2)
def deriv_z(z,r):
r, rdot=z
return [rdot,r*sina-second_term]
zdot0=x_vel0**2+y_vel0**2
z0 = [r0,zdot0]
times = np.linespace(0, t_f, 1000)
z = odeint(deriv_z,z0,times)