类 EmbeddedRungeKuttaFieldIntegrator<T extends CalculusFieldElement<T>>

类型参数:
T - 字段元素的类型
所有已实现的接口:
FieldODEIntegrator<T>, FieldButcherArrayProvider<T>
直接已知子类:
DormandPrince54FieldIntegrator, DormandPrince853FieldIntegrator, HighamHall54FieldIntegrator

public abstract class EmbeddedRungeKuttaFieldIntegrator<T extends CalculusFieldElement<T>> extends AdaptiveStepsizeFieldIntegrator<T> implements FieldButcherArrayProvider<T>
该类实现了普通微分方程的所有嵌入式龙格-库塔积分器的共同部分。

这些方法是具有两组系数的嵌入式显式龙格-库塔方法,允许估计误差,它们的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(first same as last)方法。这意味着一个步骤中导数的最后评估与下一个步骤中的第一个评估相同。然后,这个评估可以从一个步骤重用到下一个步骤,这样的方法的成本实际上是s-1个评估,尽管该方法仍然具有s个阶段。这种行为仅适用于成功的步骤,如果在误差估计阶段之后拒绝步骤,则不会保存任何评估。对于一个fsal方法,我们有cs = 1和asi = bi对于所有i。

  • 构造器详细资料

    • EmbeddedRungeKuttaFieldIntegrator

      protected EmbeddedRungeKuttaFieldIntegrator(Field<T> field, String name, int fsal, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance)
      使用给定的Butcher数组构建一个龙格-库塔积分器。
      参数:
      field - 时间和状态向量元素所属的字段
      name - 方法的名称
      fsal - fsal方法的预计算导数的索引,如果方法不是fsal则为-1
      minStep - 最小步长(符号无关,无论是正向还是反向积分,最后一步可以比这个小)
      maxStep - 最大步长(符号无关,无论是正向还是反向积分,最后一步可以比这个小)
      scalAbsoluteTolerance - 允许的绝对误差
      scalRelativeTolerance - 允许的相对误差
    • EmbeddedRungeKuttaFieldIntegrator

      protected EmbeddedRungeKuttaFieldIntegrator(Field<T> field, String name, int fsal, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance)
      使用给定的Butcher数组构建一个龙格-库塔积分器。
      参数:
      field - 时间和状态向量元素所属的字段
      name - 方法的名称
      fsal - fsal方法的预计算导数的索引,如果方法不是fsal则为-1
      minStep - 最小步长(即使是反向积分也必须是正数,最后一步可以比这个小)
      maxStep - 最大步长(即使是反向积分也必须是正数)
      vecAbsoluteTolerance - 允许的绝对误差
      vecRelativeTolerance - 允许的相对误差
  • 方法详细资料

    • fraction

      protected T fraction(int p, int q)
      创建一个分数。
      参数:
      p - 分子
      q - 分母
      返回:
      在实例字段中计算的p/q
    • fraction

      protected T fraction(double p, double q)
      创建一个分数。
      参数:
      p - 分子
      q - 分母
      返回:
      在实例字段中计算的p/q
    • createInterpolator

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

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

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

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

      public FieldODEStateAndDerivative<T> integrate(FieldExpandableODE<T> equations, FieldODEState<T> initialState, T finalTime) throws MathIllegalArgumentException, MathIllegalStateException
      将微分方程积分到给定时间。

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

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

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

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

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

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

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

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