如何模拟弹跳球?odeint不适用?

2024-10-01 19:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个模拟最简单的落球的代码:

%pylab
from scipy.integrate import odeint
ts = linspace(0, 1)
def f(X, t):
    dx0 = X[1]
    dx1 = -9.8
    return [dx0, dx1]
X = odeint(f, [2, 0], ts)
plot(ts, X[:, 0])

但是一个球在y=0时反弹怎么样?在

我知道,一般来说,碰撞是物理模拟的一个困难部分。然而,我想知道是否真的不可能模拟这个简单的系统,希望用odeint。在


Tags: 代码fromimportreturnplotdefscipyintegrate
1条回答
网友
1楼 · 发布于 2024-10-01 19:20:03

最简单的方法就是增加一个大的力,把粒子踢出禁区。这需要一个能够处理“僵硬”问题的ODE解算器,但幸运的是,odeint使用了{},它可以自动切换到适合此类问题的模式。在

例如

F(x) = { 0              if x > 0
       { big_number     if x < 0

如果阶跃函数稍微四舍五入,数值求解器的时间会稍微轻松一些,例如F(x) = big_number / (1 + exp(x/width))

^{pr2}$

相关问题 更多 >

    热门问题