Modelica сортирует переменный вектор после уравнений

У меня есть переменная T, которая является вектором. Переменная зависит от своей производной и, следовательно, зависит от времени:

T = function(der(T))

Я хотел бы сделать что-то вроде этого:

T = function(der(T)); 
T = Modelica.Math.Vectors.sort(T);

Это нельзя реализовать как таковое, иначе выскакивает ошибка. Я использовал следующий обходной путь:

T = function(der(T));
T2 = Modelica.Math.Vectors.sort(T);

when sample(0,t) then
  reinit(T, T2);
end when;

Есть ли лучший способ сделать это без необходимости в случае когда или в дополнительной переменной?

РЕДАКТИРОВАТЬ:

function(der(T)) не является простым алгебраическим выражением. Эта функция состоит из нескольких выражений, содержащихся в циклах for и if case.


person barbar    schedule 13.05.2014    source источник
comment
Я не понимаю, чего вы пытаетесь добиться здесь. Вы можете иметь T=function(der(T)) или T=sort(function(der(T))), но не оба. Вы понимаете, почему (т. е. единственное правило присваивания)?   -  person Michael Tiller    schedule 14.05.2014
comment
Да, я понимаю правило назначения. Проблема в том, что функция состоит из циклов for и if case. Так что нельзя писать это между командой de sort().   -  person barbar    schedule 14.05.2014
comment
Вам нужно будет иметь две переменные. Один содержит несортированную версию вектора, например. T и отдельный, например. T2, который содержит отсортированный. У вас не может быть одной переменной, которая содержит оба.   -  person Michael Tiller    schedule 14.05.2014
comment
Я думаю, что, возможно, я вижу проблему здесь. Важно ли, чтобы ваша функция получала отсортированную версию der(T)? Поэтому вы хотите, чтобы T и T2 были одинаковыми? В общем, это не сработает по причинам, которые вы упомянули в своем редактировании. Вы хотите взять производную от T, но, как вы указываете, она содержит for циклов и if утверждений (которые, как правило, не могут быть дифференцированы). Опять же, я бы посоветовал вам уточнить, почему вам нужно это сделать, и может оказаться, что это даже не нужно.   -  person Michael Tiller    schedule 15.05.2014
comment
Я пытаюсь использовать функцию сортировки вместо моделирования сложного физического процесса. Боюсь, я не могу вдаваться в подробности.   -  person barbar    schedule 18.05.2014


Ответы (1)


Возможно, это работает с:

T = Modelica.Math.Vectors.sort(function(der(T)));
person Adrian Pop    schedule 13.05.2014
comment
Проблема в том, что function(der(T)) не является алгебраическим выражением. Он состоит из нескольких выражений, содержащихся в циклах for и if case. - person barbar; 13.05.2014
comment
Разве вы не можете поместить функциональность алгоритма в функцию? - person Adrian Pop; 16.05.2014