类 AdaptiveStepsizeIntegrator

java.lang.Object
org.hipparchus.ode.AbstractIntegrator
org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator
所有已实现的接口:
ODEIntegrator
直接已知子类:
EmbeddedRungeKuttaIntegrator, GraggBulirschStoerIntegrator, MultistepIntegrator

public abstract class AdaptiveStepsizeIntegrator extends AbstractIntegrator
这个抽象类包含所有常规微分方程的自适应步长积分器的共同部分。

这些算法执行带有步长控制的积分,这意味着用户不指定积分步长,而是指定误差容限。误差阈值计算为

 threshold_i = absTol_i + relTol_i * max (abs (ym), abs (ym+1))
 

其中absTol_i是状态向量的第i个分量的绝对容限,relTol_i是相同分量的相对容限。用户也可以只使用两个标量值absTol和relTol,这将用于所有分量。

如果常规微分方程是一个扩展ODE而不是一个基本ODE,那么仅使用状态向量的主要部分用于步长控制,而不是完整的状态向量。

如果ym+1的估计误差使得

 sqrt((sum (errEst_i / threshold_i)^2 ) / n) < 1
 

(其中n是主要集维度),则接受该步长,否则拒绝该步长,并尝试使用新的步长再次尝试。

  • 构造器详细资料

    • AdaptiveStepsizeIntegrator

      public AdaptiveStepsizeIntegrator(String name, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance)
      使用给定的步长界限构建积分器。默认的步长处理程序不执行任何操作。
      参数:
      name - 方法的名称
      minStep - 最小步长(符号无关,无论是正向还是反向积分,最后一步可以比这个更小)
      maxStep - 最大步长(符号无关,无论是正向还是反向积分,最后一步可以比这个更小)
      scalAbsoluteTolerance - 允许的绝对误差
      scalRelativeTolerance - 允许的相对误差
    • AdaptiveStepsizeIntegrator

      public AdaptiveStepsizeIntegrator(String name, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance)
      使用给定的步长界限构建积分器。默认的步长处理程序不执行任何操作。
      参数:
      name - 方法的名称
      minStep - 最小步长(符号无关,无论是正向还是反向积分,最后一步可以比这个更小)
      maxStep - 最大步长(符号无关,无论是正向还是反向积分,最后一步可以比这个更小)
      vecAbsoluteTolerance - 允许的绝对误差
      vecRelativeTolerance - 允许的相对误差
  • 方法详细资料

    • setStepSizeControl

      public void setStepSizeControl(double minimalStep, double maximalStep, double absoluteTolerance, double relativeTolerance)
      设置自适应步长控制参数。

      该方法的副作用是还会重置初始步长,因此如果用户没有调用setInitialStepSize,积分器将自动计算初始步长。

      参数:
      minimalStep - 最小步长(必须为正数,即使是反向积分,最后一步可以比这个更小)
      maximalStep - 最大步长(必须为正数,即使是反向积分)
      absoluteTolerance - 允许的绝对误差
      relativeTolerance - 允许的相对误差
    • setStepSizeControl

      public void setStepSizeControl(double minimalStep, double maximalStep, double[] absoluteTolerance, double[] relativeTolerance)
      设置自适应步长控制参数。

      该方法的副作用是还会重置初始步长,因此如果用户没有调用setInitialStepSize,积分器将自动计算初始步长。

      参数:
      minimalStep - 最小步长(必须为正数,即使是反向积分,最后一步可以比这个更小)
      maximalStep - 最大步长(必须为正数,即使是反向积分)
      absoluteTolerance - 允许的绝对误差
      relativeTolerance - 允许的相对误差
    • getStepSizeHelper

      protected StepsizeHelper getStepSizeHelper()
      获取步长辅助器。
      返回:
      步长辅助器
      从以下版本开始:
      2.0
    • setInitialStepSize

      public void setInitialStepSize(double initialStepSize)
      设置初始步长。

      该方法允许用户指定一个初始正步长,而不是让积分器自行猜测。如果在开始积分之前未调用此方法,则积分器将通过自身估计初始步长。

      参数:
      initialStepSize - 要使用的初始步长(必须为正数,即使是反向积分;提供负值或超出最小/最大步长区间的值将导致积分器忽略该值,并由自身计算初始步长)
    • sanityChecks

      protected void sanityChecks(ODEState initialState, double t) throws MathIllegalArgumentException
      检查积分跨度。
      覆盖:
      sanityChecks 在类中 AbstractIntegrator
      参数:
      initialState - 初始状态
      t - 积分的目标时间
      抛出:
      MathIllegalArgumentException - 如果积分跨度太小
      MathIllegalArgumentException - 如果自适应步长积分器的容差数组维度与方程设置不兼容
    • initializeStep

      public double initializeStep(boolean forward, int order, double[] scale, ODEStateAndDerivative state0) throws MathIllegalArgumentException, MathIllegalStateException
      初始化积分步骤。
      参数:
      forward - 正向积分指示器
      order - 方法的阶数
      scale - 状态向量的缩放向量(可以比状态向量短)
      state0 - 积分开始时间的状态
      返回:
      第一个积分步骤
      抛出:
      MathIllegalStateException - 如果函数评估次数超过限制
      MathIllegalArgumentException - 如果数组维度与方程设置不匹配
    • resetInternalState

      protected void resetInternalState()
      将内部状态重置为虚拟值。
    • getMinStep

      public double getMinStep()
      获取最小步长。
      返回:
      最小步长
    • getMaxStep

      public double getMaxStep()
      获取最大步长。
      返回:
      最大步长