函数的 Modelica 注释逆函数被忽略

Modelica annotation inverse of function is ignored

问题:函数的inverse注解被忽略,取反数值计算

根据 Modelica Specifications 可以指定给定函数的反函数。

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

如您所见,为了检索变量 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;

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;

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