我需要用基于重力影响空气阻力的python代码来解决这个问题 y“= g - (1/70)*(y')^ 2,g = 9.8,y(0)= 0,y'(0)= 0
我使用Euler-Heun方法解决了类似的问题 y“= y - (1/10)* y',y(0)= 0,y'(0)= 1,[0,无穷大]
我如何修改我要解决的第一个空气阻力下降问题?有什么建议吗?
h= 0.0001
y = 0.0
t = 0.0
v = 1.0
while y >= 0:
ym = v*h+y
vm = v - h*(y +v*0.1)
y = y + 0.5*h*(v+vm)
v = v - 0.5*h*(y + ym + 0.1*(v + vm))
t += h
error = abs(1.0 - y/ym)
if error > 1.0e-8:
h*=0.1
if error < 1.0e-10:
h*=1.1
print y, v, t
注意:我也试过一个简单的euler方法,但错误不够准确
delta_t = .000001 #time step size
y = 0. #initial height
g = 9.8 #gravitational acceleration
t = 0. #initial time
y_prime = 0. #initial velocity
y_2_prime = g #initial acceleration
while y < 100:
y = y_prime * delta_t + y
y_prime = y_2_prime * delta_t + y_prime
y_2_prime = g - 0.014285714* y_prime**2
t = t + delta_t
print t
答案 0 :(得分:3)
你可以使用Runge-Kutta方法,它基本上是一个更高阶的Euler方法。您可以查看Wikipedia以获取更多相关详细信息。这很常见,所以你不应该在谷歌搜索它并找到一些关于如何实现它的好例子。
还有其他方法,但大多数人(至少那些开始ODE整合的人)就像Runge-Kutta。