类 AdaptiveStepsizeFieldIntegrator<T extends CalculusFieldElement<T>>

java.lang.Object
org.hipparchus.ode.AbstractFieldIntegrator<T>
org.hipparchus.ode.nonstiff.AdaptiveStepsizeFieldIntegrator<T>
类型参数:
T - 字段元素的类型
所有已实现的接口:
FieldODEIntegrator<T>
直接已知子类:
EmbeddedRungeKuttaFieldIntegrator, MultistepFieldIntegrator

public abstract class AdaptiveStepsizeFieldIntegrator<T extends CalculusFieldElement<T>> extends AbstractFieldIntegrator<T>
这个抽象类包含所有常规微分方程的自适应步长积分器的共同部分。

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

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

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

请注意,只有状态向量的主要部分用于步长控制。状态向量的次要部分明确忽略了步长控制。

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

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

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

  • 构造器详细资料

    • AdaptiveStepsizeFieldIntegrator

      public AdaptiveStepsizeFieldIntegrator(Field<T> field, String name, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance)
      使用给定的步长界限构建积分器。默认步长处理程序不执行任何操作。
      参数:
      field - 时间和状态向量元素所属的字段
      name - 方法的名称
      minStep - 最小步长(符号无关,无论是正向还是反向积分,最后一步可以比此更小)
      maxStep - 最大步长(符号无关,无论是正向还是反向积分,最后一步可以比此更小)
      scalAbsoluteTolerance - 允许的绝对误差
      scalRelativeTolerance - 允许的相对误差
    • AdaptiveStepsizeFieldIntegrator

      public AdaptiveStepsizeFieldIntegrator(Field<T> field, String name, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance)
      使用给定的步长界限构建积分器。默认步长处理程序不执行任何操作。
      参数:
      field - 时间和状态向量元素所属的字段
      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(FieldODEState<T> initialState, T t) throws MathIllegalArgumentException
      检查积分跨度。
      覆盖:
      sanityChecks 在类中 AbstractFieldIntegrator<T extends CalculusFieldElement<T>>
      参数:
      initialState - 初始状态
      t - 积分的目标时间
      抛出:
      MathIllegalArgumentException - 如果积分跨度太小
      MathIllegalArgumentException - 如果自适应步长积分器的容限数组维度与方程设置不兼容
    • initializeStep

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

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

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

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