首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略了Modelica注释函数的逆

忽略了Modelica注释函数的逆
EN

Stack Overflow用户
提问于 2019-03-06 09:42:34
回答 1查看 179关注 0票数 4

inverse 问题:忽略函数的注释,并对逆进行数值计算。

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

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

  • 直接函数y(x) = sin(x)函数y_from_x输入实x;输出实y;算法y:=sin(x);注释(x=x_from_y(Y));结束y_from_x;
  • 其逆函数x(y) = asin(y)函数x_from_y输入实y;输出实x;算法x:=asin(y);端点x_from_y;
  • 两个相关方程y=时间;y= y_from_x(x);

正如您可能看到的,为了检索变量x的值,函数y_from_x应该倒置;因此,由于inverse注释显式地告诉如何反转该函数,我希望调用x_from_y

不,不是这样的。即使是在平坦的阶段,反函数也被丢弃,y_from_x的求解也是用迭代循环进行数值计算的。这发生在OpenModelica v1.14和Dymola 2018年。

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

全码

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 10:54:45

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

使用以下方法可以避免内联:

代码语言:javascript
复制
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类似。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55019892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档