python-3.x - 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
shape (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)
。这样对吗?
解决方案
是的,这是正确的,position.y[1]
包含解决方案函数的值y(t)
。您还应该发现 与position.y[0]
不谋而合position.t
。
如果您想要额外的值或更快的计算,请使用teval
ordense_output
选项。使用该max_step
参数,您将强制执行 100 多个内部步骤。如果没有该选项和其他选项之一,内部步骤的数量将适应内部误差容限,并且通常更少。然后从分段多项式插值函数中获得所需点的值,隐式teval=...
或显式地在返回对象中包含“密集输出”插值函数作为position.sol
.
推荐阅读
- asp.net-core - 选择 HTML 助手获取扩展方法而不是枚举字符串
- html - 使用负边距将 div1 粘附在 div2 的左侧
- html - 如何在角度中使用(#)动态设置 id?
- javascript - d3 条件文本颜色(在彩色矩形内)
- javascript - 未定义不是 Photoshop 脚本中的对象
- javascript - 是的,验证访问 parent.parent
- ios - 当标记拖动到达iOS中的屏幕边界时如何移动地图相机?
- visual-studio - 为什么适用于 Visual Studio 2017 和 2019 的 .Net Core SDK 不同?
- sql - SQL - 中断查询
- php - 如何使用 laravel 发送电子邮件