Доступ к начальным значениям переменных осуществляется по их именам в разделе исходного уравнения.С некоторыми небольшими изменениями ваш код работает с Dymola a OpenModlica:
model SetParametersFromInitialValues
Real y1(start=3.0, fixed=true);
Real y2(start=2.0, fixed=true);
final parameter Real offset(fixed=false);
equation
der(y1) = sin(time);
y2 = y1 + offset;
end SetParametersFromInitialValues;
Обратите внимание, что здесь не требуется никакого раздела исходного уравнения, поскольку уравнения также действительны во время инициализации.Подробнее см. Ниже.
Подробная информация об удаленном начальном уравнении
В спецификации Modelica 3.40 записано в главе 8.6 Инициализация, начальное уравнение и начальное значение.алгоритм :
При инициализации используются все уравнения и алгоритмы, которые используются в предполагаемой операции [такой как моделирование или линеаризация].
Поскольку мы уже указали y2 = y1 + offset
в разделе уравнений, это уравнение не должно быть снова объявлено в разделе начальных уравнений (offset = y2 - y1
- это то же самое уравнение, только что написанное по-другому).
Фактически, этот пример очень хорошо демонстрирует, как Modelica позволяет вам описывать модели с помощью уравнений вместо простых присваиваний.
Во время инициализации уравнение
y2 = y1 + offset
решается как
offset := y2 - y1
с использованием начальных значений y1
и y2
.
Во время моделирования используется то же уравнение для вычисления
y2 := y1 + offset.
Подробная информация офиксированный атрибут
Modelica на примере дает очень хорошее объяснение фиксированного атрибута:
Фиксированный атрибут изменяет способ использования атрибута start при запускеАтрибут используется в качестве начального условия.Обычно начальный атрибут считается начальным условием «откат» и используется только в случае недостаточных начальных условий, явно указанных в разделах начального уравнения.Однако если для атрибута fixed установлено значение true, атрибут start обрабатывается так, как если бы он использовался в качестве явного начального уравнения (т. Е. Он больше не используется в качестве запасного варианта, а вместо этого рассматривается как строгое начальное условие).
Таким образом, без использования fixed = true мы можем переформулировать приведенный выше код следующим образом:
model SetParametersFromInitialValues2
Real y1;
Real y2;
final parameter Real offset(fixed=false);
initial equation
y1 = 3;
y2 = 1;
equation
der(y1) = sin(time) + 1;
y2 = y1 + offset;
end SetParametersFromInitialValues2;