Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python关于周期性的ODE求解器_Python_Scipy_Integration_Ode - Fatal编程技术网

python关于周期性的ODE求解器

python关于周期性的ODE求解器,python,scipy,integration,ode,Python,Scipy,Integration,Ode,我想集成一个控制问题,即dx/dt=a.f(t)形式的常微分方程,其中 x(t)是R^3中的函数,f(t)是R^4中的函数,a是矩阵3x4。在我的特例中,f(t)=f'(t),即函数f的时间导数。此外,f是1-周期的。因此,在区间[0,1]上积分ODE应该会再次产生起始位置。然而,像scipy.integrate中的solve_ivp这样的方法根本不考虑这个周期性(我已经尝试了所有可能的方法,比如RK45、Radau、DOP853、LSODA) 是否有一种特殊的ODE解算器能够将这种周期性精确到

我想集成一个控制问题,即dx/dt=a.f(t)形式的常微分方程,其中 x(t)是R^3中的函数,f(t)是R^4中的函数,a是矩阵3x4。在我的特例中,f(t)=f'(t),即函数f的时间导数。此外,f是1-周期的。因此,在区间[0,1]上积分ODE应该会再次产生起始位置。然而,像
scipy.integrate
中的
solve_ivp
这样的方法根本不考虑这个周期性(我已经尝试了所有可能的方法,比如
RK45、Radau、DOP853、LSODA


是否有一种特殊的ODE解算器能够将这种周期性精确到很高的程度?

所有算法都会受到精度损失的影响,因此很可能永远无法实现精确的周期性。尽管如此,您也可以尝试通过使用参数“atol”和“rtol”来提高积分的精度,这将使积分误差在每个时间步保持在(atol+rtol*y)以下。您通常可以降低到atol=rtol=1e-14。

所有算法都会受到精度损失的影响,因此您很可能永远无法实现精确的周期性。尽管如此,您也可以尝试通过使用参数“atol”和“rtol”来提高积分的精度,这将使积分误差在每个时间步保持在(atol+rtol*y)以下。通常可以低至atol=rtol=1e-14。

虽然辛积分器靠近能量表面,但它们在保持表面内相位方面的精确度要低得多。检查是否有圆周运动,或者如您所述的行星运动。周期仅在方法顺序内精确。//在给定的任务中,你在哪里能认出哈密顿系统?@LutzLehmann确实,我错了。我据此编辑了我的答案,谢谢你的评论!谢谢你,实际上你必须选择尽可能低的
atol
rtol
。然后,以机器精度获得结果。否则,就曲线F的范数而言,有趣的是,
RK45
的误差在10E-6处达到一个平台,而
Radau
的误差在10E-8处达到一个平台。@mathology可能尝试最高阶方法“DOP853”。它的等级为8,而Radau和RK45的等级为5。这大致意味着,当时间步长非常小时,DOP853的错误
dt^3
比前面的两种方法低几倍。当使用非常低的公差(~1e-14)时,通常最好使用可能的最高阶。您可能还会在Github上找到更高阶的emthods。此外,我想知道,如果使用固定时间步长(无基于误差容差的自适应时间步长),使周期为整数个时间步长,是否可以提供更好的结果。对于显式算法(非Radau),您可以通过设置atol=rtol=1e+99(是)和“max_步长”来“破解”您的方法,通过solve_ivp强制使用固定时间步长=dt。对于隐式算法来说,这不是一个好主意,因为atol和rtol用于牛顿终止标准,当设置为如此高的值时,可能会导致不合理的行为。虽然辛积分器保持在能量曲面附近,但它们在保持曲面内的相位方面要精确得多。检查是否有圆周运动,或者如您所述的行星运动。周期仅在方法顺序内精确。//在给定的任务中,你在哪里能认出哈密顿系统?@LutzLehmann确实,我错了。我据此编辑了我的答案,谢谢你的评论!谢谢你,实际上你必须选择尽可能低的
atol
rtol
。然后,以机器精度获得结果。否则,就曲线F的范数而言,有趣的是,
RK45
的误差在10E-6处达到一个平台,而
Radau
的误差在10E-8处达到一个平台。@mathology可能尝试最高阶方法“DOP853”。它的等级为8,而Radau和RK45的等级为5。这大致意味着,当时间步长非常小时,DOP853的错误
dt^3
比前面的两种方法低几倍。当使用非常低的公差(~1e-14)时,通常最好使用可能的最高阶。您可能还会在Github上找到更高阶的emthods。此外,我想知道,如果使用固定时间步长(无基于误差容差的自适应时间步长),使周期为整数个时间步长,是否可以提供更好的结果。对于显式算法(非Radau),您可以通过设置atol=rtol=1e+99(是)和“max_步长”来“破解”您的方法,通过solve_ivp强制使用固定时间步长=dt。对于隐式算法,这不是一个好主意,因为atol和rtol用于牛顿终止标准,当设置为如此高的值时,可能会导致不合理的行为。请举例说明如何违反周期性?您是否设置了atol、rtol,并根据这些公差比较数值?//您是否检查了导数计算中的错误?//你能给你的问题添加一个代码示例吗(就是这样)?你能举例说明周期是如何被违反的吗?您是否设置了atol、rtol,并根据这些公差比较数值?//您是否检查了导数计算中的错误?//你能为你的问题添加一个代码示例吗?