类 MultistepIntegrator
- 所有已实现的接口:
-
ODEIntegrator
- 直接已知子类:
-
AdamsIntegrator
我们将第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
MultistepIntegrator
(String name, int nSteps, int order, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) 使用给定的步长范围构建多步积分器。protected
MultistepIntegrator
(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 Array2DRowRealMatrix
initializeHighOrderDerivatives
(double h, double[] t, double[][] y, double[][] yDot) 在步骤开始时初始化高阶缩放导数。protected void
rescale
(double newStepSize) 重新缩放实例。void
setMaxGrowth
(double maxGrowth) 设置步长控制的最大增长因子。void
setMinReduction
(double minReduction) 设置步长控制的最小缩小因子。void
setSafety
(double safety) 设置步长控制的安全因子。void
setStarterIntegrator
(ODEIntegrator starterIntegrator) 设置起始积分器。protected void
start
(ExpandableODE equations, ODEState initialState, double finalTime) 开始积分。从类继承的方法 org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator
getMaxStep, getMinStep, getStepSizeHelper, initializeStep, resetInternalState, sanityChecks, setInitialStepSize, setStepSizeControl, setStepSizeControl
从类继承的方法 org.hipparchus.ode.AbstractIntegrator
acceptStep, addEventDetector, addStepEndHandler, addStepHandler, clearEventDetectors, clearStepEndHandlers, clearStepHandlers, computeDerivatives, getCurrentSignedStepsize, getEquations, getEvaluations, getEvaluationsCounter, getEventDetectors, 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.ODEIntegrator
integrate, integrate
-
字段详细资料
-
scaled
protected double[] scaled第一个缩放导数(h y')。 -
nordsieck
高阶缩放导数的Nordsieck矩阵。(h2/2 y'',h3/6 y''' ...,hk/k! y(k))
-
-
构造器详细资料
-
MultistepIntegrator
protected MultistepIntegrator(String name, int nSteps, int order, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance) throws MathIllegalArgumentException 使用给定的步长范围构建多步积分器。默认的起始积分器设置为带有一些默认设置的
Dormand-Prince 8(5,3)
积分器。默认的最大增长因子设置为相当低的值:21/order。
- 参数:
-
name
- 方法的名称 -
nSteps
- 多步方法的步数(不包括正在计算的步骤) -
order
- 方法的阶数 -
minStep
- 最小步长(即使是向后积分,也必须是正的,最后一步可以比这个小) -
maxStep
- 最大步长(即使是向后积分,也必须是正的) -
scalAbsoluteTolerance
- 允许的绝对误差 -
scalRelativeTolerance
- 允许的相对误差 - 抛出:
-
MathIllegalArgumentException
- 如果步数小于2
-
MultistepIntegrator
protected MultistepIntegrator(String name, int nSteps, int order, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) 使用给定的步长范围构建多步积分器。默认的起始积分器设置为带有一些默认设置的
Dormand-Prince 8(5,3)
积分器。默认的最大增长因子设置为相当低的值:21/order。
- 参数:
-
name
- 方法的名称 -
nSteps
- 多步方法的步数(不包括正在计算的步骤) -
order
- 方法的阶数 -
minStep
- 最小步长(即使是向后积分,也必须是正的,最后一步可以比这个小) -
maxStep
- 最大步长(即使是向后积分,也必须是正的) -
vecAbsoluteTolerance
- 允许的绝对误差 -
vecRelativeTolerance
- 允许的相对误差
-
-
方法详细资料
-
getStarterIntegrator
获取起始积分器。- 返回:
- 起始积分器
-
setStarterIntegrator
设置起始积分器。此起始积分器的各种步骤和事件处理程序将由多步积分器自动管理。在使用之前,将清除这些元素的任何用户配置。
- 参数:
-
starterIntegrator
- 起始积分器
-
start
protected void start(ExpandableODE equations, ODEState initialState, double finalTime) throws MathIllegalArgumentException, MathIllegalStateException 开始积分。此方法使用基础起始积分器计算一个步骤,并在步骤开始时初始化Nordsieck向量。起始积分器的目的仅是建立初始条件,它本身不会真正改变时间。顶层多步积分器仍然负责处理时间传播和事件处理,因为它将从头开始自己的计算。在某种意义上,起始积分器可以被视为一个虚拟的积分器,因此它永远不会触发任何用户事件,也不会调用任何用户步骤处理程序。
- 参数:
-
equations
- 要积分的完整微分方程组 -
initialState
- 初始状态(时间、主要状态向量和次要状态向量) -
finalTime
- 积分的目标时间(可以设置为小于initialState.getTime()
的值以进行向后积分) - 抛出:
-
MathIllegalArgumentException
- 如果数组维度与方程设置不匹配 -
MathIllegalArgumentException
- 如果积分步长太小 -
MathIllegalStateException
- 如果函数评估次数超过限制 -
MathIllegalArgumentException
- 如果无法将事件的位置围绕起来
-
initializeHighOrderDerivatives
protected abstract Array2DRowRealMatrix initializeHighOrderDerivatives(double h, double[] t, double[][] y, double[][] 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
protected void rescale(double newStepSize) 重新调整实例。由于缩放和Nordsieck数组与调用者共享,因此此方法会对调用者中的这些数组进行重新调整。
- 参数:
-
newStepSize
- 用于在缩放和Nordsieck数组中使用的新步长
-
computeStepGrowShrinkFactor
protected double computeStepGrowShrinkFactor(double error) 根据标准化误差计算步长增长/缩小因子。- 参数:
-
error
- 当前步骤的标准化误差 - 返回:
- 下一步的增长/缩小因子
-