接口 ODEEventHandler


public interface ODEEventHandler
此接口表示在ODE积分过程中触发的离散事件的处理程序。

在解决ODE问题时,某些事件可以在离散时间触发。例如,当达到某个状态(G-stop功能)时,当精确日期事先未知时,或者当导数存在不连续性时,或者当用户想要监视某些状态边界的穿越时,就会发生这种情况。

这些事件被定义为当一个g切换函数的符号发生变化时发生。

由于事件仅依赖于问题并由独立的时间变量和状态向量触发,因此它们可以在几乎任何时间发生,事先未知。积分器将注意避免在步骤内部发生符号变化,当检测到此类事件时,它们将减小步长,以便将此事件准确放置在当前步骤的末尾。这保证了步长插值(始终具有一个步长范围)即使存在不连续性也是相关的。这与积分器提供的监视局部误差的步长控制无关(此事件处理功能适用于所有积分器,包括固定步长积分器)。

请注意,在Hipparchus 3.0之前,现在在ODEEventDetector中的某些方法在此接口中(其余方法在已删除的EventHandlerConfiguration接口中)。重新组织接口以允许在事件检测和事件处理中使用不同的对象,从而允许用户重用具有自定义处理程序的预定义事件检测器。

从以下版本开始:
3.0
另请参阅:
  • 方法详细资料

    • init

      default void init(ODEStateAndDerivative initialState, double finalTime, ODEEventDetector detector)
      在ODE积分开始时初始化事件处理程序。

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

      默认实现不执行任何操作

      参数:
      initialState - 初始时间、状态向量和导数
      finalTime - 集成的目标时间
      detector - 与事件处理程序相关的事件检测器
    • eventOccurred

      Action eventOccurred(ODEStateAndDerivative state, ODEEventDetector detector, boolean increasing)
      处理事件并选择下一步操作。

      当积分器接受在函数的符号变化处结束的步骤时,将调用此方法,此时正好在步骤处理程序本身之后调用(有关调度,请参见下文)。它允许用户更新其内部数据以确认事件已被处理(例如,在存在不连续性的情况下设置differential equations中的标志以切换导数计算),或者指示积分器停止或继续积分,可能需要重置状态或导数。

      此方法与ODEStepHandler方法handleStep(interpolator)之间的调度是首先调用handleStep,然后调用此方法(此调度从Hipparchus 2.0开始更改)。此调度允许由此方法调用的用户代码和由步骤处理程序调用的用户代码获取与集成方向一致的独立时间变量的值。

      参数:
      state - 当前独立时间变量、状态向量和导数的值
      detector - 触发事件的检测器
      increasing - 如果为true,则在事件周围的时间增加时,切换函数的值也会增加(请注意,增加是相对于物理时间而不是相对于可能向后进行的集成的时间)
      返回:
      指示积分器应该执行的下一步操作,此值必须是Action.STOPAction.RESET_STATEAction.RESET_DERIVATIVESAction.RESET_EVENTSAction.CONTINUE之一
    • resetState

      default ODEState resetState(ODEEventDetector detector, ODEStateAndDerivative state)
      在继续积分之前重置状态。

      此方法在步骤处理程序返回后且下一步开始之前调用,但仅当eventOccurred(org.hipparchus.ode.ODEStateAndDerivative, org.hipparchus.ode.events.ODEEventDetector, boolean)本身返回Action.RESET_STATE指示器时。它允许用户为下一步重置状态向量,而不干扰完成步骤的步骤处理程序。

      默认实现返回其参数。

      参数:
      detector - 触发事件的检测器
      state - 当前独立时间变量、状态向量和导数的值
      返回:
      重置状态(请注意,它不包括导数,它们将由积分器自动添加)