![]() |
---|
Hallo, ich habe schon seit einiger Zeit versucht einen vereinfachten Algorithmus zur schriftlichen Berechnung des natürlichen Logarithmus zu finden. Leider ist das allerdings nicht so einfach und deshalb frage ich jetzt hier einfach mal nach. Sowohl bei der Taylor-Reihe als auch beim Newton-Raphson Verfahren hat man das Problem dass man sehr viel potenzieren und dividieren muss was äußerst Zeitaufwendig ist. Kann man das abkürzen? Wäre interessant mal eure Meinung dazu zu hören. Ich habe es sowohl mit der Taylor-Reihe als auch mit dem Newton Verfahren versucht. Das Ganze dauert trotz Schnellrechentechnik mind. Minuten bis man 3 Stellen hinter dem Komma hat! Gibt es denn da keine Lösung? Zur Erklärung noch mal ich muss für jede Nachkommastelle die Wurzel berechnen wofür ich ebenfalls das Newtonverfahren verwende welches die allgemeine Form Xn+1 = Xn-(f(x))/(f'(x)) hat. Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich bräuchte bitte einen kompletten Lösungsweg." (setzt voraus, dass der Fragesteller alle seine Lösungsversuche zur Frage hinzufügt und sich aktiv an der Problemlösung beteiligt.) |
Hierzu passend bei OnlineMathe: Logarithmusfunktion (Mathematischer Grundbegriff) Rechnen mit Logarithmen Online-Übungen (Übungsaufgaben) bei unterricht.de: |
![]() |
![]() |
Hallo, zeig doch mal was du konkret gemacht hast. Dann können wir Dir auch eine konkrete Antwort geben. Allgemeine Fragen bergen die große Gefahr, dass Du auch allgemeine Antworten bekommst, die dann nicht passen, Dann kann sich das Frage-Antwort-Spiel über Tage in die Länge ziehen. Das ist dann für beide Seiten frustrierend. Gruß pivot |
![]() |
Bist du bei den Links, die ich dir in Thread www.onlinemathe.de/forum/Logarithmus-mit-Kettenbruch-berechnen genannt hatte, nicht fündig geworden? Du solltest auch erstmal bekannt geben, worum es dir konkret geht. Möchtest du Logarithmen auf ein paar wenige Nachkommastellen abschätzen, oder geht es dir um die "exakte" Berechnung - etwa, um den Algorithmus in ein Programm zB für einen zu implementieren? In letzterem Fall lohnt es sich sicher, die Werke von Donald Knuth zu studieren. Speziell vermutlich "The Art of Computer Programming", vielleicht auch "Concrete Mathematics". Ein Log-Algorithmus aus dem Buch wird zB hier diskutiert: math.stackexchange.com/questions/61614/how-does-knuths-algorithm-for-calculating-logarithm-work Auch ein Blick in einen zweiten Klassiker, nämlich die "Numerical Recipes" könnte nicht schaden numerical.recipes Diese Bücher stehen mit an Wahrscheinlichkeit grenzender Sicherheit in den Regalen deiner Instituts- und/oder Uni-Bibliothek. Eine Internetsuche offenbart eine Fülle von mehr oder weniger brauchbaren Quellen, eine, die vielleicht inspirierend sein kann ist http//www.rechberg-gymnasium-donzdorf.de/fileadmin/user_upload/Lehrer-Uploads/mathematik/RoR/Logarithmen_genaehert.pdf Originell und interessant auch ein Artikel aus dem Jahr in dem HP genau beschreibt, wie sie die Logarithmus-Funktion in ihren Taschenrechnern ab dem seligen HP-35 implementiert haben. http//www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1978-04.pdf Gerade Implementierungen in TR sind idR schlecht bis gar nicht dokumentiert - so gesehen stellt dieser Artikel ein große Ausnahme dar. Es werden wohle alle TR Algorithmen nutzen, die sich der beschränkten festen Genauigkeit bedienen, die Umwandlungen Dezimal-Binar-Dezimal vermeiden (zB durch BCD Kodierung) und vermutlich vorgefertige Nachschlagetabellen benutzen. |
![]() |
Ich habe folgendes gemacht: Ich habe für den den Startwert ermittelt und diesen dann in die Formel eingesetzt. Das Problem daran ist dass man ja berechnen muss was ist. Dafür muss man rechnen. Problem ist nur dass man hierfür die fünfte und die zehnte Wurzel berechnen muss und das kostet jeweils zwei separate Iterationen zusätzlich. Meine Idee ist dass es eine Möglichkeit geben muss wie man das Ganze etwas vereinfachen kann. Meine Rechnung lautet also In das Newton Verfahren eingesetzt ergibt das: . Das ergibt eine Abweichung vom realen Wert von nur Aber das ganze multiplizieren und dividieren ist trotz Schnellrechentechnik sehr aufwendig. Deshalb habe ich als Alternative an die Taylor-Reihe gedacht welche aber nur langsam und nur für konvergiert. Hier muss man dann mehrere kleinere Logarithmen berechnen und dann addieren und das Vorzeichen ändern. Das dauert auch wieder ewig. |
![]() |
Ergänzung, falls du auf den Spuren von Napier und Briggs wandeln möchtest: http//www.mathematikinformation.info/pdf/MI47Sonar.pdf http//www.rechenschieber.org/sonar.pdf Von Briggs wird kolportiert, dass er sieben Jahre darauf verwandte, eine Logarithmentabelle mit Werten in 14-stelliger Genauigkeit zu erstellen. Und auch er hatte da natürlich mit bereites ermittelten Werten weiter gerechnet und nicht von jeder Zahl den Log von Grund auf neu berechnet. Ähnlich also, wie es TR mit fix einprogrammierten Stützwerten auch machen. Vielleicht fällt es dir ja auch leichter, erst den dekadischen Logarithmus zu berechnen und den dann mithilfe des (mit genügender Genauigkeit vorausberechneten) konstanten Umrechungsfaktors 1/(lg zu bestimmen. |
![]() |
Aber ist es denn nicht noch schwerer den dekadischen Logarithmus zu berechnen? Napier brauchte mehrere Jahrzehnte für seine Tafeln. Da gab es auch noch keine Infinitesimalrechnung. Für den dekadischen Logarithmus brauche ich doch Bisektion und die ist noch schwerer. Nein der ist denke ich schon prinzipiell einfacher. Mir geht es vor Allem darum wie man die Zwischenschritte abkürzen kann. |
![]() |
Napier brauchte mehrere Jahrzehnte für seine Tafeln. Da gab es auch noch keine Infinitesimalrechnung. Darum hatte ich ja auch Briggs erwähnt. Dessen Hauptverdienst war ja nicht die Logarithmentafel per se, sondern die zeitsparendere Methode, diese zu berechnen. Und natürlich hatte er die nötigen Wurzeln nicht jedesmal aufs Neue berechnet sondert verwendete hier vorausberechnete Werte, ich glaube auf Nachkommastellen genau. Mühsam wirds aber in jedem Fall gewesen sein und ist es vermutlich auch heute noch. Was dein Beweggrund ist, hast du aber noch immer nicht verraten. Just for fun oder gehts um eine konkrete Implementierung? |
![]() |
Aus Interesse. Ich wollte einfach sehen ob es "Tricks" gibt mit welchen der man den Aufwand reduzieren kann. |
![]() |
Dann würde ich mir an deiner Stelle die Artikel zu Briggs Methode des fortwährenden Wurzelziehens mithilfe der von ihm entwickelten Differenzenrechnung genauer ansehen. Möglicherweise kannst du es für deine Methode zur Berechnung des modifizieren oder du kommst doch zum Schluss, dass lg einfacher geht. |
![]() |
Ok, dann werde ich mir den Algorithmus von Briggs noch mal genauer ansehen. Ich dachte immer, so war es zumindest bisher, dass der einfacher zu berechnen ist als der . Nochmals danke für den Hinweis! |