Question

Je ne trouve pas vraiment de réponse dans la spécification Modelica, alors je vous le demanderai.Le cahier des charges indique queA tool is free to solve equations, reorder expressions and to not evaluate expressions if their values do not influence the result (e.g. short-circuit evaluation of Boolean expressions). If-statements and if-expressions guarantee that their clauses are only evaluated if the appropriate condition is true, but relational operators generating state or time events will during continuous integration have the value from the most recent event. If a numeric operation overflows the result is undefined. For literals it is recommended to automatically convert the number to another type with greater precision.Maintenant, je me demande, l'outil peut-il choisir d'évaluer une expression plusieurs fois au cours d'une étape d'intégrateur ?Par exemple (ce n'est probablement pas un exemple valable, juste pour vous donner une idée de ce que je me demandais :) )

Real x;

equation
  der(x) = -t;
  Modelica.Utilities.Streams.print(String(time));

Cela imprimera la même heure plusieurs fois, j'ai donc pensé qu'il y avait une sorte d'itération en cours.Mais j'aimerais vraiment que cela soit confirmé par une source.

Était-ce utile?

La solution

C'est normal.Les solveurs de taille de pas variables (comme DASSL) peuvent aller et venir dans le temps pour trouver la direction de la courbe.De plus, si vous avez des événements, plus de valeurs peuvent être générées en même temps.

Si vous souhaitez imprimer l'heure ou les valeurs juste aux instants précis dont vous avez besoin lorsque les équations :

when sample(0, 1) then
  Modelica.Utilities.Streams.print(String(time));
end when;

En savoir plus dans la spécification Modelica sur l'échantillon.

Il est également possible d'utiliser des solveurs à pas fixe comme Euler ou autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top