如何解决Python:如何从solve_ivp解释y
这肯定是一个微不足道的问题,但它妨碍了我对 solve_ivp
中 scypy.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.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
重合。
如果您想要额外的值或更快的计算,请使用 teval
或 dense_output
选项。使用 max_step
参数,您将强制执行 100 多个内部步骤。如果没有这个选项和其他选项之一,内部步骤的数量将适应内部错误容限,通常更少。然后从分段多项式插值函数中获得所需点的值,可以隐式地使用 teval=...
,或者显式地将“密集输出”插值函数包含在返回对象中作为 position.sol
。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。