Предупреждение об инициализации в Dymola

В моей модели я запутался, почему начальные условия НЕ указаны полностью.

Вот код и скриншот:

model WithAlgebraicLoop_Right
  extends Modelica.Icons.Example;
  Real x;
  Real y(start=1, fixed=true);
  Boolean cond;
equation 
  cond = x > 0.5;
  when pre(cond) then
    y = 1*time;
  end when;
  x = sin(y*10*time);
end WithAlgebraicLoop_Right;

Я думаю, что во время инициализации x можно было вычислить из y, поэтому cond можно было вычислить из x, так почему же Dymola не делает так, как я думаю?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
149
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конечно, переменная дискретного времени cond может быть рассчитана в соответствии с заданными уравнениями. Однако его предварительное значение для итерации события при инициализации неизвестно и должно быть установлено либо путем установки фиксированного начального значения, либо с помощью начального уравнения, как вы предпочитаете.

model WithAlgebraicLoop_Right1
  Real x;
  Real y(start=1, fixed=true);
  Boolean cond(start=false, fixed=true);
equation 
  cond = x > 0.5;
  when pre(cond) then
    y = 1*time;
  end when;
  x = sin(y*10*time);
end WithAlgebraicLoop_Right1;

или

model WithAlgebraicLoop_Right2
  Real x;
  Real y(start=1, fixed=true);
  Boolean cond;
initial equation
  pre(cond) = false;
equation 
  cond = x > 0.5;
  when pre(cond) then
    y = 1*time;
  end when;
  x = sin(y*10*time);
end WithAlgebraicLoop_Right2;

установка фиксированного начального значения может вычислить предварительное значение переменных? Я думал, что установка фиксированного начального значения означает, что вы знаете значение переменной от времени = 0 с и далее, но не pre-value. Но я проверяю модель, она работает без предупреждений, поэтому я не уверен, что это за внутренний механизм.

Jack 13.12.2020 07:26

Да, это так, см. раздел 8.6 об инициализации спецификации языка Modelica версии 3.4 (Specification.modelica.org/maint/3.4/…): Для всех дискретных переменных vd уравнение pre(vd) = startExpression добавляется в уравнения инициализации, если start = startExpression и fixed = true.

tbeu 13.12.2020 09:39

Кстати, я бы предпочел фиксированное начальное значение, так как вы можете легко изменить их в компонентах, чего нельзя сказать об исходных уравнениях. См. это обсуждение для получения дополнительной информации: github.com/mtiller/ModelicaBook/issues/133

tbeu 13.12.2020 09:43

В разделе 8.6 вы также можете прочитать о различной инициализации переменных непрерывного и дискретного времени. То, что вы упомянули выше, справедливо только для переменных с непрерывным временем, но cond является переменной с дискретным временем.

tbeu 13.12.2020 09:49

Другие вопросы по теме