接口 ComplexSecondaryODE
public interface ComplexSecondaryODE
此接口允许用户向主要的微分方程组添加次要微分方程。
在某些情况下,用户可能需要将一些特定于问题的方程与主要的微分方程组一起积分。一个例子是最优控制,其中与最小化哈密顿量相关的伴随参数必须被积分。
通过将实例转换为SecondaryODE
后,此接口允许用户将这些方程添加到主要的一阶微分方程
集合中,方法是使用ExpandableODE.addSecondaryEquations(SecondaryODE)
方法。
- 从以下版本开始:
- 1.4
- 另请参阅:
-
方法概要
修饰符和类型方法说明Complex[]
computeDerivatives
(double t, Complex[] primary, Complex[] primaryDot, Complex[] secondary) 计算与次要状态参数相关的导数。int
获取次要状态参数的维度。default void
在ODE积分开始时初始化方程。
-
方法详细资料
-
getDimension
int getDimension()获取次要状态参数的维度。- 返回:
- 次要状态参数的维度
-
init
在ODE积分开始时初始化方程。此方法在积分开始时调用一次。如果需要,方程可以使用此方法初始化一些内部数据。
默认实现不执行任何操作。
- 参数:
-
t0
- 积分开始时独立时间变量的值 -
primary0
- 包含积分开始时主状态向量的值的数组 -
secondary0
- 包含积分开始时次要状态向量的值的数组 -
finalTime
- 积分的目标时间
-
computeDerivatives
Complex[] computeDerivatives(double t, Complex[] primary, Complex[] primaryDot, Complex[] secondary) throws MathIllegalArgumentException, MathIllegalStateException 计算与次要状态参数相关的导数。在某些情况下,额外的方程可能需要更改主状态的导数(即
primaryDot
数组的内容)。一个用例是最优控制,其中次要方程处理共轭状态,这会改变控制,而控制会改变主状态。在这种情况下,主方程和次要方程实际上并不是彼此独立的,因此如果可能的话,最好将状态和共轭状态及其方程都放在主方程中。由于这并不总是可能的,此方法明确地允许修改primaryDot
数组的内容。此数组将仅在所有次要方程计算出其导数后用于演化主状态,从而允许此副作用。- 参数:
-
t
- 当前独立时间变量的值 -
primary
- 包含当前主状态向量值的数组 -
primaryDot
- 包含主状态向量的导数的数组(当额外方程对主方程产生影响时,方法允许在此更改导数) -
secondary
- 包含当前次要状态向量值的数组 - 返回:
- 次要状态向量的导数
- 抛出:
-
MathIllegalStateException
- 如果函数评估次数超过限制 -
MathIllegalArgumentException
- 如果数组维度与方程设置不匹配
-