как получить доступ к значению переменной в определенное время? - PullRequest
0 голосов
/ 06 декабря 2018

Я пробовал этот код:

model var
  Real x;
  Real y;
  Real z;
equation 

  x=6*time;
  when time>=6 then
    z=x;
  end when;
  y=3*z;
end var;

Но это даст мне y = 3*x (во время = 6), но со времени = 6, пока мне это нужно с самого начала.
Любое прямоеметод для этой проблемы?

1 Ответ

0 голосов
/ 27 декабря 2018

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

В зависимости от вашего приложения могут существовать способы решения вашей проблемы.,Одна из возможностей - перенести временное поведение в инициализацию.Таким образом вы фиксируете поведение до time=0 и начинаете с time=0 с ожидаемым поведением.

Например:

model var

  parameter Modelica.SIunits.Time t_zero = 6;
  parameter Real x(fixed=false);

  Real y;
  Real z;

initial equation
  x = 6*t_zero; // or some more complicated set of equations/functions

equation 
  z = x;
  y=3*z;

end var;

Признано, что это ограничивает вещи, потенциально слишком много, но вы можете иметь много параметров и иметь более сложное представление в блоке исходного уравнения,Вы также можете вызвать функцию x=func(), где вы выполнили интеграцию и т. Д., Чтобы получить значение x в time=0.

Надеюсь, что это поможет или сейчас, или в будущем.

...