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

Warum ergibt das nicht Null?

 

deranda
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2020, 10:06     Titel: Warum ergibt das nicht Null?
  Antworten mit Zitat      
Hallo zusammen,
ich stehe gerade auf dem Schlauch!

wenn ich folgende Rechnung mache, spuckt mir Matlab nicht Null sondern
Code:
-1.1368e-13
aus:
Code:
2*300.15-5*300.15+4*300.15-300.15

Wenn man jedoch eingibt:
Code:
1*300.15-4*300.15+4*300.15-300.15

Dann erhält man tatsächlich 0

Das ergibt garkeinen Sinn in meinen Augen!

Hintergrund ist:
Ich möchte den Vorwärts-Differenzenquotienten für die zweite Ableitung berechnen
->
Code:
(2*f(x)-5*f(x+dx)+4*f(x+2dx)-f(x+3dx))/dx^2

Da das in meinen Simulationen gebraucht wird, sollte die Ableitung schon vernünftig laufen, da ich sonst nicht sicher bin, ob mir das dadruch abschmiert!

Hat jemand eine Idee?

Gruß
Nils
Private Nachricht senden Benutzer-Profile anzeigen


T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2020, 10:25     Titel:
  Antworten mit Zitat      
Das liegt daran, dass der Computer alle Zahlen binär speichern muss. Eine exakte Repräsentation ist da nur bei wenigen Zahlen möglich, in den allermeisten Fällen kommt es zu Rundungsfehlern die aber (in den allermeisten Fällen) so klein sind, dass man sie getrost ignorieren kann. Das Ganze kannst du dir einmal hier verdeutlichen:

https://www.binaryconvert.com/resul.....5051048048046048048049053

Das ist kein matlabspezifisches Problem, sondern tritt in allen Programmiersprachen auf. Man kann versuchen den Fehler zu verringern indem man mehr und mehr bytes zum Abspeichern der Variablen benutzt, das wirkt sich aber i.d.R. nur auf die Rechenzeit aus und bringt in den meisten Fällen keinen wirklichen Mehrwert.
Private Nachricht senden Benutzer-Profile anzeigen
 
deranda
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2020, 10:39     Titel:
  Antworten mit Zitat      
Top danke,

ich setze mal Testcases auf und schaue, ob sich was aufschwingt. Aber wenn ich das eh mit einem Zeitschritt von 1e-4 multipliziere kann es gut sein, dass sich da nichts bewegt Wink

Schönes Wochenende
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: 11.09.2020, 11:15     Titel:
  Antworten mit Zitat      
Hier gibt es noch Hintergrundinfo:

https://www.mathworks.com/matlabcen.....-round-off-error-or-a-bug

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.