Регулярные уравнения выполняются на протяжении всей симуляции. The (Initial=true)
позволяет вам задать дополнительные уравнения, которые выполняются только во время инициализации модели.
Одних только регулярных уравнений компонента недостаточно для инициализации системы ДАУ. Рассмотрим систему с n непрерывными дифференциальными переменными и m непрерывными алгебраическими переменными. Для симуляции эта система имеет n+m
степени свободы и должны обеспечивать n+m
уравнения. Задача инициализации имеет до n дополнительных неизвестных, которые соответствуют производным переменным. Эти дополнительные неизвестные могут быть удовлетворены, когда вы задаете начальные цели для основных переменных. Начальные уравнения обеспечивают другой способ инициализации системы.
В целом максимальное количество высокоприоритетных целей, которые вы можете задать, равно количеству дополнительных неизвестных в задаче инициализации. Помимо неизвестных из дифференциальных переменных, задача инициализации также имеет еще одну неизвестную для каждой переменной события. Эти дополнительные неизвестные определяют максимальное объединенное количество начальных уравнений и высокоприоритетных переменных целей. Если существует слишком много высокоприоритетных целей, все они не могут быть достигнуты. Для получения дополнительной информации см. Раздел «Инициализация переменной уровня блоков»
Потому что значение по умолчанию Initial
атрибут для уравнений false
, можно опустить этот атрибут при объявлении правильных уравнений:
equations (Initial = true) % initial equations [...] end equations (Initial = false) % regular equations [...] end equations % regular equations [...] end
Синтаксис начальных уравнений такой же, как и у правильных уравнений, за исключением:
der(x)
в начальных уравнениях обрабатывается как неизвестное значение и решается для во время инициализации.
delay
и integ
операторы запрещены.
Когда вы включаете assert
конструкции в начальных уравнениях, их предикатные условия проверяются только один раз, после решения начальных условий (до начала симуляции см. «Расчеты начальных условий»). Используйте эти утверждения для защиты от инициализации модели с нефизическими значениями. Для получения дополнительной информации смотрите Программирование ошибок времени выполнения и предупреждения.
Общим случаем использования для определения начальных уравнений является инициализация системы в установившемся состоянии, например:
component C parameters a = {-5, '1/s'}; b = {-2, '1/s'}; end outputs x = 5; y = 10; end equations der(x) == a*x + b*y; der(y) == b*y; end equations(Initial=true) 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;
Примечание
Когда вы инициализируете модель из рабочей точки, особенно ту, которая была сгенерирована из записанных данных моделирования, рабочая точка, вероятно, будет содержать все необходимые высокоприоритетные цели, и применение начальных уравнений приведет к избыточно заданной модели. Поэтому, если вы инициализируете модель из рабочей точки, решатель игнорирует все начальные уравнения, которые содержат переменные, присутствующие в данных рабочей точки. Начальные уравнения для других переменных не затронуты: например, если добавить блок к модели после извлечения данных рабочей точки, начальные уравнения для этого блока будут выполнены во время инициализации. Для получения дополнительной информации смотрите Использование данных рабочей точки для инициализации модели.