gpt4 book ai didi

annotations - Modelica 函数的反函数注释被忽略

转载 作者:行者123 更新时间:2023-12-05 00:46:06 25 4
gpt4 key购买 nike

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

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

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

  • 直接函数 y(x) = sin(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;
  • 它的反函数 x(y) = asin(y)
    function x_from_y
    input Real y;
    output Real x;
    algorithm
    x:=asin(y);
    end x_from_y;
  • 几个相关的方程
    y = time;
    y = y_from_x(x);

  • 如您所见,为了检索变量 的值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。

    关于annotations - Modelica 函数的反函数注释被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55019892/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com