首页 > 解决方案 > Python:如何从solve_ivp解释y

问题描述

这肯定是一个微不足道的问题,但它阻止了我完全理解solve_ivpscypy.integrate目前正在训练的内容......下图定义了我试图解决的问题solve_ivp

在此处输入图像描述

因此,为了找到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返回一个ndarray命名y的(在本例中,它将是position.yshape (4, 104)),根据scipy.integrate.solve_ivp文档,它给出了"Values of the solution at t"

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

我的问题只是

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

标签: python-3.xscipydifferential-equations

解决方案


是的,这是正确的,position.y[1]包含解决方案函数的值y(t)。您还应该发现 与position.y[0]不谋而合position.t

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


推荐阅读