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

Minus Null

 

cornetto1234
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2009, 13:58     Titel: Minus Null
  Antworten mit Zitat      
Hallo,

kann mir vielleicht jemand sagen, wann Matlab -0 als Ergebnis anzeigt?

viele Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.450
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2009, 14:24     Titel:
  Antworten mit Zitat      
Wenn in einem Vektor eine Zahl dargestellt wird, die minimal kleiner als 0 ist.

Code:
format short % Standardformat
[1; -eps]
-eps


Falls das unerwünscht ist,
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2009, 14:54     Titel:
  Antworten mit Zitat      
Danke schonmal für die Antwort.

Ich hab das jetzt mal gemacht und er zeigt mir anstelle -0 folgendes an
-1.5659e-016.

D.h. ja dass die Minus Null vorher für eine sehr kleine negative Zahl gestanden ist. Das hatte ich mir auch schon gedacht.

Nun nützt mir das Umstellen auf dieses andere Format leider nichts, da die Minus-Null für Matlab ja wohl immer(egal welches Format ich einselle) eine Zahl bleibt, die eben von Null verschieden ist.
Ich wollte aber eigentlich eine if Bedingung formulieren, bei der die Anweisungen nur ausgeführt werden, wenn die berechnete Zahl ungleich Null ist.
Im Falle meiner Errechneten Zahl sollten die nachfolgenden Anweisungen eigentlich nicht ausgeführt werden, da sie eigentlich gleich null sein sollte.
Sie ist es aber nicht geworden, was wohl an den Rundungsfehlern liegt, wie ich vermute.

Was kann ich nun machen??
Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.450
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2009, 14:59     Titel:
  Antworten mit Zitat      
Um solche numerischen Ungenauigkeiten abzufangen, verwendet man oft statt if x == y
Code:


Wie groß man tol wählt, ist Ermessenssache. Irgendwas zwischen 1e-6 und 1e-12 würde mir sinnvoll erscheinen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2009, 15:07     Titel:
  Antworten mit Zitat      
danke,

ich hatte mir gerade schon überlegt, dass man vielleicht auch

if b<=abs(eps)

schreiben könnte?

geht das?

Scheint bei mir zu funktionieren
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.450
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2009, 15:51     Titel:
  Antworten mit Zitat      
Wenn es nur um Vergleich mit 0 geht, ja.
Da eps>0, reicht b < eps.
Ich würde aber einen größeren Wert wählen, da numerische Ungenauigkeiten oft nicht sooo klein sind, z.B. b < 1e-12
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 28.08.2009, 17:07     Titel:
  Antworten mit Zitat      
Hallo,
es müsste schon
Code:
oder
Code:
sein, denn es gilt schließlich auch -23 < 1e-16.

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.450
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.08.2009, 17:12     Titel:
  Antworten mit Zitat      
Guter Punkt, Titus!
Private Nachricht senden Benutzer-Profile anzeigen
 
Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 29.08.2009, 13:21     Titel:
  Antworten mit Zitat      
Noch zwei Dinge die erwähnenswert sind:

1) es gibt auch eine "echte" -0 also wo der Wert wirklich betragsmäßig 0 ist. Das ist eine Eigenschaft des üblichen Zahlenformats für Fließkommazahlen (siehe IEEE 754).

2) Ich spare mir genauere Erklärung und verlinke einfach: http://c-faq.com/fp/fpequal.html
Private Nachricht senden Benutzer-Profile anzeigen
 
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.