J'ai un modèle qui prend la racine de l'entrée dans un bloc fonction matlab. L'entrée devrait toujours être positive cependant, simulink donne parfois un nombre négatif. La raison en est que j'utilise un solveur implicite (ode15s en raison de l'autre partie du système étant rigide) et simulink avoir une estimation invalide. Ma question est: comment puis-je dire simulink que l'entrée est invalide ce qui fait que le solveur fait un pas plus petit (sans s'arrêter)? Puis-je retourner une valeur spéciale (par exemple, NaN) ou lancer une erreur (sans arrêter la simulation)?Entrée Simulink non valide
Répondre
Ma solution consistait à ajouter une autre sortie, isInputValid. C'est 0 si l'entrée est invalide et 1 si l'entrée est valide. Cette sortie est ensuite intégrée par un nouveau bloc d'intégration. Il semble que la discontinuité produite par la variable booléenne s'assure que l'intégrateur effectue des étapes plus petites.
Exemple:
if (u<0)
y = -realmax;
isInputValid = 0;
else
y = sqrt(u);
isInputValid = 1;
end
Puis un intégrateur attach à la sortie de isInputValid.
Vous pouvez retourner 0
dans votre bloc de fonction Matlab si l'entrée est négatif:
if u<=0
y = 0;
else
y = sqrt(u);
end
où u
est l'entrée et la sortie y
de la fonction.
Utilisez le Hit Crossing Block pour forcer le solveur à prendre de petits pas de temps lorsque votre signal approche de zéro. Cela fonctionnera en supposant que votre modèle est correctement configuré pour forcer le signal à ne pas être inférieur à zéro (c'est-à-dire qu'il fonctionne comme un bloc Abs, qui atteindra zéro et continuera avec une valeur positive).
- 1. Comment empêcher une entrée non valide dans l'entrée papier?
- 2. comment vérifier si l'URL entrée est valide ou non?
- 3. org.apache.jasper.JasperException: Impossible d'initialiser TldLocationsCache: java.util.zip.ZipException: entrée non valide CRC
- 4. entrée numérique et un message non valide dans Symfony 2
- 5. Définir une entrée non valide lorsque typeahead-editable est false
- 6. Entrée de données du réseau de neurones Simulink
- 7. Commentaire XML non valide: caractère non valide
- 8. Indicateur non valide de l'indicateur de données WPF qui ne s'efface pas sur une entrée valide
- 9. HTML5 Formulaire valide Entrée/champs
- 10. Java - Expression régulière entrée valide
- 11. Signal d'entrée pour Simulink
- 12. Exception d'exception non valide
- 13. Outils jQuery, message non valide, non supprimé
- 14. Formulaire Django non valide
- 15. jeton non valide bien connexion valide
- 16. données non valide retourné pour adresse valide
- 17. Application d'une entrée valide en Java
- 18. jDémission valide sur TAB et sur ENTRÉE
- 19. AngularJS entrée surveiller $ valide ou $ erreur
- 20. java.io.IOException: argument non valide
- 21. non valide Django TIME_ZONE
- 22. Distribution spécifique non valide
- 23. Asana- Champ non valide
- 24. cudaMemcpy argument non valide
- 25. Cast DateTime non valide?
- 26. Signature non valide
- 27. produit non valide
- 28. SCRIPT1014: caractère non valide
- 29. Oracle identificateur non valide
- 30. non valide AssemblyVersion
Merci, mais cela va continuer la simulation avec un faux modèle. L'objectif est que l'intégrateur recule et prenne des mesures plus petites, de sorte qu'il n'utilise pas d'entrée non valide. –
Je ne pense pas que vous pouvez faire ce que vous voulez. La seule chose que je peux suggérer est de spécifier un plus petit 'MaxStepSize' dans les paramètres de simulation, mais cela rendra le temps de simulation plus long. – am304