问题:忽略函数的inverse
注释,并以数字方式计算逆。
根据Modelica Specifications,可以指定给定函数的逆。
为了测试这个功能,我尝试了一个非常简单的模型,它有两个函数:
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;
如您所见,为了检索变量x的值,应该反转函数y_from_x;因此,由于y = time;
y = y_from_x(x);
注释明确告诉如何反转函数,我希望调用x_from_y。
不,那不是发生了什么。即使只是在展平步骤中,也会丢弃反函数,并且使用迭代循环以数字方式计算y_from_x的解。 OpenModelica v1.14和Dymola 2018都会发生这种情况。
这是预期的行为吗?如何使用这个inverse
注释?有没有办法避免这种低效的迭代解决方案?
完整代码
inverse
Dymola(也可能在OpenModelica中)的问题是在使用反转之前函数是内联的,但是你的语法是正确的。
使用以下方法可以避免内联:
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不会在数字上反转正弦函数 - 而是使用内置逆函数进行正弦函数;这与asin类似。