WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem mit Integrator und Infinity

 

Matti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 15:16     Titel: Problem mit Integrator und Infinity
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2012, 15:43     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Matti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 18:04     Titel:
  Antworten mit Zitat      
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.

Beispiel.mdl
 Beschreibung:

Download
 Dateiname:  Beispiel.mdl
 Dateigröße:  44.09 KB
 Heruntergeladen:  489 mal
Beispiel.mdl
 Beschreibung:

Download
 Dateiname:  Beispiel.mdl
 Dateigröße:  44.09 KB
 Heruntergeladen:  490 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2012, 18:45     Titel:
  Antworten mit Zitat      
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

Beispiel.mdl
 Beschreibung:

Download
 Dateiname:  Beispiel.mdl
 Dateigröße:  35.23 KB
 Heruntergeladen:  485 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Matti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 20:48     Titel:
  Antworten mit Zitat      
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.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.