|
|
Umrechnen Grad zu Rad erzeugt Fehler |
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 12:54
Titel: Umrechnen Grad zu Rad erzeugt Fehler
|
 |
Hi,
ich wollt meinen Code schneller machen und cosd und sind rausschmeißen.
Dabei sollten doch die Winkel einfach:
so umgerechnet werden können. Dann alle sind und cosds ersetzen und es sollte das gleiche rauskommen. Ich hab aber leider kleine Abweichungen, die nicht toleriert werden können. Muss ich da noch was ändern oder ist die Berechnung zu ungenau?
Danke
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 13:09
Titel:
|
 |
Hallo,
ich habe das mal ausprobiert, und ich bekomme Abweichungen < 1e-15.
Dass Abweichungen in dieser Größenordnung herauskommen ist vollkommen normal.
Du kannst dir ja den Code von sind und cosd ansehen. Dann siehst du, dass da im Grunde auch nichts anderes drinsteht und nur durch bestimmte Umformungen etwas größere Genauigkeit entsteht.
Es bleibt also nur die Wahl zwischen Genauigkeit und Geschwindigkeit. Wenn bei dir die Abweichungen auch nur im Bereich 1e-15 sind, würde ich Geschwindigkeit wählen. Ich kann mir keine Anwendung vorstellen, wo 15 Stellen Genauigkeit wirklich erforderlich sind.
Grüße,
Harald
|
|
|
Achi |
Themenstarter

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 13:18
Titel:
|
 |
Sollte sein, aber ich hier 2 Testbilder einmal mit sind/cosd berechnet und mit sin/cos...
Beschreibung: |
|
 Download |
Dateiname: |
cosd_sind.jpg |
Dateigröße: |
36.45 KB |
Heruntergeladen: |
1034 mal |
Beschreibung: |
|
 Download |
Dateiname: |
sincos.jpg |
Dateigröße: |
36.93 KB |
Heruntergeladen: |
1065 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 14:02
Titel: Re: Umrechnen Grad zu Rad erzeugt Fehler
|
 |
Hallo Achi,
Wenn es um Geschwindigkeit geht, ist dies nicht optimal:
Falls Theta und thetastep Vektoren sind, spart man sich viele Divisionen, wenn man den skalaren Teil in Klammern setzt:
Wenn stattdesen "(Theta * pi) / 180" berechnet wird, dauert das deutlich länger. Nebenbei is PI aber auch eine Funktion, deren Aufruf Zeit kosten. Deshalb:
Woher die Unterschiede in Deinen Ergebnissen kommen, ist mir ein Rätsel. Möchtest Du vielleicht gar nicht "*pi/180" sondern "*180/pi" berechnen??? Dann wäre dies die richtige Konstante:
57.295779513082320876798
Gruß, Jan
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 16:02
Titel:
|
 |
Hallo,
die Unterschiede kann ich mir höchstens dadurch erklären, dass irgendwo auf Gleichheit getestet wird - und das grenzt bei errechneten Werten an Unsinn
Grüße,
Harald
|
|
|
Achi |
Themenstarter

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 16:23
Titel:
|
 |
Versteh ich nicht.
Ich wollte mein Programm etwa schneller machen.
Da cosd und sind oft benutzt werden-> weg damit
Was ich getan habe:
-also Winkel Theta=0:359 in Rad
Theta=Theta*pi/180
thetastep=thetastep*pi/180
und alle sind und cosd mit sin und cos ersetzt.
Aber leider ist das Ergebnis nicht (ganz) richtig...
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 17:01
Titel:
|
 |
Hallo Achi,
was verstehst Du nicht?
Ist es klar, warum "*pi/180" langsamer sein kann als COSD und SIND, "*0.0174" aber schneller?
Wie groß sind bei Dir die Unterschiede zwischen COSD und Deiner Ersetzung? Wenn sie klein sind, wieso erzeugen sie dann so unterschiedliche Ausgaben bei dir?
Wenn Dein Ergbnis kritisch von der 15. Stelle hinter dem Komma abhängt, ist der Algorithmus instabil. Du musst berücksichtigen, dass trigonometrische Funktionen immer nur eine begrenzte Genauigkeit bieten können. Deswegen gibt MathWorks z.B. in der Dokumentation von ACOS an, welche Method denn benutzt wird. Und selbst dann gibt es immer noch kleine Unterschiede, wenn man ACOS der FDLIBM in ein C-Mex-File kopiert und mit unterschiedlichen Compilern compiliert.
Gruß, Jan
|
|
|
Achi |
Themenstarter

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 17:37
Titel:
|
 |
Mir ist klar warum das eine und das andere schneller oder langsamer ist.
Einmal wird einfach eine Variable benutzt und das ander mal eine Funktion aufgerufen. Ich versteh halt nicht warum mir ein Fehler produkziert wird wenn ich nicht cosd/sind benutze... Ist ja auch nicht so schlimm. Dann ist es halt etwa langsamer.
Besten Dank Jan
Gruß Achi
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 19:02
Titel:
|
 |
Hallo Achi,
siehe mein Kommentar von 13:09.
Grüße,
Harald
|
|
|
|
|
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 - 2025
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.
|
|