类 AbstractFieldODEDetector<T extends AbstractFieldODEDetector<T,E>,E extends CalculusFieldElement<E>>
- 类型参数:
-
T
- 检测器的类型 -
E
- 字段元素的类型
- 所有已实现的接口:
-
FieldODEEventDetector<E>
- 直接已知子类:
-
FieldEventSlopeFilter
,StepFieldProblem
FieldODEEventDetector
。
- 从以下版本开始:
- 3.0
-
字段概要
修饰符和类型字段说明static final int
事件时间搜索中的默认最大迭代次数。static final double
默认最大检查间隔(秒)。static final double
默认收敛阈值(秒)。 -
构造器概要
限定符构造器说明protected
AbstractFieldODEDetector
(FieldAdaptableInterval<E> maxCheck, int maxIter, BracketedRealFieldUnivariateSolver<E> solver, FieldODEEventHandler<E> handler) 构建一个新实例。 -
方法概要
修饰符和类型方法说明protected abstract T
create
(FieldAdaptableInterval<E> newMaxCheck, int newMaxIter, BracketedRealFieldUnivariateSolver<E> newSolver, FieldODEEventHandler<E> newHandler) 构建一个新实例。abstract E
计算切换函数的值。获取基础事件处理器。获取事件处理程序检查之间的最大时间间隔。int
获取事件本地化的迭代计数上限。获取用于检测状态事件的根查找算法。void
init
(FieldODEStateAndDerivative<E> s0, E t) 在ODE积分开始时初始化事件处理器。boolean
检查当前传播是向前还是向后。withHandler
(FieldODEEventHandler<E> newHandler) 设置事件处理器在事件发生时调用。withMaxCheck
(E newMaxCheck) 设置最大检查间隔。withMaxCheck
(FieldAdaptableInterval<E> newMaxCheck) 设置最大检查间隔。withMaxIter
(int newMaxIter) 设置事件时间搜索中的最大迭代次数。withSolver
(BracketedRealFieldUnivariateSolver<E> newSolver) 设置用于检测状态事件的根查找算法。withThreshold
(E newThreshold) 设置收敛阈值。
-
字段详细资料
-
DEFAULT_MAXCHECK
public static final double DEFAULT_MAXCHECK默认最大检查间隔(秒)。- 另请参阅:
-
DEFAULT_THRESHOLD
public static final double DEFAULT_THRESHOLD默认收敛阈值(秒)。- 另请参阅:
-
DEFAULT_MAX_ITER
public static final int DEFAULT_MAX_ITER事件时间搜索中的默认最大迭代次数。- 另请参阅:
-
-
构造器详细资料
-
AbstractFieldODEDetector
protected AbstractFieldODEDetector(FieldAdaptableInterval<E> maxCheck, int maxIter, BracketedRealFieldUnivariateSolver<E> solver, FieldODEEventHandler<E> handler) 构建一个新实例。- 参数:
-
maxCheck
- 最大检查间隔,必须严格为正(秒) -
maxIter
- 事件时间搜索中的最大迭代次数 -
solver
- 用于检测状态事件的根查找算法 -
handler
- 事件发生时调用的事件处理器
-
-
方法详细资料
-
init
在ODE积分开始时初始化事件处理器。此方法在积分开始时调用一次。如果需要,事件处理器可以用于初始化一些内部数据。
默认实现不执行任何操作
此实现设置积分的方向并初始化事件处理器。如果子类覆盖此方法,则应调用
super.init(s0, t)
。- 指定者:
-
init
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 参数:
-
s0
- 初始时间、状态向量和导数 -
t
- 积分的目标时间
-
g
计算切换函数的值。离散事件在此切换函数的符号变化时生成。积分器将确保以这种方式改变步长,使这些事件恰好发生在步长边界上。切换函数在其根邻域内必须连续(但不一定平滑),因为积分器需要找到其根以精确定位事件。
还要注意,积分器期望一旦发生事件,切换函数的符号在下一步开始时(即在事件发生后)与事件发生前的符号相反。这种步骤之间的一致性必须保持,否则将出现与根未被夹住相关的
异常
。这种一致性有时很难实现。一个典型的例子是使用事件来模拟球在地板上弹跳。表示这一点的第一个想法是使
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函数的定义可能会更改,就像上面的例子一样。其次,当同一积分器中的任何其他事件处理程序的事件发生
方法返回Action.RESET_EVENTS
、Action.RESET_DERIVATIVES
或Action.RESET_STATE
时,g函数的定义可能会更改。- 指定者:
-
g
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 参数:
-
s
- 独立时间变量的当前值、状态向量和导数 - 返回:
- 切换函数g的值
-
getMaxCheckInterval
获取事件处理程序检查之间的最大时间间隔。- 指定者:
-
getMaxCheckInterval
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 返回:
- 事件处理程序检查之间的最大时间间隔
-
getMaxIterationCount
public int getMaxIterationCount()获取事件本地化中迭代计数的上限。- 指定者:
-
getMaxIterationCount
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 返回:
- 事件本地化中迭代计数的上限
-
getSolver
获取用于检测状态事件的根查找算法。- 指定者:
-
getSolver
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 返回:
- 用于检测状态事件的根查找算法
-
withMaxCheck
设置最大检查间隔。如果之前已配置了最大检查间隔,则将覆盖它。
- 参数:
-
newMaxCheck
- 最大检查间隔(秒) - 返回:
- 具有更新配置的新检测器(实例未更改)
-
withMaxCheck
设置最大检查间隔。如果之前已配置了最大检查间隔,则将覆盖它。
- 参数:
-
newMaxCheck
- 最大检查间隔(秒) - 返回:
- 具有更新配置的新检测器(实例未更改)
- 从以下版本开始:
- 3.0
-
withMaxIter
设置事件时间搜索中的最大迭代次数。如果之前已配置了迭代次数,则将覆盖它。
- 参数:
-
newMaxIter
- 事件时间搜索中的最大迭代次数 - 返回:
- 具有更新配置的新检测器(实例未更改)
-
withThreshold
设置收敛阈值。这相当于调用
withSolver(new FieldBracketingNthOrderBrentSolver<>(zero, newThreshold, zero, 5)
,因此如果之前配置了解算器,则将覆盖它。- 参数:
-
newThreshold
- 收敛阈值 - 返回:
- 具有更新配置的新检测器(实例未更改)
- 另请参阅:
-
withSolver
设置用于检测状态事件的根查找算法。如果之前已配置了解算器,则将覆盖它。
- 参数:
-
newSolver
- 用于检测状态事件的根查找算法 - 返回:
- 具有更新配置的新检测器(实例未更改)
- 另请参阅:
-
withHandler
设置事件发生时要调用的事件处理程序。如果之前已配置了处理程序,则将覆盖它。
- 参数:
-
newHandler
- 事件发生时要调用的事件处理程序 - 返回:
- 具有更新配置的新检测器(实例未更改)
-
getHandler
获取基础事件处理程序。- 指定者:
-
getHandler
在接口中FieldODEEventDetector<T extends AbstractFieldODEDetector<T,
E>> - 返回:
- 基础事件处理程序
-
create
protected abstract T create(FieldAdaptableInterval<E> newMaxCheck, int newMaxIter, BracketedRealFieldUnivariateSolver<E> newSolver, FieldODEEventHandler<E> newHandler) 构建一个新实例。- 参数:
-
newMaxCheck
- 最大检查间隔 -
newMaxIter
- 事件时间搜索中的最大迭代次数 -
newSolver
- 用于检测状态事件的根查找算法 -
newHandler
- 事件发生时要调用的事件处理程序 - 返回:
- 适当子类型的新实例
-
isForward
public boolean isForward()检查当前传播是向前还是向后。- 返回:
- 如果当前传播是向前,则为true
-