modelica: calcular mínimo / máximo de variable continua en el tiempo

Como se indicó anteriormente: Deseo calcular el mínimo (y / o máximo) de una variable continua a lo largo del tiempo. Aquí hay un ejemplo mínimo para demostrar:

model MinMaxTest
  Real u;
  Real u_min(start = 10);
  Real u_max(start = -10);
equation
  u = sin(time / 180 * Modelica.Constants.pi);
  u_min = min(u, u_min);
  u_max = max(u, u_max);
  annotation(experiment(StartTime = 0, StopTime = 360, Tolerance = 1e-06, Interval = 1));
end MinMaxTest;

u es la variable continua arbitraria (para fines de demostración, una onda sinusal simple).u_min/u_max es el mínimo / máximo en el tiempo.

Obviamente el resultado esperado esu_min=-1 yu_max=1. Lamentablemente, la simulación se bloquea con una "Matriz singular". error. ¿Alguien puede indicarme cómo evitar eso?

EDITAR 1

Estoy usando OpenModelica 1.15 (era 1.9.2)

EDITAR 2

Como soy bastante nuevo en Modelica, me cuesta entender las diferencias entre los siguientes enfoques:

u_min = if noEvent(u < u_min) then u else pre(u_min);if noEvent(u < u_min) then u_min = u; else u_min = pre(u_min); end if;u_min = if noEvent(u < u_min) then u else u_min;u_min = if u < u_min then u else pre(u_min);u_min = if u < u_min then u else u_min;when u < u_min then u_min = u; end when;u_min + T*der(u_min) = if u <= u_min then u else u_min;

1 y 2 son equivalentes y dan como resultado el comportamiento esperado.

3 produce el resultado deseado pero da una "Notificación de traducción" sobre un "ciclo algebraico", ¿por qué?

4 falla hasta ahora, que el resultadou_min la curva es idéntica au?! ¿por qué?

5 combina 3 y 4.

6 no se compila conSorry - Support for Discrete Equation Systems is not yet implemented

7 No tengo claro cuál es la idea detrás de esto, pero funciona siT Es del tamaño sugerido.

Si entiendo la documentación de Modelica correctamente, 1-5 tienen en común que exactamente una ecuación está activa en todo momento.noEvent suprime la generación de eventos en el cruce por cero especificado. Tenía la impresión de que esto es principalmente una mejora de la eficiencia. ¿Por qué dejarlo afuera hace que 4 falle?pre se refiere al valor anterior de la variable, así que supongo que tiene sentido si queremos mantener una variable constante, pero ¿por qué 7 funciona sin ella? Mi comprensión dewhen era que su ecuación solo está activa en ese evento preciso, y de lo contrariomantiene el valor anterior, por eso intenté usarlo en 6. Parece que funciona si comparo con valores constantes (que no sirve para este problema en particular).

EDITAR3u_min = smooth(0, if u < u_min then u else pre(u_min));

Curiosamente, esto también funciona.

Respuestas a la pregunta(3)

Su respuesta a la pregunta