|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.11.2009, 16:26
Titel: Division durch null
|
|
Hallo liebe Forengemeinde,
ich steh vor einen großen Problem.
Ich habe ein sehr komplexes Simulinkmodel, in welchen Wechselgrößen vorkommen. Es kann passieren das irgendwo kurzeitig eine Division durch Null auftritt und das in einen Integrator geht. Am Integratoreingang ist somit, kurzzeitig, ein Wert gegen unendlich. Simulink bringt mir diese Fehlermeldung:
Derivative input 1 of 'untitled/Integrator' at time 0 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).
Man kann es z.B. nachbauen indem man eins durch sinsus rechnet und dann auf einen Integrator geht.
Wie könnte man das Problem am besten beheben oder umgehen. Also das ganze Model umbauen wäre schlecht, weil es sehr komplex ist.
|
|
|
|
|
Pascal |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2011, 10:39
Titel:
|
|
Hallo Zusammen,
gibt es hierzu schon Lösungsansätze, da ich das gleiche Problem habe.
Vielleicht könnte man eine IF-ELSE Anweisung reinpacken oder die enable und trigger subsystems.
Ich hab aber keine Lösung wie man das dann zum laufen bringt.
Danke schonmal
Gruß Pascal
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 08.07.2011, 10:43
Titel:
|
|
Die Division durch Null abfangen, in dem man vor der Rechnung die Größe von 0 auf einen kleinen Wert abändert. Also die Größe mit einem Konstantblock mit z.B. c = 1e-9 addieren.
Edit: addieren nicht multiplizieren
|
|
|
punkNgrind |
Forum-Century
|
|
Beiträge: 136
|
|
|
|
Anmeldedatum: 10.03.11
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 08.07.2011, 13:33
Titel:
|
|
Andere Möglichkeit, wie schon im anderem Thread erwähnt, ist ein Switch-Block.
Mit Interval-Test legst du die Grenzen fest, wann der Switch durchschalten soll und die Konstante gibt an, welcher Wert stattdessen geschrieben werden soll.
Den Switch habe ich gesampelt, damit du im Plot den Versatz sehen kannst (Tip: Nah genug an Nulldurchgang heranzoomen). Ansonsten würde der Plot die Werte dazwischen approximieren und einen Nulldurchgang darstellen, der nicht da ist.
Für deine Simulation kannst du dann die Intervallgrenzen auf z.B. 1e-8 und -1e-9 setzen und die Konstante dann auf 1e-9 festlegen.
Ich hoffe das wird dein Problem lösen.
EDIT:
Vorteil zu dem Vorschlag von DSP:
Die Abweichung bzw. der Fehler ist nur an der definierten Stelle.
Nachteil:
Unstetigkeitsstelle
Beschreibung: |
Bei kurz vor und nach dem Nulldurchgang, Wert festlegen. |
|
Download |
Dateiname: |
Nulldurchgang.mdl |
Dateigröße: |
24.67 KB |
Heruntergeladen: |
1060 mal |
|
|
|
feynomen |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 12.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.10.2012, 22:45
Titel: Kill divide by zero *simulink*
|
|
Hier habe ich eine lösung gegen << divide by zero >>
1- Die Switch funktion lässt nur werte die ungleich null sind durch !
2- Falls mein Eingangswert zu null wird, dann lass die werte von << 1 >> durch ( so wird verhindert dass ich durch null teile )
3- Mein eingangswert wird mit << compare zu zero >> dann am ende ge-nullt !
schaut euch einfach das bild... wichtig ist das man mit 1 schwitch und compare zu null arbeitet... der rest ist nur reinste logik
Naja, einfach probieren
Beschreibung: |
|
Download |
Dateiname: |
kill divide by zero.jpg |
Dateigröße: |
59.92 KB |
Heruntergeladen: |
1751 mal |
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 24.10.2012, 08:10
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.
|
|