Logarithmus
-
also typischerweise hat man doch sone mantissentafeln, und mittels ln(ab)=ln(a)+ln(b) und ln(a^b)=bln(a) kriegt man dann die werte fuer beliebige argumente...
nee im ernst, als mathematiker interessierst du dich nicht fuer rechnen, sondern fuer gesetzmaessigkeiten.
-
Du könntest es dir auch in etwa so vorstellen am Beispiel mit log10(3) = lg(3):
- x = lg(3)
3 = 10x
- man wählt ein n, praktischerweise n = 10, 100 usw. und potenziert damit die obige Gleichung: 3n = (10x)n
- für n = 10 ergibt sich somit 310 = (10x)10 oder 310 = 1010x, was heißt, dass 1010x = 310 = 59049 ist
- man erstellt demnach eine Ungleichungskette 104 < 1010x < 105 wegen 10000 < 59049 < 100000
- für die Exponenten alleine gilt 4 < 10x < 5. Durch die Division durch 10 ergibt sich 0,4 < x < 0,5
- für zwei und ggf. mehrere Stellen verfährt man ähnlich mit n = 100, 1000 usw.
Gruß
- x = lg(3)
-
PeterTheMaster schrieb:
nee im ernst, als mathematiker interessierst du dich nicht fuer rechnen, sondern fuer gesetzmaessigkeiten.
dann sind Numeriker keine Mathematiker oder wie
-
hihi, also man ist schon verlockt, zuzustimmen, aber das waere ja gemein. wenn man genau hinsieht, rechnen die numeriker aber auch nicht selber, sondern sie denken sich algorithmen anhand schon genannter gesetzmaessigkeiten aus, mit denen dann ein computer oder so rechnen koennte.
-
PeterTheMaster schrieb:
nee im ernst, als mathematiker interessierst du dich nicht fuer rechnen, sondern fuer gesetzmaessigkeiten.
Genau. Zum Beispiel wie der Logarithmus berechnet werden kann. Die lustigen Tafeln wurden ja auch nicht am 6. Tag erstellt oder?
-
*hust* Der OP ist weder Mathematiker noch Numeriker
sondern Schüler.
-
Bashar schrieb:
*hust* Der OP ist weder Mathematiker noch Numeriker
sondern Schüler.
...und egal, was von den dreien er ist, weiß er selbst, was ihn interessiert...
-
hintergrund ist, dass ich selbst eine funktion zur logarithmusberechnung einer beliebigen Basis schreiben möchte. Ich kenne die Intervallschachtelung, aber ich hab mir gedacht dass das der Rechner sicherlich nicht so macht, da diese methode nicht sonderlich schnell ist. Und die Reihenentwicklung gilt ja nur für den natürlichen Logarithmus..
-
Über den natürlichen Logarithmus kannst du aber alle anderen Logarithmen berechnen.
-
ahh.. jetzt fällt es mir wieder ein.. Basiswechsel nennt sich das ding^^ (lg(x) = ln(x)/ln(10))
hab jetzt aus Wikipedia die Formel für den natürlichen Logarithmus:ln(x) = lim[h->0]( (x^h -1)/h )
soll ich jetzt für h einfach den kleinmöglichen Wert einer double-variabel einsetzen ? (2.2250738585072014 E–308)
-
na wenn du das machst sind doch artefakte vorprogrammiert. vielleicht geht ja was mit newton iteration, die ableitung laesst sich ja gut berechnen. aber ich bin kein numeriker.
-
Man koennte auch 1/t von 1 bis x integrieren um ln(x) zu bekommen. Mit der Rombergintegration duerfte das doch beliebig genau gehen.
-
ihr bombadiert mich hier mit wörter.. bin weder mathematiker noch numeriker, sondern Schüler (wurde glaube ich auch schon erwähnt^^) egal.. werd mich mal ein bisschen Informieren, dann verstehe ich vielleicht sogar was ihr da eben geschrieben habt xD
-
Argus Magnus schrieb:
ihr bombadiert mich hier mit wörter..
das ist absicht: die wollen dir stichwörter geben, nach denen du suchen kannst.
-
Eine Kombi aus Wertetabelle und Spline (Interpolation) ist auch eine Option. Funktioniert für oft diff'bare Funktionen recht gut. Es gibt also nur Probleme bei x nahe 0.
-
Argus Magnus schrieb:
ahh.. jetzt fällt es mir wieder ein.. Basiswechsel nennt sich das ding^^ (lg(x) = ln(x)/ln(10))
hab jetzt aus Wikipedia die Formel für den natürlichen Logarithmus:ln(x) = lim[h->0]( (x^h -1)/h )
soll ich jetzt für h einfach den kleinmöglichen Wert einer double-variabel einsetzen ? (2.2250738585072014 E–308)
Erstmal ne doofe Frage: Wie rechnest du Potenzen aus? Wenn du schon in den Rechner reinschauen willst, dann musst du dir das auch noch überlegen
Nächstes Problem: x^(beinahe Null) wird auf dem Rechner mal ganz schnell zu einer echten Eins (weil x^0 == 1). Dann steht im Nenner ne Null und dein Logarithmus ist Null. Das ist doof. Beispiel in C:
double h = 1e-300; double nenner = pow(2,h) - 1; double ln2 = nenner/h; printf("%e\n%e\n%e\n%e",h,nenner,ln2,log(2));
Ausgabe:
1.0000e-300
0.0000e+000
0.0000e+000
6.9314e-001Ok, h größer machen, damit der Nenner nicht Null wird. Mit h=1e-10 bekommen wir
1.0000e-010
6.9314e-001
6.9314e-001
6.9314e-001Das sieht super aus. Aber rechnet man mit h=1e-10 den ln von 4096 aus, klappt es schon wieder nicht. Dann ist nämlich h=1e-10 nicht klein genug.
Der Weg ist ziemlich wackelig zu sein, weil man zu sehr von den Gemeinheiten der Rechnerarithmetik abhängt....
-
Argus Magnus schrieb:
Aber was passiert da genau, was macht der Rechner?
taschenrechner verwenden oft sowas wie's hier mit C simuliert wird: https://people.scs.fsu.edu/~burkardt/cpp_src/cordic/cordic.C
wegen des 'ln': such dir im code die funktion 'double ln_cordic (double x, int n)'
raus.