忽略函数的Modelica注释逆

Dar*_*oni 4 annotations inverse modelica openmodelica dymola

问题:inverse函数的注释将被忽略,并且反函数将通过数值计算。

根据Modelica规范,可以指定给定函数的逆函数。

为了测试此功能,我尝试了一个非常简单的模型,该模型具有两个功能:

如您所见,为了检索变量x的值,应将函数y_from_x 反转;因此,由于inverse注释显式说明了如何反转函数,因此我希望可以调用x_from_y

不,那不会发生。即使在展平步骤中,也将放弃反函数,并使用迭代循环以数值方式计算y_from_x的解。OpenModelica v1.14和Dymola 2018都会发生这种情况。

这是预期的行为吗?如何使用此inverse注释?有没有办法避免这种低效的迭代解决方案?

完整代码

model test_inverse

Real y, x;

function y_from_x
  input Real x;
  output Real y;
algorithm
  y:=sin(x);
  annotation(inverse(x = x_from_y(y)));
end y_from_x;

function x_from_y
  input Real y;
  output Real x;
algorithm
  x:=asin(y);
end x_from_y;


equation
  y = time;
  y = y_from_x(x);
end test_inverse;
Run Code Online (Sandbox Code Playgroud)

Han*_*son 5

Dymola(以及OpenModelica中也可能存在)的问题是,在使用逆函数之前已内联函数,但是语法正确。

可以避免内联:

function y_from_x
  input Real x;
  output Real y;
algorithm
  y:=sin(x);
  annotation(LateInline=true, inverse(x = x_from_y(y)));
end y_from_x;
Run Code Online (Sandbox Code Playgroud)

但是,请注意,Dymola不会在数值上反转正弦函数-而是对正弦函数使用内置的反函数;这与asin类似。

  • @matth通常是不必要的(因为该函数无法内联),并且我认为应该更新工具以避免对此的需要。(将验证Dymola的下一版本。) (3认同)