Rookfighter / autodiff-cpp

A single header-only C++ library for automatic / algorithmic differentiation.
MIT License
12 stars 2 forks source link

- operator not correct #2

Open peterdanzeglocke opened 1 year ago

peterdanzeglocke commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

@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 commented 1 year ago

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.