Modelica对方程后的变量向量进行排序

Modelica对方程后的变量向量进行排序,modelica,dymola,openmodelica,Modelica,Dymola,Openmodelica,我有一个变量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); en

我有一个变量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;
有没有更好的方法来做到这一点,而不需要when情况或额外的变量

编辑:

函数(der(T))不是一个简单的代数表达式。此函数由for循环和if cases中包含的多个表达式组成。

它可能适用于:

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

问题是,函数(der(T))不是代数表达式。它由for循环和if cases中包含的多个表达式组成。您不能将功能放在函数的算法中吗?我不明白您在这里试图实现什么。您可以使用
T=function(der(T))
T=sort(function(der(T)))
,但不能同时使用这两种功能。你明白为什么(即单一分配规则)吗?是的,我明白分配规则。问题在于该函数由for循环和if情况组成。所以不可能在de sort()命令之间写入,您需要有两个变量。一个保存未排序版本的向量,如
T
,另一个保存已排序版本的向量,如
T2
。不可能有一个变量同时包含这两个变量。我想也许我看到了这个问题。您的“函数”获得排序版本的
der(T)
是否重要?这就是您希望
T
T2
相同的原因吗?一般来说,由于您在编辑中提到的原因,这是行不通的。您希望取
T
的导数,但正如您所指出的,它包含
for
循环和
if
语句(通常无法区分)。再一次,我建议你详细说明为什么需要这样做,结果可能是根本没有必要。我正在尝试是否可以使用排序函数,而不是模拟一个困难的物理过程。恐怕我不能进一步详述了。