Корреляция экспериментальных данных в Modelica / Dymola

Во-первых, я относительно новый пользователь и пытаюсь сопоставить данные физических испытаний с моделью, которую я построил с помощью Dymola / Modelica. В этой модели «переменная 1» имеет начальное значение, на основе которого рассчитываются «переменные 2, 3 и 4», и эти переменные (2,3 и 4) используются для повторного вычисления «переменной 1» и этого значения «переменной. 1 "необходимо использовать для следующего временного шага, и необходимо выполнить последующие пересчеты.

Я не уверен, как передавать эту «обновленную переменную 1» в качестве входных данных в модель на каждом временном шаге? Может ли кто-нибудь помочь мне в решении этой проблемы?

Спасибо.


person sananthk    schedule 22.02.2016    source источник
comment
ваш вопрос может быть более ясным, если вы обновите его с помощью образца кода   -  person Noam Hacker    schedule 22.02.2016
comment
Это помогает? modelica.org/events/modelica2006/Proceedings/sessions/   -  person matth    schedule 22.02.2016


Ответы (1)


Если я хорошо понял вопрос, у вас есть система уравнений, которую вы хотите решить отдельно, то есть решить одну систему уравнений, используя некоторые начальные значения или значения системы на предыдущем временном шаге, давайте назовем этот набор уравнений A, затем с его результаты в качестве входных данных решают набор уравнений B на следующем временном шаге и так далее. Ниже приведен пример дискретной системы с развязкой, в которой развязка достигается за счет сдвига периода тактовой частоты: введите описание изображения здесь И затем та же система, которая решается парным способом, так что каждый момент все уравнения решаются синхронно:  введите описание изображения здесь

Чтобы ответить на свой комментарий, вы также можете реализовать свою модель в разделе уравнений внутри оператора when, используя оператор pre, который используется для ссылки на последнее значение дискретной переменной во время события.

model test
  parameter Real timeStep = 0.1;
  Real T_i[4];
  Real K[4];
  Real M[4];
initial equation 
  T_i = {1,2,3,4}; //starting value of a T  
  K = T_i .* 1.1 .+ 4;
  M = K .* 1.1 .+ 4;
equation 
  when sample(timeStep,timeStep) then
      K = T_i .* 10 .+ 4;
      M = K .* 10 .+ 4;
      T_i = pre(M) + pre(K);
  end when;
end test;

надеюсь, это поможет

person Marco Romanoni    schedule 22.02.2016
comment
Привет, Марко! Чтобы прояснить мой вопрос, взгляните на приведенный ниже код модели: алгоритм T_i = [некоторый массив]; // начальное значение T K = f (T_i); M = f (K); T_i + 1 = f (M, T_i); // пересчет T T_i + 1 = T_i; // повторная инициализация T_i на T_i + 1 end; В этой функции есть начальное значение для «T_i», на основе этого значения я вычисляю K и M. С этими значениями K и M я повторно вычисляю новое значение для T, которое равно «T_i + 1». В основном я хочу использовать это новое значение «T_i + 1» как «T_i» для следующего временного шага. Пожалуйста, посоветуйте, как реализовать это в Modelica. Спасибо. - person sananthk; 23.02.2016