|
|
variable step vs. fixed step |
|
matlabnoob90 |
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.09.2013, 00:57
Titel: variable step vs. fixed step
|
|
|
|
|
FRAGE: Hat jemand eine Idee, warum ich mit der Einstellung "Variabel Step" bei Verwenden der fcn-Blöck Probleme bekomme und bei der Einstellung "Fixed Step" nicht?
Hi,
ich befasse mich derzeit mit einem Simulinkmodell, das über einen Signalbuilder gegebene Werte über der Zeit als Quelle verwendet.
Diese werden wie gewünscht im Modell verarbeitet und anschließend an den Matlabworkspace abgegeben.
So viel zum Aufbau.
Bisher habe ich bei "Configuration Parameters" die Einstellung "Variable Step Size" verwendet.
Da ich jedoch mein Modell konfigurieren musste und ein paar "Matlab-fcn-Blöcke" eingefügt habe, hat die Simulation nicht mehr funktioniert.
Als ich jedoch die Methdoe zu "Fixed Step" Geändert habe hat alles wieder funktioniert.
Als Anmerkung: Ich lese in den Matlab-fcn-blocks aus einer gegebenen Matrix verschiedene Einträge aus.
Die Fehlermeldung sagt mir, dass ich jedoch "out of Range" bin, was rein von den Werten nicht der Fall ist.
FRAGE: Hat jemand eine Idee, warum ich mit der Einstellung "Variabel Step" bei Verwenden der fcn-Blöck Probleme bekomme und bei der Einstellung "Fixed Step" nicht?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 09.09.2013, 07:45
Titel:
|
|
Hallo,
bitte die komplette Fehlermeldung angeben, und möglichst auch ein Beispiel dazu.
Grüße,
Harald
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2013, 14:45
Titel:
|
|
|
|
|
Hallo Harald,
danke schonmal für die Antwort.
Inzwischen ist das Problem durch verwenden des FixedStep behoben worden und ich habe keine Fehlermeldung mehr für dieses Problem.
Jedoch gibt es immernoch Probleme bei meiner dynamischen Simulation bei der Thematik FixedStep vs. VariableStep:
Benutze ich den Fixed Step (0.1) bekomme ich diese Fehlermeldung:
Hier die komplette Fehlermeldung (im Simulinkmodell: "Simulation Diagnostics")
Derivative input 1 of 'untitled2/block1/integrator1' at time 318.5 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)
im Matlab Command Window kommt zusätzlich folgende Fehlermeldung:
Warning: Zero divided by zero in 'untitled2/ block1/bruch1'
Warning: Zero divided by zero in 'untitled2/block2/bruch2'
Was meiner Meinung nach nicht sein kann, da die Werte nicht Null sein können!
Bei verwenden des VariableStep verschwindet die Fehlermeldung.
Ich habe mein Modell statisch getest und die kritischsten Punkte überhaupt angenommen. Jedoch gibt es an keiner Stelle eine Ausgabe mit "Inf" oder "NaN".
Frage: Kann es sein, dass der "Fehler?!" lediglich an der Einstellung der Schrittweite liegt? Bin noch sehr unerfahren, was dies betrifft.
Danke schonmal!
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2013, 15:46
Titel:
|
|
Noch ein kleiner Zusatz:
Ich habe Testweise mal den Integrator entfernt und mir die Größe ausgeben lassen, die in den Integrator geschickt wird.
Fakt ist, dass diese Größe nur plausible Werte beinhaltet, die größer Null sind und definitiv keine NaN.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.09.2013, 16:41
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Was meiner Meinung nach nicht sein kann, da die Werte nicht Null sein können! |
Ohne das Modell wird sich das schlecht klären lassen.
Zitat: |
Frage: Kann es sein, dass der "Fehler?!" lediglich an der Einstellung der Schrittweite liegt? |
Das ist möglich. Durch die Verwendung einer festen Schrittweite entsteht ja ein Simulationsfehler. Dieser kann im Extremfall dazu führen, dass vollkommen unsinnige Resultate entstehen.
Zitat: |
Ich habe Testweise mal den Integrator entfernt und mir die Größe ausgeben lassen, die in den Integrator geschickt wird |
.
Um integrieren zu können, muss an Zwischenstellen ("minor steps") ausgewertet werden. Es ist möglich, dass diese Zwischenstellen das Problem sind.
Eine grundsätzliche Empfehlung: variable-step Solver verwenden. Wenn dort Probleme auftreten, sollte das zu denken geben. Fixed-step Solver würde ich persönlich nur verwenden, wenn Codegenerierung geplant ist - und dann darauf achten, dass die Resultate denen des variable-step Solvers ausreichend ähneln.
Eine genaue Problemdiagnose wird nur anhand des Modells oder eines Beispiels, in dem das Problem auch auftritt, möglich sein.
Grüße,
Harald
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2013, 18:50
Titel:
|
|
|
|
|
Hallo Harald!
Erneut vielen Dank für deine hilfreichen Antworten.
Zitat: |
Das ist möglich. Durch die Verwendung einer festen Schrittweite entsteht ja ein Simulationsfehler. |
Vorab eine Frage: Warum entsteht hier ein Fehler beim Verwenden eines "FixedSteps".
Ich habe heute weiter an diesem Problem gesessen
und hab jetzt eindeutig die Fehlerquelle gefunden:
Das Verwenden des "Integratorblocks".
Enteferne ich alle zwei Integratorblöcke aus meinem Modell, tritt an der Stelle, an der Vorher "Null" ausgegeben wurde, plötzlich keine Null mehr auf und es wird "ganz normal" simuliert.
Die Größe, die integriert wird, wird aus einem Lookuptable gewonnen,
das ein 3D-Kennfeld aufspannt.
Setze ich den Integrator an der eben erwähnten Stelle ein, so
wird eine der Ausgagnsgrößen plötzlich Null.
Nehme ich ihn wieder raus, ist die eben erwähnte Ausgangsgröße wieder plausibel.
Hat jemand eine Idee, warum das so ist? Bzw. wie man dieses Problem umgehen kann?
Nochmal: verwende ich nun aber einen VariabelStep, dann tritt das Problem nicht mehr auf. Jedoch rechnet er beim VariabelStep gefühlt 1000 mal solange!!!!
Hinweis: Mein Ziel ist es, die aus dem Kennfeld gewonnene Größe über der Simulationszeit zu integrieren.
Das hat bisher sehr gut funktioniert, jedcoh gibt es Probleme seit ich Matlab-fcn-blöcke in mein Modell einbauen musste.
An den Standardeinstellungen des Integratorblocks habe ich nichts verändert.
Zuletzt bearbeitet von matlabnoob90 am 15.09.2013, 19:28, insgesamt einmal bearbeitet
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.09.2013, 19:10
Titel:
|
|
Hallo,
Zitat: |
Vorab eine Frage: Warum entsteht hier ein Fehler beim Verwenden eines "FixedSteps". |
Integrieren ist etwas kontinuierliches, Simulink tastet aber nur an bestimmten Stellen ab.
Natürlich hat auch der Variable-Step Solver einen Simulationsfehler. Im Gegensatz zum Fixed-Step Solver hat der Variable-Step Solver aber eine Schrittweitensteuerung, so dass der Simulationsfehler unter einer bestimmten Toleranz gehalten wird.
Bitte stelle doch ein Beispiel zur Verfügung, an dem das Problem auftritt. Das macht's deutlich einfacher.
Grüße,
Harald
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.09.2013, 02:55
Titel:
|
|
|
|
|
Hallo:)
Leider habe ich bisher noch kein sinnvolles Beispiel finden können, an dem das Problem auftritt. Ich versuche weiterhin eines zu finden.
Jedoch vorab noch etwas anderes:
Zitat: |
Eine grundsätzliche Empfehlung: variable-step Solver verwenden. Wenn dort Probleme auftreten, sollte das zu denken geben. Fixed-step Solver würde ich persönlich nur verwenden, wenn Codegenerierung geplant ist - und dann darauf achten, dass die Resultate denen des variable-step Solvers ausreichend ähneln. |
Was genau meinst du mit Codegenerierung?
Zitat: |
Fixed-step Solver würde ich persönlich nur verwenden, wenn Codegenerierung geplant ist |
Das Problem beim Variable Step ist, dass es viel zu feine Schritte geht. Wähle ich z.B. Die Simualtionszeit von 1 s, dann simuliert Simulink trotzdem noch in 0.010 Schritten und das sehr langsam.
Und das, obwohl ich ferner unter "Configuration" Parameters "Min. Stepsize" auf 0.1 (bzw. Testweise auf 1) , sowie "Max. Stepsize" auf 0.2 (bzw. 2) gesetzt habe.
Da das Modell sehr viel und lang simulieren wird ist primär wichtig, dass das relativ schnell über die Runden geht.
Wie kann man dem Variable Step Solver sagen, dass er gröbere Schritte zu gehen hat?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.09.2013, 08:14
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Was genau meinst du mit Codegenerierung? |
Generierung von z.B. C-Code mit Simulink Coder / Embedded Coder.
Zitat: |
Wähle ich z.B. Die Simualtionszeit von 1 s, dann simuliert Simulink trotzdem noch in 0.010 Schritten und das sehr langsam. |
Der Variable-Step - Löser wählt die Schrittweite so, dass der erwartete Simulationsfehler unterhalb der Toleranz liegt.
Zitat: |
Und das, obwohl ich ferner unter "Configuration" Parameters "Min. Stepsize" auf 0.1 (bzw. Testweise auf 1) ... |
Auch hierzu wäre ein reproduzierbares Beispiel gut. Wenn das Verhalten wirklich so auftritt (was ich so nie gesehen habe, daher wäre ich verwundert), wäre das ein Bug und sollte an MathWorks gemeldet werden.
Zitat: |
Da das Modell sehr viel und lang simulieren wird ist primär wichtig, dass das relativ schnell über die Runden geht. |
Bist du wirklich auch willens, dafür schlimmstenfalls vollkommen absurde Resultate in Kauf zu nehmen?? So oder so, du hast damit keinerlei Kontrolle, wie gut oder schlecht die Resultate sind!
Zitat: |
Wie kann man dem Variable Step Solver sagen, dass er gröbere Schritte zu gehen hat? |
Es werden Schritte gewählt, die gerade so groß sind, um die erforderliche Simulationsgenauigkeit zu erreichen. Man könnte also die Simulationsgenauigkeit ("relative tolerance") auf einen höheren Wert zu setzen, beispielsweise 1e-2. Allerdings wird das vermutlich wenig bringen, was die Schrittweite angeht, und kann natürlich zu ungenaueren Simulationen führen.
Grüße,
Harald
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.09.2013, 10:58
Titel:
|
|
|
|
|
Hallo Harald,
danke schonmal für deine hilfreichen Antworten.
Inzwischen habe ich eine Einstellung gefunden,
wie die Simulation ohne Probleme von Anfang
bis Ende durchläuft.
Ich verwende nun FixedStep 0.1 bei ode1.
Ich bin alle FixedStep-solver durchgegangen und
konnte feststellen, dass die Abweichungen zw.
den verschiedenen solvern sich bei mir im
vernachlässigbar kleinen Bereich befinden.
Das Problem mit der Simulationszeit konnte
ich mit dem rapid Accelerator lösen.
Um meine Ergebnisse jedoch weiterhin zu validieren,
wollte ich die Simulation mit dem VariableStep-Solver
durchlaufen lassen.
Ohne Erfolg.
Problem1: Wie schon erwähnt. Starte ich die Simulation mit
Min.Step=0.1 und Max.Step=0.2
sieht man unten rechts im Simulationsfenster die Zeit folgender
maßen voranschreiten:
t=0.010
t=0.020
usw.
Das brauch ewig und ungefähr 1000000000000x so lang wie die FixedStep solver.
Problem2: Er startet mir beim Variable solver den debugger und meint NaNs zu finden. Das komische ist, dass ich diese Probleme beim Fixed StepSolver nicht mehr habe.
Soweit zum Variable Step solver.
Kleine Anmerkung noch zum FixedStep-solver.
Setze ich hier die Schrittweite wieder auf 1, startet Simulink
wieder den Debug-modus und beschwert sich wegen
NaN.
Verstehst du / Versteht ihr das Verhalten der Simulation, bzw.
gibt es Tests, die ich definitiv durchführen sollte?
Vielen Dank schonmal!
PS: ich verwende folgende Blöcke in meinem Modell:
switch
fcn-Block
matlab-fcn-block (embeddet fcn)
to-Workspace (array)
Integrator
Gain
Lookup-Table (2D)
Mathematische Operatoren (Division, Addition, usw.)
Mux
Constant
Signalbuilder
Clock
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.09.2013, 18:17
Titel:
|
|
Hallo,
ich zumindest kann dir ohne ein Beispielmodell nicht weiterhelfen.
Falls das Modell hier nicht posten darfst, kein einfaches Beispielmodell bereitstellen kannst und auch sonst niemand helfen kann, kannst du dich vielleicht an den Technischen Support von MathWorks wenden.
Grüße,
Harald
|
|
|
matlabnoob90 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 01.07.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.10.2013, 15:38
Titel:
|
|
|
|
|
|
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.
|
|