类 EmbeddedRungeKuttaIntegrator

所有已实现的接口:
ButcherArrayProvider, ODEIntegrator
直接已知子类:
DormandPrince54Integrator, DormandPrince853Integrator, HighamHall54Integrator

public abstract class EmbeddedRungeKuttaIntegrator extends AdaptiveStepsizeIntegrator implements ButcherArrayProvider
该类实现了普通微分方程的所有嵌入式龙格-库塔积分器的共同部分。

这些方法是具有两组系数的嵌入式显式龙格-库塔方法,允许估计误差,它们的Butcher数组如下:

    0  |
   c2  | a21
   c3  | a31  a32
   ... |        ...
   cs  | as1  as2  ...  ass-1
       |--------------------------
       |  b1   b2  ...   bs-1  bs
       |  b'1  b'2 ...   b's-1 b's
 

事实上,我们更倾向于使用由ej = bj - b'j定义的数组来直接计算错误,而不是计算两个估计然后进行比较。

一些方法被称为fsal(第一个与最后一个相同)方法。这意味着一步中导数的最后评估与下一步中的第一个评估相同。然后,这个评估可以从一步重用到下一步,这样的方法的成本实际上是s-1次评估,尽管该方法仍然具有s个阶段。这种行为仅适用于成功的步骤,如果在误差估计阶段之后拒绝步骤,则不会保存任何评估。对于fsal方法,我们有cs = 1和asi = bi对于所有i。

  • 构造器详细资料

    • EmbeddedRungeKuttaIntegrator

      protected EmbeddedRungeKuttaIntegrator(String name, int fsal, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance)
      使用给定的Butcher数组构建一个龙格-库塔积分器。
      参数:
      name - 方法的名称
      fsal - fsal方法的预计算导数的索引,如果方法不是fsal则为-1
      minStep - 最小步长(符号无关,无论是正向还是反向积分,最后一步可以比此值小)
      maxStep - 最大步长(符号无关,无论是正向还是反向积分,最后一步可以比此值小)
      scalAbsoluteTolerance - 允许的绝对误差
      scalRelativeTolerance - 允许的相对误差
    • EmbeddedRungeKuttaIntegrator

      protected EmbeddedRungeKuttaIntegrator(String name, int fsal, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance)
      使用给定的Butcher数组构建一个龙格-库塔积分器。
      参数:
      name - 方法的名称
      fsal - fsal方法的预计算导数的索引,如果方法不是fsal则为-1
      minStep - 最小步长(即使是反向积分也必须是正数,最后一步可以比此值小)
      maxStep - 最大步长(即使是反向积分也必须是正数)
      vecAbsoluteTolerance - 允许的绝对误差
      vecRelativeTolerance - 允许的相对误差
  • 方法详细资料

    • createInterpolator

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

      public abstract int getOrder()
      获取方法的阶数。
      返回:
      方法的阶数
    • getSafety

      public double getSafety()
      获取步长控制的安全因子。
      返回:
      安全因子
    • setSafety

      public void setSafety(double safety)
      设置步长控制的安全因子。
      参数:
      safety - 安全因子
    • integrate

      public ODEStateAndDerivative integrate(ExpandableODE equations, ODEState initialState, double finalTime) throws MathIllegalArgumentException, MathIllegalStateException
      将微分方程积分到给定时间。

      此方法解决一个初始值问题(IVP)。

      由于此方法存储一些在积分期间在其公共接口中提供的内部状态变量(可通过ODEIntegrator.getCurrentSignedStepsize()访问),因此它不是线程安全的。

      指定者:
      integrate 在接口中 ODEIntegrator
      参数:
      equations - 要积分的微分方程
      initialState - 初始状态(时间,主要和次要状态向量)
      finalTime - 积分的目标时间(可以设置为小于t0的值以进行反向积分)
      返回:
      最终状态,如果积分达到目标,则其时间将与finalTime相同,但如果某个ODEEventHandler在某一点停止它,则可能不同。
      抛出:
      MathIllegalArgumentException - 如果积分步长太小
      MathIllegalArgumentException - 如果无法将事件的位置夹在中间
      MathIllegalStateException - 如果函数评估次数超过
    • getMinReduction

      public double getMinReduction()
      获取步长控制的最小减少因子。
      返回:
      最小减少因子
    • setMinReduction

      public void setMinReduction(double minReduction)
      设置步长控制的最小减少因子。
      参数:
      minReduction - 最小减少因子
    • getMaxGrowth

      public double getMaxGrowth()
      获取步长控制的最大增长因子。
      返回:
      最大增长因子
    • setMaxGrowth

      public void setMaxGrowth(double maxGrowth)
      设置步长控制的最大增长因子。
      参数:
      maxGrowth - 最大增长因子
    • estimateError

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