程序包 org.hipparchus.ode

类 DenseOutputModel

java.lang.Object
org.hipparchus.ode.DenseOutputModel
所有已实现的接口:
Serializable, ODEStepHandler
直接已知子类:
ContinuousOutputModel

public class DenseOutputModel extends Object implements ODEStepHandler, Serializable
此类存储ODE积分器在积分过程中提供的所有信息,并从中构建解的连续模型。

从积分器的角度来看,此类充当步骤处理程序。在积分过程中,它被迭代调用,并将所有步骤信息的副本存储在排序集合中以供以后使用。一旦积分过程结束,用户可以使用getInterpolatedState方法随时检索此信息。在尝试调用getInterpolatedState之前等待积分结束非常重要,因为一些内部变量只有在处理最后一步后才设置。

例如,如果用户应用程序的主循环应保持独立于积分过程,或者如果需要模仿数值模型的行为(即需要能够随时获取模型值或浏览数据),则此类非常有用。

如果问题建模使用多个连续区间的单独积分阶段完成,则可以将相同的DenseOutputModel用作所有积分阶段的步骤处理程序,只要它们按顺序和相同方向执行。例如,可以使用一个模型(即一组微分方程)来外推卫星的轨迹,然后在机动开始之前使用另一个更复杂的模型,包括推进器建模和精确的姿态控制,在机动期间。机动结束后恢复到第一个模型。如果同一个连续输出模型处理所有积分阶段的步骤,用户无需在意机动何时开始或结束,他可以以透明的方式获得所有数据。

此类的一个重要特点是它实现了Serializable接口。这意味着积分的结果可以被序列化并在以后(如果存储在像文件系统或数据库这样的持久介质中)或其他地方(如果发送到另一个应用程序)重用。只存储积分的结果,没有对积分问题本身的引用。

应该注意,如果状态向量很大,积分间隔很长,或者步长很小(这可能是由于自适应步长积分器中的小容差设置导致的),则在DenseOutputModel实例中存储的数据量可能很大。

另请参阅:
  • 构造器详细资料

    • DenseOutputModel

      public DenseOutputModel()
      简单构造函数。构建一个空的连续输出模型。
  • 方法详细资料

    • append

      在实例的末尾附加另一个模型。
      参数:
      model - 要添加到实例末尾的模型
      抛出:
      MathIllegalArgumentException - 如果要附加的模型与实例不兼容(状态向量的维数、传播方向、日期之间的间隙)
      MathIllegalStateException - 如果在步骤完成时超过了函数评估的数量
    • init

      public void init(ODEStateAndDerivative initialState, double targetTime)
      在ODE积分开始时初始化步骤处理程序。

      此方法在积分开始时仅调用一次。如果需要,步骤处理程序可以使用此方法初始化一些内部数据。

      默认实现不执行任何操作

      指定者:
      init 在接口中 ODEStepHandler
      参数:
      initialState - 初始时间、状态向量和导数
      targetTime - 积分的目标时间
    • handleStep

      public void handleStep(ODEStateInterpolator interpolator)
      处理最后接受的步骤。
      指定者:
      handleStep 在接口中 ODEStepHandler
      参数:
      interpolator - 最后接受步骤的插值器
    • finish

      public void finish(ODEStateAndDerivative finalState)
      完成积分。
      指定者:
      finish 在接口中 ODEStepHandler
      参数:
      finalState - 积分结束时的状态
    • getInitialTime

      public double getInitialTime()
      获取初始积分时间。
      返回:
      初始积分时间
    • getFinalTime

      public double getFinalTime()
      获取最终积分时间。
      返回:
      最终积分时间
    • getInterpolatedState

      public ODEStateAndDerivative getInterpolatedState(double time)
      获取插值时间处的状态。
      参数:
      time - 插值点的时间
      返回:
      插值时间处的状态