程序包 org.hipparchus.ode

接口 SecondaryODE

所有已知子接口:
SecondaryEquations

public interface SecondaryODE
此接口允许用户向主要的微分方程组添加次要微分方程。

在某些情况下,用户可能需要将一些特定于问题的方程与主要的微分方程组一起积分。一个例子是最优控制,其中与最小化哈密顿量相关联的伴随参数必须被积分。

通过ExpandableODE.addSecondaryEquations(SecondaryODE)方法,此接口允许用户将这些方程添加到主要的一阶微分方程组中。

另请参阅:
  • 方法概要

    修饰符和类型
    方法
    说明
    double[]
    computeDerivatives(double t, double[] primary, double[] primaryDot, double[] secondary)
    计算与次要状态参数相关的导数。
    int
    获取次要状态参数的维度。
    default void
    init(double t0, double[] primary0, double[] secondary0, double finalTime)
    在ODE积分开始时初始化方程。
  • 方法详细资料

    • getDimension

      int getDimension()
      获取次要状态参数的维度。
      返回:
      次要状态参数的维度
    • init

      default void init(double t0, double[] primary0, double[] secondary0, double finalTime)
      在ODE积分开始时初始化方程。

      此方法在积分开始时调用一次。如果需要,方程可以使用此方法初始化一些内部数据。

      默认实现不执行任何操作。

      参数:
      t0 - 积分开始时独立时间变量的值
      primary0 - 包含积分开始时主状态向量的值的数组
      secondary0 - 包含积分开始时次要状态向量的值的数组
      finalTime - 积分的目标时间
    • computeDerivatives

      double[] computeDerivatives(double t, double[] primary, double[] primaryDot, double[] secondary) throws MathIllegalArgumentException, MathIllegalStateException
      计算与次要状态参数相关的导数。

      在某些情况下,额外的方程可能需要改变主状态的导数(即primaryDot数组的内容)。一个使用案例是最优控制,当次要方程处理共轭状态时,这会改变控制,而控制会改变主状态。在这种情况下,主方程和次要方程实际上并不是彼此独立的,因此如果可能的话,最好将状态和共轭状态及其方程都放在主方程中。由于这并不总是可能,此方法明确地允许修改primaryDot数组的内容。此数组将在所有次要方程计算出导数后才会用于演化主状态,从而允许这种副作用发生。

      参数:
      t - 当前独立时间变量的值
      primary - 包含当前主状态向量值的数组
      primaryDot - 包含主状态向量的导数(当额外方程对主方程产生影响时,方法允许在此更改导数)
      secondary - 包含当前次要状态向量值的数组
      返回:
      次要状态向量的导数
      抛出:
      MathIllegalStateException - 如果函数评估次数超过限制
      MathIllegalArgumentException - 如果数组维度与方程设置不匹配