类 StepFieldProblem<T extends CalculusFieldElement<T>>
- 所有已实现的接口:
-
FieldODEEventDetector<T>
,FieldOrdinaryDifferentialEquation<T>
-
字段概要
从类继承的字段 org.hipparchus.ode.events.AbstractFieldODEDetector
DEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
-
构造器概要
构造器说明StepFieldProblem
(Field<T> field, FieldAdaptableInterval<T> maxCheck, T threshold, int maxIter, T rateBefore, T rateAfter, T switchTime) -
方法概要
修饰符和类型方法说明T[]
computeDerivatives
(T t, T[] y) 获取状态向量的当前时间导数。protected StepFieldProblem
<T> create
(FieldAdaptableInterval<T> newMaxCheck, int newMaxIter, BracketedRealFieldUnivariateSolver<T> newSolver, FieldODEEventHandler<T> newHandler) 构建一个新实例。g
(FieldODEStateAndDerivative<T> state) 计算切换函数的值。int
获取问题的维度。void
init
(FieldODEStateAndDerivative<T> state0, T t) 在ODE积分开始时初始化事件处理程序。void
在ODE积分开始时初始化方程。void
从类继承的方法 org.hipparchus.ode.events.AbstractFieldODEDetector
getHandler, getMaxCheckInterval, getMaxIterationCount, getSolver, isForward, withHandler, withMaxCheck, withMaxCheck, withMaxIter, withSolver, withThreshold
-
构造器详细资料
-
StepFieldProblem
-
-
方法详细资料
-
create
protected StepFieldProblem<T> create(FieldAdaptableInterval<T> newMaxCheck, int newMaxIter, BracketedRealFieldUnivariateSolver<T> newSolver, FieldODEEventHandler<T> newHandler) 从类复制的说明:AbstractFieldODEDetector
构建一个新实例。- 指定者:
-
create
在类中AbstractFieldODEDetector<StepFieldProblem<T extends CalculusFieldElement<T>>,
T extends CalculusFieldElement<T>> - 参数:
-
newMaxCheck
- 最大检查间隔 -
newMaxIter
- 事件时间搜索中的最大迭代次数 -
newSolver
- 用于检测状态事件的根查找算法 -
newHandler
- 事件处理程序在事件发生时调用 - 返回:
- 适当子类型的新实例
-
computeDerivatives
从接口复制的说明:FieldOrdinaryDifferentialEquation
获取状态向量的当前时间导数。- 指定者:
-
computeDerivatives
在接口中FieldOrdinaryDifferentialEquation<T extends CalculusFieldElement<T>>
- 参数:
-
t
- 当前独立时间变量的值 -
y
- 包含状态向量当前值的数组 - 返回:
- 状态向量的时间导数
-
getDimension
public int getDimension()从接口复制的说明:FieldOrdinaryDifferentialEquation
获取问题的维度。- 指定者:
-
getDimension
在接口中FieldOrdinaryDifferentialEquation<T extends CalculusFieldElement<T>>
- 返回:
- 问题的维度
-
setRate
-
init
从接口复制的说明:FieldOrdinaryDifferentialEquation
在ODE积分开始时初始化方程。此方法在积分开始时调用一次。如果需要,方程可以使用它来初始化一些内部数据。
默认实现不执行任何操作。
- 指定者:
-
init
在接口中FieldOrdinaryDifferentialEquation<T extends CalculusFieldElement<T>>
- 参数:
-
t0
- 积分开始时独立时间变量的值 -
y0
- 包含积分开始时状态向量的值的数组 -
t
- 积分的目标时间
-
init
从类复制的说明:AbstractFieldODEDetector
在ODE积分开始时初始化事件处理程序。此方法在积分开始时调用一次。如果需要,事件处理程序可以使用它来初始化一些内部数据。
默认实现不执行任何操作
此实现设置积分的方向并初始化事件处理程序。如果子类覆盖此方法,应调用
super.init(s0, t)
。- 指定者:
-
init
在接口中FieldODEEventDetector<T extends CalculusFieldElement<T>>
- 覆盖:
-
init
在类中AbstractFieldODEDetector<StepFieldProblem<T extends CalculusFieldElement<T>>,
T extends CalculusFieldElement<T>> - 参数:
-
state0
- 初始时间、状态向量和导数 -
t
- 积分的目标时间
-
g
从类复制的说明:AbstractFieldODEDetector
计算切换函数的值。当切换函数的符号改变时,会生成离散事件。积分器将会确保在这些事件恰好发生在步长边界时改变步长。切换函数在其根附近必须是连续的(但不一定是光滑的),因为积分器需要找到其根以精确定位事件。
还要注意,积分器期望一旦发生事件,下一步开始时(即事件发生后)切换函数的符号与事件发生前相反。这种步骤之间的一致性必须被保留,否则将会发生与根未被夹住相关的
异常
。这种一致性的需求有时很难实现。一个典型的例子是使用事件来模拟球在地板上弹跳。最初的想法是使用
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_EVENTS
、Action.RESET_DERIVATIVES
或Action.RESET_STATE
时,g函数的定义可能会发生变化。- 指定者:
-
g
在接口中FieldODEEventDetector<T extends CalculusFieldElement<T>>
- 指定者:
-
g
在类中AbstractFieldODEDetector<StepFieldProblem<T extends CalculusFieldElement<T>>,
T extends CalculusFieldElement<T>> - 参数:
-
state
- 独立时间变量、状态向量和导数的当前值 - 返回:
- g切换函数的值
-