Документация Engee

Начальные уравнения языка физического моделирования Engee

Обычные уравнения выполняются в течение всего процесса симуляции. Метаданные [initial=true] позволяют указать дополнительные уравнения, которые выполняются только при инициализации модели.

Для инициализации системы дифференциально-алгебраических уравнений недостаточно только обычных уравнений компонентов. Рассмотрим систему, которая содержит непрерывных дифференциальных переменных и непрерывных алгебраических переменных. Для моделирования эта система имеет степеней свободы и должна содержать уравнений. Задача инициализации имеет до дополнительных неизвестных, которые соответствуют производным переменных. Эти дополнительные неизвестные могут быть удовлетворены, когда вы задаете целевые значения для переменных блока. Начальные уравнения — это еще один способ инициализации системы.

В общем случае максимальное количество целевых значений с высоким приоритетом, которые вы можете указать, равно количеству дополнительных неизвестных в задаче инициализации. Помимо неизвестных от дифференциальных переменных, в задаче инициализации есть еще одна неизвестная для каждой переменной события. Эти дополнительные неизвестные определяют общее максимальное количество исходных уравнений и целевых значений с высоким приоритетом. Если значений с высоким приоритетом слишком много, все они не могут быть удовлетворены.

Поскольку по умолчанию значение ключа initial для уравнений равно false, при объявлении обычных уравнений эти метаданные можно опустить:

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

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

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

Синтаксис начальных уравнений такой же, как и у обычных уравнений, за исключением того, что der(x) в начальных уравнениях рассматривается как неизвестное значение и решается при инициализации.

При включении конструкций assert в начальные уравнения их предикатные условия проверяются только один раз, после решения задачи инициализации (до начала симуляции). Используйте эти проверки для защиты от инициализации модели нефизическими значениями.

Чаще всего начальные уравнения задаются для инициализации системы в установившемся режиме, например:

@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