Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

- operator not correct #2

Open
peterdanzeglocke opened this issue Nov 20, 2022 · 3 comments
Open

- operator not correct #2

peterdanzeglocke opened this issue Nov 20, 2022 · 3 comments

Comments

@peterdanzeglocke
Copy link

Hallo Fabian,

ich habe jetzt mehrere AutoDiff Libraries auf Performance getestet und raus kam das Deine und FastAD für meine Belange am schnellsten sind. Wirklich gute Arbeit.

Ich denke das der - Operator nicht korrekt implementiert ist. Differenziere z.B. x*x-x
Ich habe den operator zu
return Number(this->value_ - rhs.value_, this->derivative_ - rhs.derivative_);
geändert.

Ich hätte auch noch eine Frage.
Ist es mit Deiner Library möglich 2te Ableitungen zu berechnen?

Grüße aus Grafenau(Bayern)
Peter

@Rookfighter
Copy link
Owner

Hallo @peterdanzeglocke ,

vielen Dank für dein Feedback und entschuldige die späte Antwort. Kannst du ein konkretisieren welcher operator- für dich nicht funktioniert? Dein Fix sieht für mich äquivalent zu dem aus was der binäre operator- auch macht. Benutzt du forward oder backward mode?

@Rookfighter
Copy link
Owner

@peterdanzeglocke
Ich habe den Fehler beim operator- im forward mode gefunden und behoben. Vielen Dank für den Hinweis! Ich habe auch entsprechende Unittests hinzugefügt.

@peterdanzeglocke
Copy link
Author

Hallo,

sorry das war missverständlich.

denke ich habe mittlerweile noch mehr Fehler gefunden.

  1. operator -= da muss auch _derivative negiert werden nicht nur der Funktionswert

  2. abs() falls der Funktionswert negativ ist muss der Funktionswert und die Ableitung negiert werden. Du nimmst sowohl vom Funktionswert als auch von der Ableitung der Absolutwert.

  3. atan2() der Teil x.derivative() * y.value() / denom muss negiert werden.

Der Vollständigkeit halber sollte man von atan2(y,x) auch jeweils die beiden Skalar-Versionen atan2(s,x) und atan2(x,s) schreiben.

ich habe auf Basis deines Codes meine eigene AutoDiff-Klasse geschrieben da ich auch die 2te Ableitung brauche.
Falls dich der Sourcecode interessiert schicke ich ihn dir gerne.
Ich habe das ganze ziemlich gründlich geprüft und auch Testroutinen geschrieben die die Klasse mit dem Ergebnis von Mathematica vergleichen. Solltest Du der Meinung sein das ich mich irre freue ich mich über ein Feedback.

Repository owner deleted a comment from mrpanday93 Feb 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants