类 MultistepFieldIntegrator<T extends CalculusFieldElement<T>>
- 类型参数:
-
T
- 字段元素的类型
- 所有已实现的接口:
-
FieldODEIntegrator<T>
- 直接已知子类:
-
AdamsFieldIntegrator
我们将第n步的缩放导数si(n)定义为:\[ \left\{\begin{align} s_1(n) &= h y'_n \text{ 一阶导数}\\ s_2(n) &= \frac{h^2}{2} y_n'' \text{ 二阶导数}\\ s_3(n) &= \frac{h^3}{6} y_n''' \text{ 三阶导数}\\ &\cdots\\ s_k(n) &= \frac{h^k}{k!} y_n^{(k)} \text{ 第} k \text{阶导数} \end{align}\right. \]
与单独存储几个先前步骤不同,此实现使用Nordsieck向量,其中高阶缩放导数都在同一步骤中获取(yn,s1(n)和rn),其中rn定义为:\[ r_n = [ s_2(n), s_3(n) \ldots s_k(n) ]^T \](为了清晰起见,我们在符号中省略了k索引)
具有Nordsieck表示的多步积分器对于大步长变化非常敏感,因为当步长乘以因子a时,Nordsieck向量的第k个分量将乘以ak,而最后的分量是最不准确的。因此,默认的最大增长因子设置为一个相当低的值:21/order。
- 另请参阅:
-
字段概要
-
构造器概要
限定符构造器说明protected
MultistepFieldIntegrator
(Field<T> field, String name, int nSteps, int order, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) 使用给定的步长范围构建多步积分器。protected
MultistepFieldIntegrator
(Field<T> field, String name, int nSteps, int order, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance) 使用给定的步长范围构建多步积分器。 -
方法概要
修饰符和类型方法说明protected double
computeStepGrowShrinkFactor
(double error) 根据标准化误差计算步长增长/缩小因子。double
获取步长控制的最大增长因子。double
获取步长控制的最小缩小因子。int
获取多步方法的步数(不包括正在计算的步骤)。double
获取步长控制的安全因子。获取起始积分器。protected abstract Array2DRowFieldMatrix
<T> initializeHighOrderDerivatives
(T h, T[] t, T[][] y, T[][] yDot) 在步骤开始时初始化高阶缩放导数。protected void
重新缩放实例。void
setMaxGrowth
(double maxGrowth) 设置步长控制的最大增长因子。void
setMinReduction
(double minReduction) 设置步长控制的最小缩小因子。void
setSafety
(double safety) 设置步长控制的安全因子。void
setStarterIntegrator
(FieldODEIntegrator<T> starterIntegrator) 设置起始积分器。protected void
start
(FieldExpandableODE<T> equations, FieldODEState<T> initialState, T t) 开始积分。从类继承的方法 org.hipparchus.ode.nonstiff.AdaptiveStepsizeFieldIntegrator
getMaxStep, getMinStep, getStepSizeHelper, initializeStep, resetInternalState, sanityChecks, setInitialStepSize, setStepSizeControl, setStepSizeControl
从类继承的方法 org.hipparchus.ode.AbstractFieldIntegrator
acceptStep, addEventDetector, addStepEndHandler, addStepHandler, clearEventDetectors, clearStepEndHandlers, clearStepHandlers, computeDerivatives, getCurrentSignedStepsize, getEquations, getEvaluations, getEvaluationsCounter, getEventDetectors, getField, getMaxEvaluations, getName, getStepEndHandlers, getStepHandlers, getStepSize, getStepStart, initIntegration, isLastStep, resetOccurred, setIsLastStep, setMaxEvaluations, setStateInitialized, setStepSize, setStepStart
从类继承的方法 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
从接口继承的方法 org.hipparchus.ode.FieldODEIntegrator
integrate
-
字段详细资料
-
scaled
第一个缩放导数(h y')。 -
nordsieck
高阶缩放导数的Nordsieck矩阵。(h2/2 y'',h3/6 y''' ...,hk/k! y(k))
-
-
构造器详细资料
-
MultistepFieldIntegrator
protected MultistepFieldIntegrator(Field<T> field, String name, int nSteps, int order, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance) throws MathIllegalArgumentException 使用给定的步长范围构建多步积分器。默认的起始积分器设置为带有一些默认设置的
Dormand-Prince 8(5,3)
积分器。默认的最大增长因子设置为一个相当低的值:21/order。
- 参数:
-
field
- 时间和状态向量元素所属的字段 -
name
- 方法的名称 -
nSteps
- 多步方法的步数(不包括正在计算的步骤) -
order
- 方法的阶数 -
minStep
- 最小步长(即使是向后积分也必须是正的,最后一步可以比这个小) -
maxStep
- 最大步长(即使是向后积分也必须是正的) -
scalAbsoluteTolerance
- 允许的绝对误差 -
scalRelativeTolerance
- 允许的相对误差 - 抛出:
-
MathIllegalArgumentException
- 如果步数小于2
-
MultistepFieldIntegrator
protected MultistepFieldIntegrator(Field<T> field, String name, int nSteps, int order, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) 使用给定的步长范围构建多步积分器。默认的起始积分器设置为带有一些默认设置的
Dormand-Prince 8(5,3)
积分器。默认的最大增长因子设置为一个相当低的值:21/order。
- 参数:
-
field
- 时间和状态向量元素所属的字段 -
name
- 方法的名称 -
nSteps
- 多步方法的步数(不包括正在计算的步骤) -
order
- 方法的阶数 -
minStep
- 最小步长(即使是向后积分也必须是正的,最后一步可以比这个小) -
maxStep
- 最大步长(即使是向后积分也必须是正的) -
vecAbsoluteTolerance
- 允许的绝对误差 -
vecRelativeTolerance
- 允许的相对误差
-
-
方法详细资料
-
getStarterIntegrator
获取起始积分器。- 返回:
- 起始积分器
-
setStarterIntegrator
设置起始积分器。此起始积分器的各种步骤和事件处理程序将由多步积分器自动管理。在使用之前,将清除这些元素的任何用户配置。
- 参数:
-
starterIntegrator
- 起始积分器
-
start
protected void start(FieldExpandableODE<T> equations, FieldODEState<T> initialState, T t) throws MathIllegalArgumentException, MathIllegalStateException 开始积分。此方法使用基础起始积分器计算一个步骤,并在步骤开始时初始化Nordsieck向量。起始积分器的目的仅是建立初始条件,它本身不会真正改变时间。顶层多步积分器负责处理时间传播和事件处理,因为它将从头开始自己的计算。在某种意义上,起始积分器可以被视为一个虚拟的积分器,因此它永远不会触发任何用户事件,也不会调用任何用户步骤处理程序。
- 参数:
-
equations
- 要积分的完整微分方程组 -
initialState
- 初始状态(时间,主要和次要状态向量) -
t
- 积分的目标时间(可以设置为小于t0
的值以进行向后积分) - 抛出:
-
MathIllegalArgumentException
- 如果数组维度与方程设置不匹配 -
MathIllegalArgumentException
- 如果积分步长太小 -
MathIllegalStateException
- 如果函数评估次数超过限制 -
MathIllegalArgumentException
- 如果无法找到事件的位置
-
initializeHighOrderDerivatives
protected abstract Array2DRowFieldMatrix<T> initializeHighOrderDerivatives(T h, T[] t, T[][] y, T[][] yDot) 在步骤开始时初始化高阶缩放导数。- 参数:
-
h
- 用于缩放的步长 -
t
- 第一步的时间 -
y
- 第一步的状态 -
yDot
- 第一步的导数 - 返回:
- 第一步的Nordieck向量(h2/2 y''n,h3/6 y'''n ... hk/k! y(k)n)
-
getMinReduction
public double getMinReduction()获取步长控制的最小缩小因子。- 返回:
- 最小缩小因子
-
setMinReduction
public void setMinReduction(double minReduction) 设置步长控制的最小缩小因子。- 参数:
-
minReduction
- 最小缩小因子
-
getMaxGrowth
public double getMaxGrowth()获取步长控制的最大增长因子。- 返回:
-
setMaxGrowth
public void setMaxGrowth(double maxGrowth) 设置步长控制的最大增长因子。- 参数:
-
maxGrowth
- 最大增长因子
-
getSafety
public double getSafety()获取步长控制的安全因子。- 返回:
- 安全因子
-
setSafety
public void setSafety(double safety) 设置步长控制的安全因子。- 参数:
-
safety
- 安全因子
-
getNSteps
public int getNSteps()获取多步方法的步数(不包括正在计算的步数)。- 返回:
- 多步方法的步数(不包括正在计算的步数)
-
rescale
重新调整实例的大小。由于缩放和Nordsieck数组与调用者共享,因此此方法会导致在调用者中重新调整这些数组的大小。
- 参数:
-
newStepSize
- 用于在缩放和Nordsieck数组中使用的新步长
-
computeStepGrowShrinkFactor
protected double computeStepGrowShrinkFactor(double error) 根据标准化误差计算步长的增长/缩小因子。- 参数:
-
error
- 当前步骤的标准化误差 - 返回:
- 用于下一步的增长/缩小因子
-