类 EventSlopeFilterTest.FieldEvent<T extends CalculusFieldElement<T>>

java.lang.Object
org.hipparchus.ode.events.EventSlopeFilterTest.FieldEvent<T>
所有已实现的接口:
FieldODEEventDetector<T>
封闭类:
EventSlopeFilterTest

protected static class EventSlopeFilterTest.FieldEvent<T extends CalculusFieldElement<T>> extends Object implements FieldODEEventDetector<T>
该单元测试的状态事件。
  • 构造器详细资料

    • FieldEvent

      public FieldEvent(double maxCheck, T threshold, int maxIter, boolean expectDecreasing, boolean expectIncreasing)
  • 方法详细资料

    • getMaxCheckInterval

      public FieldAdaptableInterval<T> getMaxCheckInterval()
      从接口复制的说明: FieldODEEventDetector
      获取事件处理程序检查之间的最大时间间隔。
      指定者:
      getMaxCheckInterval 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      返回:
      事件处理程序检查之间的最大时间间隔
    • getMaxIterationCount

      public int getMaxIterationCount()
      从接口复制的说明: FieldODEEventDetector
      获取事件本地化的迭代计数上限。
      指定者:
      getMaxIterationCount 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      返回:
      事件本地化的迭代计数上限
    • getSolver

      public BracketedRealFieldUnivariateSolver<T> getSolver()
      从接口复制的说明: FieldODEEventDetector
      获取用于检测状态事件的根查找算法。
      指定者:
      getSolver 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      返回:
      用于检测状态事件的根查找算法
    • getEventCount

      public int getEventCount()
    • init

      public void init(FieldODEStateAndDerivative<T> s0, T t)
      从接口复制的说明: FieldODEEventDetector
      在ODE积分开始时初始化事件处理程序。

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

      默认实现不执行任何操作

      指定者:
      init 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      参数:
      s0 - 初始时间、状态向量和导数
      t - 积分的目标时间
    • g

      public T g(FieldODEStateAndDerivative<T> s)
      从接口复制的说明: FieldODEEventDetector
      计算切换函数的值。

      离散事件在此切换函数的符号变化时生成。积分器将确保以这种方式改变步长,使这些事件恰好发生在步长边界上。切换函数必须在其根邻域内连续(但不一定平滑),因为积分器需要找到其根以精确定位事件。

      还请注意,积分器期望一旦发生事件,下一步开始时(即事件发生后)切换函数的符号与事件发生前相反。必须保持这些步骤之间的一致性,否则将出现与根未被夹住相关的异常

      这种一致性的需求有时很难实现。一个典型的例子是使用事件来模拟球在地板上弹跳。表示这一点的第一个想法是使g(state) = h(state),其中h是时间state.getTime()时的地板上方的高度。当g(state)达到0时,球在地板上,因此应该弹起,并且通常的方法是反转其垂直速度。然而,这意味着在事件之前g(state)从正值减少到0,事件之后g(state)将从0增加到正值。这里破坏了一致性!解决方案是使g(state) = sign * h(state),其中sign是一个变量,其初始值设置为+1。每次调用eventOccurred方法时,将sign重置为-sign。这允许g(state)函数保持连续(甚至平滑)即使在事件之间,尽管h(state)不是。基本上,事件用于在弹跳点处折叠h(state),而sign用于展开它,因此求解器看到的g(state)函数在事件之间行为平滑。

      此方法是幂等的,即多次使用相同状态调用此方法将产生相同的值,但有两个例外。首先,当处理程序上发生事件时,g函数的定义可能会更改,就像上面的示例中一样。其次,当同一积分器中的任何其他事件处理程序的eventOccurred方法返回Action.RESET_EVENTSAction.RESET_DERIVATIVESAction.RESET_STATE时,g函数的定义可能会更改。

      指定者:
      g 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      参数:
      s - 独立时间变量、状态向量和导数的当前值
      返回:
      g切换函数的值
    • getHandler

      public FieldODEEventHandler<T> getHandler()
      从接口复制的说明: FieldODEEventDetector
      获取底层事件处理程序。
      指定者:
      getHandler 在接口中 FieldODEEventDetector<T extends CalculusFieldElement<T>>
      返回:
      底层事件处理程序