【问题标题】:Use solve_ivp() from Scipy with dynamic args使用 Scipy 中的 solve_ivp() 和动态参数
【发布时间】:2019-09-16 00:34:03
【问题描述】:

我正在尝试使用solve_ivp() 函数来求解具有状态相关参数的 ODE。这个想法是在给定轨迹的当前状态的每个时刻更新 ODE。

给定ODE模型如下:

def model(t, y, arg1, arg2):
    '''
    Some Dynamics model that includes arg1 and arg 2
    '''
    return dy_dt

arg1arg2 是使用其他函数计算得出的:

def gen_args(y):
    '''
    Calculate arg1 and arg2 based on the state y
    '''
    return arg1, arg2

那我想通过 ODE 模型进行积分:

scipy.integrate.solve_ivp(model, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False)

什么是实现这个的好方法?

我检查过类似的问题,如herehere,但是所有的参数都是外部常量。

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    一个简单的解决方案是在model 中调用gen_args

    def model(t, y):
        arg1, arg2 = gen_args(y)
        dy_dt = ...
        return dy_dt
    

    【讨论】:

      【解决方案2】:

      添加到@Warren Weckesser 的答案

      在“solve_ivp”的 args 参数中包含任何状态和(或)与时间相关的参数是没有意义的。它们应包含在 'solve_ivp' 本身的 'fun' 参数。 不可能包含任何与受@Warren Weckesser 启发的this answer 类似的状态和(或)与时间相关的参数。中的args参数

      solve_ivp( fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, args=None, **options, )

      只能接受一组常量参数(例如浮点数、整数等)

      【讨论】:

        猜你喜欢
        • 2020-10-24
        • 2018-06-23
        • 2021-01-19
        • 2019-05-19
        • 2019-11-06
        • 2021-01-03
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多