AnyMath 文档

物理建模语言的初始方程 AnyMath

在整个仿真过程中执行通常的方程。 元数据 [初始=真] 它们允许您指定仅在模型初始化期间执行的附加方程。

要初始化一个微分代数方程组,只有通常的分量方程是不够的。 考虑一个包含 连续微分变量和 连续代数变量。 对于建模,该系统具有 自由度并且必须包含 方程。 初始化任务具有高达 对应于变量的导数的附加未知数。 当您为块变量设置目标值时,可以满足这些额外的未知数。 初始方程是初始化系统的另一种方法。

通常,您可以指定的高优先级目标的最大数量等于初始化任务中附加未知数的数量。 除了来自差分变量的未知数之外,初始化任务中的每个事件变量还有另一个未知。 这些额外的未知数确定初始方程和高优先级目标值的总最大数量。 如果高优先级值太多,则不能全部满足。

因为键的默认值是 初始 对于方程它等于 错误 在声明常态分方程时,可以省略此元数据。:

@equations [initial=true] begin  # начальные уравнения
  [...]
end

@equations [initial=false] begin # обычные уравнения
  [...]
end

@equations begin # обычные уравнения
  [...]
end

初始方程的语法与普通方程的语法相同,不同之处在于 德(x) 在初始方程中,它被认为是一个未知值,并在初始化过程中求解。

启用构造时 断言 在初始方程中,在求解初始化问题之后(在模拟开始之前),它们的谓词条件只被检查一次。 使用这些检查可防止使用非物理值初始化模型。

通常,初始方程被设置为在稳态下初始化系统,例如:

@engeemodel C begin

    @parameters begin
        a = -5, [unit="1/s"]
        b = -2, [unit="1/s"]
    end

    @outputs begin
        x = 5
        y = 10
    end

    @equations begin
       der(x) ~ a*x + b*y
       der(y) ~ b*y
    end

    @equations [initial=true] begin
       der(x) ~ 0
       der(y) ~ 0
    end

end

在初始化时,方程具有以下形式:

       der(x) ~ 0
       der(y) ~ 0
       der(x) ~ a*x + b*y
       der(y) ~ b*y

对于仿真的其余部分,方程具有以下形式:

       der(x) ~ a*x + b*y
       der(y) ~ b*y