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;发布于 2019-03-06 10:54:45
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类似。
https://stackoverflow.com/questions/55019892
复制相似问题