Als ich vor etlichen Jahren gerade angefangen hatte, zu programmieren, probierte ich – just for fun – ein Programm zu schreiben, das ein bestimmtes physikalisches Phänomen simulieren sollte. Dafür brauchte ich eine ganz spezielle mathematische Funktion, die mein Compiler nicht kannte. Also blieb mir nichts anderes übrig, als selbst diese Funktion zu schreiben.
Damals war das Internet noch nicht so umfassend wie heute. Zumindest fand ich keinen passenden Algorithmus, den ich hätte benutzen können. Folglich musste ich selber ran.
Es handelte sich um die Umkehrfunktion einer Funktion, die als Stammfunktion einer bestimmten analytischen Funktion definiert war.
Ich mochte ja schon damals Potenzreihen, und so machte ich einen klassischen Ansatz mit einer Taylorentwicklung. Für eine Taylorreihe braucht man die Ableitungen der Funktion. Da die Funktion allerdings nur als Umkehrung einer Stammfunktion definiert war, ließ sie sich nicht direkt differenzieren.
Aber nun ja – wir kennen die Umkehrung der Funktion, wir kennen deren Ableitung – da lässt sich schon etwas machen. Stichwort: implizite Differentiation.
Für eine Taylorreihe braucht man aber nicht nur eine Ableitung, sondern alle. Nachdem ich die ersten zwei oder drei händisch abgelitten hatte, erkannte ich ein Muster. Das erlaubte mir, einen weitergehenden Ansatz zu machen, welche Form die n-te Ableitung haben würde. In diesen Ansatz ging die ursprüngliche Funktion ein (also die, die später integriert wird), sowie ein Polynom – dessen Koeffizienten ich natürlich erst einmal nicht kenne.
Der Beweis, dass man die n-te Ableitung so schreiben kann, lief über vollständige Induktion. Zu zeigen, dass die erste Ableitung passt, war trivial. Dann kam der Schluss von n auf n+1. Das war eine etwas langwierige Schreiberei, aber schließlich konnte ich mein q.e.d. dahintersetzen.
Für die Polynome hatte ich nun einen Zusammenhang gefunden, der über einen Koeffizientenvergleich zu einer Rekursionsformel für die Koeffizienten der Polynome führte.
Als nächsten Schritt setzte ich die Polynome in meinen Reihenentwicklungsansatz ein. Ich konnte die Formel ein wenig vereinfachen, und letztendlich hatte ich eine Möglichkeit gefunden, die gewünschte Funktion numerisch über eine Potenzreihe zu berechnen.
Ich war gründlich genug, den Konvergenzradius zu bestimmen. Leider deckte er nicht den gesamten gewünschten Definitionsbereich ab. Nun ja – man muss Abstriche machen. Außerhalb des Konvergenzradiuses dürfte allerdings kaum einmal ein realistischer Fall auftreten, den mein Programm behandeln sollte. Da die ganze Rechnerei eh nur ein Spaßprojekt war, beließ ich es pragmatisch dabei, ohne nach einer besseren Lösung zu suchen, oder sonstige Vorkehrungen zu treffen, um diesen Spezialfall abzufangen.
Vor einiger Zeit fand ich, als ich gerade nach etwas anderem suchte, meine Aufzeichnungen darüber und erinnerte mich dadurch wieder an diese Berechnung.
Ich war neugierig, zu erfahren, ob es zwischenzeitlich einen Algorithmus für diese Funktionsberechnung im Internet geben würde.
Tatsächlich wurde ich fündig. Das Vorgehen wurde etwas anders aufgezogen, so dass ich erst gewisse Substitutionen und Umskalierungen machen musste, um die Ergebnisse zu vergleichen. Und siehe da – zumindest die ersten Koeffizienten stimmen überein. Leider, leider habe ich keine Herleitung dafür gefunden, so dass ich mich frage, ob die Herleitung im wesentlichen der meinen entspricht, oder eine ganz andere, vielleicht einfachere und elegantere gefunden wurde (oder vielleicht aber auch noch umständlicher und komplizierter als meine).
Während ich mich damals auf eine Rekursionsformel für die Koeffizienten der Polynome beschränkt habe, ist dort eine geschlossene Form angegeben. Dafür aber kein Ton über den Konvergenzradius.
Jetzt werdet ihr euch vielleicht fragen, warum ich nicht verraten habe, um welche mathematische Funktion es dabei geht. Tja, damals habe ich (als Klara Nahme) in einem entsprechenden Forum etwas dazu geschrieben. Das war zwar nur kurz und vage, aber es ist mir dennoch zu riskant, darüber eine mögliche Verknüpfung zu meinem Blog zu erstellen.
das war bestimmt ein toller moment. ich freu mich mal mit für dich.
LikeGefällt 1 Person
Es ist schon ein Erfolgserlebnis, wenn nach einigen Mühen das Ergebnis passt.
LikeGefällt 1 Person
…..und klage nicht, wenn das schicksal dir etwas schwergemacht, die freud ist doppelt gross hast dus doch vollbracht. zitat von irgendeinem grossen deutschen filosofen/dichter. jedenfalls sehr gut.
LikeGefällt 1 Person
Es war keine unüberwindlich erscheinende Hürde.
Mit meiner Ausbildung und Wissen war ich bestens gerüstet für diesen Task.
OK – hätte auch sein können, dass es keine praktikable Lösung gibt, oder sonstige unvorhergesehene Schwierigkeiten auftauchen.
Dann hätte ich die investierte Zeit halt als Erfahrung verbucht.
LikeGefällt 1 Person
ein solches unterfangen ist immer nutzbringend. auch dann, wenn nichts bei rauskommt.
LikeGefällt 1 Person
Das ist mir zu hoch und zu weit weg von meinem Leben.
Solange du weißt, was du tust und es passt, ist es gut.
LikeLike
Hat dich die Vorstellung eines Koeffizientenvergleichs denn nicht erfreut?
LikeLike
Nach einem 14 Stunden Tag war ich gestern Abend kopfleer.
Sonst gerne 😊
LikeGefällt 1 Person
Dann vielleicht ein andermal.
LikeGefällt 1 Person
Oh, bitte gerne 🙂
LikeGefällt 1 Person
Pingback: Sommergetwitter //2350 | breakpoint