我正在尝试使用solve_ivp()
函数来解决带有依赖于状态的参数的ODE。想法是在给定轨迹的当前状态的每个时刻更新ODE。
给出如下的ODE模型:
def model(t, y, arg1, arg2):
'''
Some Dynamics model that includes arg1 and arg 2
'''
return dy_dt
arg1
和arg2
是使用其他一些函数计算的:
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)
什么是实现此目的的好方法?
答案 0 :(得分:2)
一种简单的解决方案是在gen_args
中调用model
:
def model(t, y):
arg1, arg2 = gen_args(y)
dy_dt = ...
return dy_dt
答案 1 :(得分:0)
添加到@Warren Weckesser答案
在'solve_ivp'的args参数中包含任何状态和(或)与时间相关的参数的意义很小。它们应包含在 “ solve_ivp”本身的“ fun”参数。 不可能包含受@Warren Weckesser启发而类似于this answer的状态和(或)与时间有关的参数。
中的args参数solve_ivp(fun,t_span,y0,method ='RK45',t_eval = None,density_output = False,events = None,vectorized = False,args = None,** options)
只能接受一个常量参数的元组(例如浮点数,整数等)