接口 FieldODEEventHandler<T extends CalculusFieldElement<T>>
- 类型参数:
-
T
- 字段元素的类型
在解决ODE问题时,某些事件可以在离散时间触发。例如,当达到某个状态时(G-stop功能)需要停止积分过程时,当先验未知确切日期时,或者当导数具有状态边界穿越时。
这些事件被定义为当g
切换函数的符号发生变化时发生。
由于事件仅依赖于问题并由独立的时间变量和状态向量触发,因此它们可以在几乎任何时间发生,事先未知。积分器将确保在步长内避免符号变化,当检测到此类事件时,它们将减小步长以便将此事件准确放置在当前步长的末尾。这保证了步长插值(始终具有一个步长范围)即使存在不连续性也是相关的。这与积分器提供的监视局部误差的步长控制无关(此事件处理功能适用于所有积分器,包括固定步长积分器)。
请注意,在Hipparchus 3.0之前,现在在FieldODEEventDetector
中的某些方法在此接口中(其余方法在已废弃的FieldEventHandlerConfiguration
接口中)。这些接口已重新组织,以允许在事件检测和事件处理中使用不同的对象,从而允许用户重用具有自定义处理程序的预定义事件检测器。
- 另请参阅:
-
方法概要
修饰符和类型方法说明eventOccurred
(FieldODEStateAndDerivative<T> state, FieldODEEventDetector<T> detector, boolean increasing) 处理事件并选择下一步操作。default void
init
(FieldODEStateAndDerivative<T> initialState, T finalTime, FieldODEEventDetector<T> detector) 在ODE积分开始时初始化事件处理程序。default FieldODEState
<T> resetState
(FieldODEEventDetector<T> detector, FieldODEStateAndDerivative<T> state) 在继续积分之前重置状态。
-
方法详细资料
-
init
default void init(FieldODEStateAndDerivative<T> initialState, T finalTime, FieldODEEventDetector<T> detector) 在ODE积分开始时初始化事件处理程序。此方法在积分开始时调用一次。如果需要,事件处理程序可以用于初始化一些内部数据。
默认实现不执行任何操作
- 参数:
-
initialState
- 初始时间、状态向量和导数 -
finalTime
- 积分的目标时间 -
detector
- 与事件处理程序相关的事件检测器
-
eventOccurred
Action eventOccurred(FieldODEStateAndDerivative<T> state, FieldODEEventDetector<T> detector, boolean increasing) 处理事件并选择下一步操作。当积分器接受在函数的符号变化结束的步骤上时,将调用此方法,此时会在步骤处理程序本身之后调用(有关调度,请参见下文)。它允许用户更新其内部数据以确认事件已被处理(例如,在存在不连续性的情况下,在
微分方程
中设置标志以切换导数计算),或者指示积分器停止或继续积分,可能重置状态或导数。- 如果返回
Action.STOP
,则将停止积分, - 如果返回
Action.RESET_STATE
,则在步骤处理程序完成其任务后,将调用resetState
方法,并且积分器还将重新计算导数, - 如果返回
Action.RESET_DERIVATIVES
,则积分器将重新计算导数, - 如果返回
Action.RESET_EVENTS
,则积分器将重新检查所有事件处理程序, - 如果返回
Action.CONTINUE
,则不会采取任何特定操作(除了调用此方法),积分将继续。
此方法与
FieldODEStepHandler
方法handleStep(interpolator, isLast)
之间的调度是首先调用handleStep
,然后调用此方法(此调度从Hipparchus 2.0开始更改)。此调度允许由此方法调用的用户代码和由步骤处理程序调用的用户代码获取与积分方向一致的独立时间变量的值。- 参数:
-
state
- 独立时间变量、状态向量和导数的当前值 -
detector
- 触发事件的检测器 -
increasing
- 如果为true,则在事件周围的时间增加时,切换函数的值也会增加(请注意,增加是相对于物理时间而言的,而不是相对于可能向后进行的积分) - 返回:
-
指示积分器应该执行的下一步操作,此值必须是
Action.STOP
、Action.RESET_STATE
、Action.RESET_DERIVATIVES
、Action.RESET_EVENTS
或Action.CONTINUE
之一
- 如果返回
-
resetState
default FieldODEState<T> resetState(FieldODEEventDetector<T> detector, FieldODEStateAndDerivative<T> state) 在继续积分之前重置状态。此方法在步骤处理程序返回后且下一步开始之前调用,但仅当
eventOccurred
本身返回Action.RESET_STATE
指示器时。它允许用户重置下一步的状态向量,而不干扰完成步骤的步骤处理程序。默认实现返回其参数。
- 参数:
-
detector
- 触发事件的检测器 -
state
- 独立时间变量、状态向量和导数的当前值 - 返回:
- 重置状态(请注意,它不包括导数,它们将由积分器自动添加)
-