是否可以在Python的ODEINT中更改我的ODE?

问题描述 投票:0回答:1

我正在尝试模拟一个具有微小差异的振荡系统:我希望它在身体向上运动时使用特定的运动方程(O.D.E.),而在身体向下运动时使用另一个运动方程。为了解决这些方程,我使用了Scypi的ODEINT。

例如,让我们考虑经典的质量弹簧系统。我试图使系统在向上运动时以运动方程为外部激励,而在向下运动时以简单方程为激励。

def function (x,t):

    F0 = 10.00
    w = 1.00
    m = 2.00
    c = 1.00
    k = 20.00
    s = x[0]
    dsdt = x[1]

    if x[1] >= 0:
        d2sdt2 = (F0*np.sin(w*t)-c*dsdt-k*s)/m
    else:
        d2sdt2 = (-c*dsdt-k*s)/m

    result = [dsdt,d2sdt2]
    return result

initial = [3.00,0.00]
t = np.linspace(0.00,10.00,101)
y = odeint(function, initial, t)

获得的结果表明,只有第二运动方程对人体起作用[Results Obtained]。我期望身体在外力作用下向上运动时会出现更混乱的运动方式。

是否有更好的方法来实现这一目标?

python dynamic ode odeint
1个回答
0
投票

只需添加一些参数以增加内部步长的密度和输出的密度

t = np.linspace(0.00,10.00,301)
y = odeint(function, initial, t, hmax=0.1, atol = 1e-8, rtol=1e-10)
© www.soinside.com 2019 - 2024. All rights reserved.