gpt4 book ai didi

modelica - 根据连续变量的起始/初始值设置参数

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

任务 :

  • 我有一个变量 y1其衍生物受某种规律的驱动
    例如y1 = sin(time)我为其设置了起始值
    例如y1 = 3.0
  • 我有第二个变量 y2y2 = y1 + offset 定义
  • 现在,我希望这个偏移量是 Parameter (因此在模拟过程中保持不变)并根据 y1 的起始/初始值进行评估和 y2喜欢 offset = y2.start - y1.start

  • 代码

    从概念上讲,我想实现:
    model SetParametersFromInitialValues

    Real y1(start = 3.0, fixed = true);
    Real y2(start = 3.0, fixed = true);
    parameter Real offset(fixed = false);

    initial equation
    offset = y2.start - y1.start;
    equation
    der(y1) = sin(time);
    y2 = y1 + offset;

    end SetParametersFromInitialValues;

    我认为它可以工作,因为 start应该是内置类型Real的参数属性,但是这种方式不可用。

    我也想过使用 discrete而不是 parameter ,但我不知道这是否会影响性能。
    但是,即使在这种情况下,我也会收到一些危险的警告(由于代数环),即“无法象征性地检查给定初始化系统的一致性,因为相关方程是代数环的一部分。这不是还支持。”
    model SetParametersFromInitialValues

    Real y1(start = 3.0, fixed = true);
    discrete Real offset(fixed = false);
    Real y2(start = 5.0, fixed = true);

    equation
    when initial() then
    offset = y2 - y1;
    end when;
    der(y1) = sin(time);
    y2 = y1 + offset;

    end SetParametersFromInitialValues;

    问题 :
  • 有没有办法用 Parameter 实现我想要的?我是否被迫使用更多“可变”变量?
  • fixed属性要求?如果y1怎么办和 y2值为 fixed从其他组件?如果不是呢?

  • (请注意,我认为它与 Define Model Parameter as Variable 不同,因为我需要专门根据初始值评估参数)

    最佳答案

    变量的初始值在初始方程部分中使用它们的名称进行访问。
    通过一些较小的修改,您的代码可以与 Dymola 和 OpenModlica 一起使用:

    model SetParametersFromInitialValues
    Real y1(start=3.0, fixed=true);
    Real y2(start=2.0, fixed=true);
    final parameter Real offset(fixed=false);
    equation
    der(y1) = sin(time);
    y2 = y1 + offset;
    end SetParametersFromInitialValues;

    请注意,此处不需要初始方程部分,因为方程在初始化期间也有效。有关详细说明,请参阅下面的详细信息。

    有关删除的初始方程的详细信息

    Modelica Specification 3.40在第 8.6 章初始化、初始方程和初始算法中写道:

    The initialization uses all equations and algorithms that are utilized in the intended operation [such as simulation or linearization].



    由于我们指定了 y2 = y1 + offset在方程部分已经,这个方程不能在初始方程部分再次声明( offset = y2 - y1 是同一个方程,只是用另一种方式写的)。

    事实上,这个例子很好地展示了 Modelica 如何让你用方程而不是简单的赋值来描述模型。

    在初始化方程
    y2 = y1 + offset

    被解决为
    offset := y2 - y1

    通过使用 y1 的起始值和 y2 .

    在模拟过程中,相同的方程用于计算
    y2 := y1 + offset.

    有关固定属性的详细信息

    Modelica by Example对固定属性给出了很好的解释:

    The fixed attribute changes the way the start attribute is used when the start attribute is used as an initial condition. Normally, the start attribute is considered a “fallback” initial condition and only used if there are insufficient initial conditions explicitly specified in the initial equation sections. However, if the fixed attribute is set to true, then the start attribute is treated as if it was used as an explicit initial equation (i.e., it is no longer used as a fallback, but instead treated as a strict initial condition).



    因此,如果不使用 fixed=true,我们可以将上面的代码重新编写如下:
    model SetParametersFromInitialValues2
    Real y1;
    Real y2;
    final parameter Real offset(fixed=false);
    initial equation
    y1 = 3;
    y2 = 1;
    equation
    der(y1) = sin(time) + 1;
    y2 = y1 + offset;
    end SetParametersFromInitialValues2;

    关于modelica - 根据连续变量的起始/初始值设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475666/

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