web-dev-qa-db-fra.com

Problèmes numériques intégrant un signal d'impulsion retardé (fixedDelay)

J'ai constaté des problèmes numériques lors de l'intégration d'une entrée Pulse retardée d'un temps déterminé dans Modelica (à l'aide de Wolfram System Modeler 4.3):

 Model Diagram

model PulseTest "Test FixedDelay with Pulse Input";
    Modelica.Blocks.Sources.Pulse pulse(
        startTime = 1, 
        width = 100, 
        period = 1/32, 
        amplitude = 32, 
        nperiod = 1
    );
    Modelica.Blocks.Nonlinear.FixedDelay fixedDelay( delayTime = 5 );
    Modelica.Blocks.Continuous.Integrator x; // integrator for the undelayed Pulse
    Modelica.Blocks.Continuous.Integrator y; // integrator for the delayed Pulse
equation
    connect( Pulse.y, fixedDelay.u );
    connect( fixedDelay.y, y.u );
    connect( Pulse.y, x.u );
end PulseTest;

L'intégration d'une impulsion avec période = 1/a, amplitude = a et largeur = 100% devrait donner 1,0. Mais comme on peut le voir sur l'intrigue, ce n'est pas ce que je reçois pour l'impulsion différée:

 Plot of X and Y over time

Seul le signal non retardé donne la valeur correcte en utilisant DASSL. L’erreur d’intégration numérique apparaît déjà pour period = 1/a = 1/8 et croît (naturellement) à mesure que a grandit.

Quel est le meilleur remède? 

8
gwr

Comme Ankit l’a signalé sur le Wolfram Forum , le problème est que le signal est discret mais que le bloc de délai n’en est pas conscient. Il peut être corrigé avec un bloc de délai différent:

model DiscreteFixedDelay
  discrete input Modelica.Blocks.Interfaces.RealInput u ;
  discrete output Modelica.Blocks.Interfaces.RealOutput y ;
  parameter Modelica.SIunits.Time delayTime(start = 5) = 5 "Delay time of output with respect to input signal";
equation
  y = delay(u, delayTime);
end DiscreteFixedDelay;

Cordialement

1
NCSNY

Le problème est, comme l’a écrit Markus A, que ce délai ne propage pas la discontinuité d’entrée en sortie et que, par conséquent, la simulation ne gère pas le changement d’étape retardé de la même manière qu’un changement d’étape normal, c’est-à-dire avec détection gestion des événements.

Du point de vue de l'outil, l'interpolation en douceur du signal retardé n'est pas simplement la solution la plus simple, elle évite également une cascade d'événements si le signal retardé est renvoyé. 

Je ne vois aucune solution de contournement fiable lorsque j'utilise un solveur à taille de pas variable.

4
Hans Olsson