Python:如何从solve_ivp解释y

问题描述

这肯定是一个微不足道的问题,但它妨碍了我对 solve_ivpscypy.integrate 的完全理解,我目前正在接受培训...... 下图定义了我试图用 solve_ivp 解决的问题:

enter image description here

所以,为了找到y(t),我指定了要积分的函数、初始值、时间跨度,然后我运行solve_ivp,如下代码所示:

# Function to integrate
def fun(t,u):    
    x1 = u[0]     # "u": function to found / 4 components x1,x2,x3 and x4
    x2 = u[1]
    x3 = u[2]
    x4 = u[3]

    dx1_dt = 1   # "u'(t) = F(t,u(t))": derivatives of components
    dx2_dt = x3
    dx3_dt = x4
    dx4_dt = np.exp(x1) + 5*x2 - x1*x3
    
    return [dx1_dt,dx2_dt,dx3_dt,dx4_dt]

# Specify initial conditions
x1_0 = 0.0
x2_0 = 0.0
x3_0 = 0.0
x4_0 = 0.0

y_0 = np.array([x1_0,x2_0,x3_0,x4_0])

# Specify initial and final times
t0 = 0.0  
tf = 10.0 

t_span = np.array([t0,tf])

# Resolution
position = solve_ivp(fun,t_span,y_0,method='RK45',max_step=0.1)

现在,solve_ivp 返回一个名为 ndarrayy(在本例中,它将是 position.y,形状为 (4,104)),根据scipy.integrate.solve_ivp 文档,提供了“t 处解的值”

到目前为止,一切都很好。

我的问题只是

在当前问题中,给出 y(t) 的值是什么:y[0],y[1],y[2]y[3]?据我了解solve_ivp是如何工作的,它应该是y[1],对应向量u(t)的第二行。对吗?

解决方法

是的,没错,position.y[1] 包含求解函数 y(t) 的值。您还应该发现 position.y[0]position.t 重合。

如果您想要额外的值或更快的计算,请使用 tevaldense_output 选项。使用 max_step 参数,您将强制执行 100 多个内部步骤。如果没有这个选项和其他选项之一,内部步骤的数量将适应内部错误容限,通常更少。然后从分段多项式插值函数中获得所需点的值,可以隐式地使用 teval=...,或者显式地将“密集输出”插值函数包含在返回对象中作为 position.sol。>