|
|
Problem mit Integrator und Infinity |
|
Matti |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2012, 15:16
Titel: Problem mit Integrator und Infinity
|
|
|
|
|
Hallo!
Ich sitze gerade an einem Simulink-Modell, wo es vorkommen kann, dass die Kraft die wirkt (negativ) unendlich hoch wird, daraus folgt dann, dass auch die Beschleunigung (negativ) unendlich wird. Nun habe ich folgenden Aufbau: Beschleunigung -> Integrator -> Geschwindigkeit -> Integrator -> Position. Sobald die Kraft unendlich wird, schmeißt mir Simulink den Fehler hier:
Zitat: |
Derivative input 1 of 'XYZ/Integrator1' at time 0.0396 is Inf or NaN. Stopping simulation. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances) |
Jetzt wusste ich nicht genau, was ich dann am besten machen sollte. Normalerweise stoppt die Simulation bei v <= 0. Also dachte ich an ein "Simulation Stop", das ausgelöst wird bei Beschleunigung a == Inf. Jetzt ist also der Output meiner Funktion für die Beschleunigung mit einer Funktion die Auf a == Inf prüft, einem Scope und dem Integrator verbunden. Das hat mein Problem mit der Fehlermeldung aber leider nicht behoben. Wie könnte ich das sonst noch lösen? (Also die Fehlermeldung loswerden bzw. die Simulation vor Aufruf des Integrators beenden.)
Matti
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2012, 15:43
Titel:
|
|
Hallo,
ich würde als allererstes das Modell überdenken. Unendliche Kräfte erscheinen mir physikalisch fragwürdig.
Wenn das wirklich so gedacht ist, kann man evtl. mit einer Saturation arbeiten, um die kurzzeitig unendlichen Kräfte mit "sehr großen" Werten anzunähern.
Bitte möglichst immer ein Beispielmodell anhängen. Einer Beschreibung, welche Blöcke mit welchen verbunden sind, ist eher schwierig zu folgen.
Grüße,
Harald
|
|
|
Matti |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2012, 18:04
Titel:
|
|
Ok, hier mal ein (gekürztes) Beispiel. Was ich eigentlich halt gerne hätte wäre, dass er die Funktion "Abbruch" vor dem Integrieren aufruft und es somit nicht mehr zu dem Fehler kommt. Ob das Modell so gut ist, darüber werde ich mir nochmal Gedanken machen. Meine Frage ist eher ein Matlab-Frage. Danke schonmal für die Antwort.
Beschreibung: |
|
Download |
Dateiname: |
Beispiel.mdl |
Dateigröße: |
44.09 KB |
Heruntergeladen: |
489 mal |
Beschreibung: |
|
Download |
Dateiname: |
Beispiel.mdl |
Dateigröße: |
44.09 KB |
Heruntergeladen: |
490 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.01.2012, 18:45
Titel:
|
|
Hallo,
du testest auf Inf, die Kraft wird aber -Inf.
Zudem wird das aufgrund der Ausführungsreihenfolge der Blöcke nicht so ausgeführt, wie du dir das erhoffst.
Du willst ja anscheinend, dass s <= 0.5 bleibt. Dann würde ich den Output des Integrators beschränken (Limit Output). Wenn du dann die Simulation abbrechen willst, kannst du den Saturation Output anzeigen lassen und in einen STOP-Block führen. Im Anhang das modifizierte Modell.
Grüße,
Harald
Beschreibung: |
|
Download |
Dateiname: |
Beispiel.mdl |
Dateigröße: |
35.23 KB |
Heruntergeladen: |
485 mal |
|
|
|
Matti |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2012, 20:48
Titel:
|
|
Schon einmal danke dafür! Also lieber wäre es mir eigentlich, wenn man schon noch für 1 Zeitwert in den in den F- und a-Scopes sehen könnte, dass die jetzt so hoch sind (-Inf oder -realmax) und es erst danach angehalten werden würde. Dann würde man auch sehen warum die Simulation angehalten wird.
Zum Integrator habe ich noch eine Frage: Kann man auch das Saturation Upper Limit über eine Konstante von extern in den Integrator geben (wie es ja für die Initial Condition möglich ist)?
Und noch ein Problem, was zwar nur wenig mit meiner Frage zu tun hat, aber wie kann ich eigentlich in Simulink Text ausgeben lassen (z.B. als Text in der Konsole oder als Message Box oder ähnliches)? Ich wollte nämlich in meiner Funktion die auf den Abbruch prüft einen Text ausgeben, wenn die Bedingung erfüllt wurde.
disp('Text');
funktioniert leider nicht.
coder.extrinsic('disp');
disp('Text');
leider auch nicht.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|