类 DormandPrince853Integrator

所有已实现的接口:
ButcherArrayProvider, ODEIntegrator

public class DormandPrince853Integrator extends EmbeddedRungeKuttaIntegrator
该类实现了普通微分方程的8(5,3) Dormand-Prince积分器。

该积分器是一个8(5,3)阶的嵌入式Runge-Kutta积分器,用于本地外推模式(即使用高阶公式计算解)并具有步长控制(和自动步长初始化)以及连续输出。该方法每步使用12个函数评估进行积分,4个评估进行插值。然而,由于第一个插值评估与下一步的第一个积分评估相同,我们将其包含在积分器中而不是插值器中,并指定该方法为fsal。因此,尽管这里有13个阶段,但实际成本为每步12个评估,即使不进行插值,插值的额外成本仅为3个评估。

该方法基于Dormand和Prince的8(6)方法(即积分为8阶,误差估计为6阶),由Hairer和Wanner修改为使用5阶误差估计和3阶校正。这种修改是因为原始方法在某些情况下失败(当步长过大时可能会接受错误的步骤,例如在Brusselator问题中),并且在应用于具有不连续性的问题时存在严重困难。这种修改在Hairer、Norsett和Wanner的参考书第一卷(非刚性问题)的第二版中有解释:解常微分方程(Springer-Verlag,ISBN 3-540-56670-8)。

  • 构造器详细资料

    • DormandPrince853Integrator

      public DormandPrince853Integrator(double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance)
      简单构造函数。使用给定的步长界限构建一个五阶Dormand-Prince积分器
      参数:
      minStep - 最小步长(符号无关,无论积分方向是向前还是向后,最后一步可以小于此值)
      maxStep - 最大步长(符号无关,无论积分方向是向前还是向后,最后一步可以小于此值)
      scalAbsoluteTolerance - 允许的绝对误差
      scalRelativeTolerance - 允许的相对误差
    • DormandPrince853Integrator

      public DormandPrince853Integrator(double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance)
      简单构造函数。使用给定的步长界限构建一个五阶Dormand-Prince积分器
      参数:
      minStep - 最小步长(符号无关,无论积分方向是向前还是向后,最后一步可以小于此值)
      maxStep - 最大步长(符号无关,无论积分方向是向前还是向后,最后一步可以小于此值)
      vecAbsoluteTolerance - 允许的绝对误差
      vecRelativeTolerance - 允许的相对误差
  • 方法详细资料

    • getC

      public double[] getC()
      从Butcher数组中获取时间步长(不包括第一个零)。
      返回:
      从Butcher数组中获取时间步长(不包括第一个零)
    • getA

      public double[][] getA()
      从Butcher数组中获取内部权重(不包括第一行空行)。
      返回:
      从Butcher数组中获取内部权重(不包括第一行空行)
    • getB

      public double[] getB()
      从Butcher数组中获取高阶方法的外部权重。
      返回:
      从Butcher数组中获取高阶方法的外部权重
    • createInterpolator

      protected org.hipparchus.ode.nonstiff.DormandPrince853StateInterpolator createInterpolator(boolean forward, double[][] yDotK, ODEStateAndDerivative globalPreviousState, ODEStateAndDerivative globalCurrentState, EquationsMapper mapper)
      创建一个插值器。
      指定者:
      createInterpolator 在类中 EmbeddedRungeKuttaIntegrator
      参数:
      forward - 积分方向指示器
      yDotK - 中间点的斜率
      globalPreviousState - 全局步骤的起始点
      globalCurrentState - 全局步骤的结束点
      mapper - 所有方程的方程映射器
      返回:
      从Butcher数组中获取高阶方法的外部权重
    • getOrder

      public int getOrder()
      获取方法的阶数。
      指定者:
      getOrder 在类中 EmbeddedRungeKuttaIntegrator
      返回:
      方法的阶数
    • estimateError

      protected double estimateError(double[][] yDotK, double[] y0, double[] y1, double h)
      计算误差比率。
      指定者:
      estimateError 在类中 EmbeddedRungeKuttaIntegrator
      参数:
      yDotK - 在第一阶段计算的导数
      y0 - 步骤开始时的估计
      y1 - 步骤结束时的估计
      h - 当前步长
      返回:
      误差比率,如果步骤应该被拒绝则大于1