类 AdamsBashforthFieldIntegrator<T extends CalculusFieldElement<T>>
- 类型参数:
-
T
- 字段元素的类型
- 所有已实现的接口:
-
FieldODEIntegrator<T>
Adams-Bashforth方法(实际上只是Adams的方法)是显式的多步ODE求解器。这个实现是经典方法的变体:它使用自适应步长来实现误差控制,而经典实现是固定步长的。在步骤n+1处的状态向量的值是步骤n处的值和步骤n、n-1、n-2等处的导数的简单组合。根据想要用于计算下一个值的前k个步骤的数量k,不同的公式可用:
- k = 1: yn+1 = yn + h y'n
- k = 2: yn+1 = yn + h (3y'n-y'n-1)/2
- k = 3: yn+1 = yn + h (23y'n-16y'n-1+5y'n-2)/12
- k = 4: yn+1 = yn + h (55y'n-59y'n-1+37y'n-2-9y'n-3)/24
- ...
一个k步的Adams-Bashforth方法的阶数为k。
在最后一次重置事件和积分结束之间必须有足够的时间让“起始积分器”执行多个步骤,否则在积分过程中可能会抛出异常。用户可以调整积分的结束日期或起始积分器的步长,以确保在积分结束之前可以完成足够数量的步骤。
实现细节
我们将步骤n处的缩放导数si(n)定义为:\[ \left\{\begin{align} s_1(n) &= h y'_n \text{ for first derivative}\\ s_2(n) &= \frac{h^2}{2} y_n'' \text{ for second derivative}\\ s_3(n) &= \frac{h^3}{6} y_n''' \text{ for third derivative}\\ &\cdots\\ s_k(n) &= \frac{h^k}{k!} y_n^{(k)} \text{ for } k^\mathrm{th} \text{ derivative} \end{align}\right. \]
上述定义使用了经典表示法,其中包含几个先前的一阶导数。让我们定义 \[ q_n = [ s_1(n-1) s_1(n-2) \ldots s_1(n-(k-1)) ]^T \](为了清晰起见,我们在符号中省略了k索引)。根据这些定义,Adams-Bashforth方法可以写成:\[ \left\{\begin{align} k = 1: & y_{n+1} = y_n + s_1(n) \\ k = 2: & y_{n+1} = y_n + \frac{3}{2} s_1(n) + [ \frac{-1}{2} ] q_n \\ k = 3: & y_{n+1} = y_n + \frac{23}{12} s_1(n) + [ \frac{-16}{12} \frac{5}{12} ] q_n \\ k = 4: & y_{n+1} = y_n + \frac{55}{24} s_1(n) + [ \frac{-59}{24} \frac{37}{24} \frac{-9}{24} ] q_n \\ & \cdots \end{align}\right. \]
我们的实现不是使用仅包含一阶导数的经典表示法(yn、s1(n)和qn),而是使用了在同一步骤中取得的更高次数的缩放导数的Nordsieck向量(yn、s1(n)和rn),其中rn定义为:\[ r_n = [ s_2(n), s_3(n) \ldots s_k(n) ]^T \](在这里我们再次省略了符号中的k索引以便清晰)
泰勒级数公式表明,对于任何索引偏移i,s1(n-i)可以从s1(n)、s2(n) ... sk(n)计算出来,该公式对于k次多项式是精确的。\[ s_1(n-i) = s_1(n) + \sum_{j\gt 0} (j+1) (-i)^j s_{j+1}(n) \] 可以使用几个i值来计算经典表示法和Nordsieck向量之间的转换。根据上述泰勒级数公式得到的rn和qn之间的转换是:\[ q_n = s_1(n) u + P r_n \] 其中u是[ 1 1 ... 1 ]T向量,P是(k-1)×(k-1)矩阵,由带有\((j+1) (-i)^j\)项的行数为1开始的i和列数为1开始的j构建:\[ P=\begin{bmatrix} -2 & 3 & -4 & 5 & \ldots \\ -4 & 12 & -32 & 80 & \ldots \\ -6 & 27 & -108 & 405 & \ldots \\ -8 & 48 & -256 & 1280 & \ldots \\ & & \ldots\\ \end{bmatrix} \]
使用Nordsieck向量有几个优点:
- 它极大地简化了步骤插值,因为插值器主要应用泰勒级数公式,
- 它简化了触发截断步骤的离散事件发生时的步骤更改,
- 它允许扩展方法以支持自适应步长。
步骤n+1处的Nordsieck向量的计算方法如下:
- yn+1 = yn + s1(n) + uT rn
- s1(n+1) = h f(tn+1, yn+1)
- rn+1 = (s1(n) - s1(n+1)) P-1 u + P-1 A P rn
其中A是一个行移位矩阵(左下部分是单位矩阵):
[ 0 0 ... 0 0 | 0 ] [ ---------------+---] [ 1 0 ... 0 0 | 0 ] A = [ 0 1 ... 0 0 | 0 ] [ ... | 0 ] [ 0 0 ... 1 0 | 0 ] [ 0 0 ... 0 1 | 0 ]
P-1u向量和P-1 A P矩阵不依赖于状态,它们仅依赖于k,因此它们只需预先计算一次。
-
字段概要
从类继承的字段 org.hipparchus.ode.MultistepFieldIntegrator
nordsieck, scaled
-
构造器概要
构造器说明AdamsBashforthFieldIntegrator
(Field<T> field, int nSteps, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) 使用给定的阶数和步长控制参数构建Adams-Bashforth积分器。AdamsBashforthFieldIntegrator
(Field<T> field, int nSteps, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance) 使用给定的阶数和步长控制参数构建Adams-Bashforth积分器。 -
方法概要
修饰符和类型方法说明protected double
errorEstimation
(T[] previousState, T predictedTime, T[] predictedState, T[] predictedScaled, FieldMatrix<T> predictedNordsieck) 估计误差。protected org.hipparchus.ode.nonstiff.AdamsFieldStateInterpolator
<T> finalizeStep
(T stepSize, T[] predictedY, T[] predictedScaled, Array2DRowFieldMatrix<T> predictedNordsieck, boolean isForward, FieldODEStateAndDerivative<T> globalPreviousState, FieldODEStateAndDerivative<T> globalCurrentState, FieldEquationsMapper<T> equationsMapper) 完成步骤。从类继承的方法 org.hipparchus.ode.nonstiff.AdamsFieldIntegrator
initializeHighOrderDerivatives, integrate, updateHighOrderDerivativesPhase1, updateHighOrderDerivativesPhase2
从类继承的方法 org.hipparchus.ode.MultistepFieldIntegrator
computeStepGrowShrinkFactor, getMaxGrowth, getMinReduction, getNSteps, getSafety, getStarterIntegrator, rescale, setMaxGrowth, setMinReduction, setSafety, setStarterIntegrator, start
从类继承的方法 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
-
构造器详细资料
-
AdamsBashforthFieldIntegrator
public AdamsBashforthFieldIntegrator(Field<T> field, int nSteps, double minStep, double maxStep, double scalAbsoluteTolerance, double scalRelativeTolerance) throws MathIllegalArgumentException 使用给定的阶数和步长控制参数构建Adams-Bashforth积分器。- 参数:
-
field
- 时间和状态向量元素所属的字段 -
nSteps
- 方法的步数,不包括正在计算的步骤 -
minStep
- 最小步长(符号无关,无论是正向还是反向积分方向,最后一步可以小于此值) -
maxStep
- 最大步长(符号无关,无论是正向还是反向积分方向,最后一步可以小于此值) -
scalAbsoluteTolerance
- 允许的绝对误差 -
scalRelativeTolerance
- 允许的相对误差 - 抛出:
-
MathIllegalArgumentException
- 如果阶数小于等于1
-
AdamsBashforthFieldIntegrator
public AdamsBashforthFieldIntegrator(Field<T> field, int nSteps, double minStep, double maxStep, double[] vecAbsoluteTolerance, double[] vecRelativeTolerance) throws IllegalArgumentException 使用给定的阶数和步长控制参数构建Adams-Bashforth积分器。- 参数:
-
field
- 时间和状态向量元素所属的字段 -
nSteps
- 方法的步数,不包括正在计算的步骤 -
minStep
- 最小步长(符号无关,无论是正向还是反向积分方向,最后一步可以小于此值) -
maxStep
- 最大步长(符号无关,无论是正向还是反向积分方向,最后一步可以小于此值) -
vecAbsoluteTolerance
- 允许的绝对误差 -
vecRelativeTolerance
- 允许的相对误差 - 抛出:
-
IllegalArgumentException
- 如果阶数小于等于1
-
-
方法详细资料
-
errorEstimation
protected double errorEstimation(T[] previousState, T predictedTime, T[] predictedState, T[] predictedScaled, FieldMatrix<T> predictedNordsieck) 估计误差。- 指定者:
-
errorEstimation
在类中AdamsFieldIntegrator<T extends
-
finalizeStep
protected org.hipparchus.ode.nonstiff.AdamsFieldStateInterpolator<T> finalizeStep(T stepSize, T[] predictedY, T[] predictedScaled, Array2DRowFieldMatrix<T> predictedNordsieck, boolean isForward, FieldODEStateAndDerivative<T> globalPreviousState, FieldODEStateAndDerivative<T> globalCurrentState, FieldEquationsMapper<T> equationsMapper) Finalize the step.- 指定者:
-
finalizeStep
在类中AdamsFieldIntegrator<T extends CalculusFieldElement<T>>
- 参数:
-
stepSize
- 在缩放和Nordsieck数组中使用的步长 -
predictedY
- 预测步骤结束时的状态 -
predictedScaled
- 预测的第一个缩放导数 -
predictedNordsieck
- 预测的Nordsieck向量 -
isForward
- 积分方向指示器 -
globalPreviousState
- 全局步骤的起点 -
globalCurrentState
- 全局步骤的终点 -
equationsMapper
- ODE方程主要和次要分量的映射器 - 返回:
- 步骤插值器
-