0

如何使用 Modelica 确定经过时间的混合时间连续和时间离散信号 x(t) 的最大值存在问题,即

y(t) = max{ x(s) with s in [startTime,t] }。

这是 Modelica 错误跟踪器中的一个未解决问题(请参阅 https://trac.modelica.org/Modelica/ticket/109)。

我将给出一个 SimultionX 特定的解决方案。

4

2 回答 2

3

SimulationX 通过 - 运算符扩展了 Modelica,该last运算符返回参数的最后一个接受值。在事件时间点,它返回事件迭代之前积分停止的值。-last运算符可用于计算当前x值的最大值和上一个最大值。请参阅以下工作示例。

model test "test.ism"
    extends SimModel;
    Real x=2*sin(2*pi*time)+sin(20*pi*time)+(if time < 0.5 then 0 else 3) "some input signal with jump";
    Real y=if noEvent( time > time.start ) then max(x,last(y)) else x  "Calculate the maximum with the help of the last-operator";
    Real z(start=0,fixed=true)=-der(z)+y "Just any dymanics.";
end test;

输入信号x和相应的输出信号y如下图所示。

在此处输入图像描述

于 2015-06-30T09:29:51.363 回答
1

我不确定 last() 到底是做什么的。但是,根据您的描述,它似乎与标准模型中的 pre() 做同样的事情。这在 OpenModelica 中给出了相同的结果:

model minTest
Real x;
Real y;
equation      
x = 2. * sin(2.0 * Modelica.Constants.pi * time) + sin(20.0 * Modelica.Constants.pi * time)+ (if time < 0.5 then 0. else 3.);
      y=max(x,pre(y))  ;
end minTest;
于 2015-06-30T12:32:24.733 回答