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

Division durch null

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2009, 16:26     Titel: Division durch null
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 08.07.2011, 10:39     Titel:
  Antworten mit Zitat      
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

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.07.2011, 10:43     Titel:
  Antworten mit Zitat      
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 Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 08.07.2011, 13:33     Titel:
  Antworten mit Zitat      
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

Nulldurchgang.mdl
 Beschreibung:
Bei kurz vor und nach dem Nulldurchgang, Wert festlegen.

Download
 Dateiname:  Nulldurchgang.mdl
 Dateigröße:  24.67 KB
 Heruntergeladen:  1060 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
feynomen
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 12.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 22:45     Titel: Kill divide by zero *simulink*
  Antworten mit Zitat      
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

kill divide by zero.jpg
 Beschreibung:

Download
 Dateiname:  kill divide by zero.jpg
 Dateigröße:  59.92 KB
 Heruntergeladen:  1751 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 24.10.2012, 08:10     Titel:
  Antworten mit Zitat      
MathWorks Knowledgebase:

http://www.mathworks.de/support/sol...../data/1-F5WMK3/index.html

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.