如何在python中由odeint返回所有内部定义的时间步长的值

问题描述

我正在scipy中使用odeint集成功能。该函数基本上是x,y,z方向上的速度,我需要对其进行积分才能找到相应的x,y,z位置坐标。 python中的Odeint要求提供时间步长列表,并仅返回这些时间步长的值。但是,我需要在每个内部定义的时间步上计算的x,y,z坐标位置的所有值,而不仅仅是在我作为参数发送的时间步上计算。那么,有没有一种方法可以发送最小和最大时间步长,并获取在给定的最小和最大时间步长之间每个内部定义的时间步长计算出的所有值?

我需要这个的原因是,当我绘制返回的x,y,z坐标时,我得到的是急转弯而不是平滑的路径。因此,为了绘制一条平滑的路径,我需要在每个内部定义的时间步长处计算出的所有坐标。

如果我没记错的话,Matlab中的ODE45函数将返回在每个自动定义的内部时间步长计算出的所有值。有没有办法让它在python中工作?

解决方法

您可以使用scipy.integrate.solve_ivp或通过使用步进器类,旧的ode类或新的RK45,Radau,LSODA等构建自己的时间循环来获得此功能。

请注意,在Matlab中,选项参数'Refine'设置为默认值4,因此,对于每个内部步长,都添加了3个插值点,因此,尽管步长较大,但尽管步长较大,输出仍会弯曲控制。该技巧在python例程中不存在,您必须自己丰富输出。