有questions如何用Modelica确定混合时间连续和时间离散信号x(t)的最大值,即
y(t)= max {x(s),其中s在[startTime,t]}。
这是Modelica错误跟踪器中的一个未解决的问题(请参阅https://trac.modelica.org/Modelica/ticket/109)。
我将提供特定于SimultionX的解决方案。
答案 0 :(得分:3)
SimulationX通过last
- 运算符扩展Modelica,该运算符返回参数的最后接受值。在事件时间点,它返回在事件迭代之前集成停止的值。
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
如下图所示。
答案 1 :(得分:1)
我不确定last()到底是什么。但是,根据您的描述,它似乎与标准modelica中的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;