www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Uni-Numerik" - Implementation von ln(x) in C
Implementation von ln(x) in C < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Implementation von ln(x) in C: Frage
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 00:40 Mi 01.12.2004
Autor: hochl

Hallo,

Ich will einige der bekannteren und haeufig benoetigten Mathefunktionen in C implementieren. Bei $ [mm] e^x [/mm] $, $ sin(x) $ und $ cos(x) $ habe ich mit der Taylorentwicklung ganz gute Ergebnisse bekommen. [mm] \wurzel[n]{x} [/mm] ist mit Newton auch einfach loesbar. Leider fehlt mir fuer den natuerlichen Logarithmus noch ein gutes Berechnungsschema. Deshalb meine Frage: Hat jemand einen Link wo fuer verschiedene Funktionen gute Berechnungsverfahren vorgestellt werden, am besten mit Fehlerabschaetzung damit man weiss bis wieviele Iterationen man rechnen muss um unterhalb einer gewissen Fehlerschranke zu bleiben? Das waere sehr hilfreich! :) Danke bereits im vorraus!

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Implementation von ln(x) in C: Antwort
Status: (Antwort) fertig Status 
Datum: 03:53 Do 02.12.2004
Autor: Marc

Hallo hochl,

> Ich will einige der bekannteren und haeufig benoetigten
> Mathefunktionen in C implementieren. Bei [mm]e^x [/mm], [mm]sin(x)[/mm] und
> [mm]cos(x)[/mm] habe ich mit der Taylorentwicklung ganz gute
> Ergebnisse bekommen. [mm]\wurzel[n]{x}[/mm] ist mit Newton auch
> einfach loesbar. Leider fehlt mir fuer den natuerlichen
> Logarithmus noch ein gutes Berechnungsschema.

In meiner (Schul-) Formelsammlung steht die Reihe:

[mm] $\ln x=2*\summe_{k=0}^{\infty}\left(\bruch{x-1}{x+1}\right)^{2k+1}$ [/mm]

Ich denke mal, dass sich das aus der Taylorentwicklung herleiten läßt, ich hoffe, mit Fehlerabschätzung.

> Deshalb meine
> Frage: Hat jemand einen Link wo fuer verschiedene
> Funktionen gute Berechnungsverfahren vorgestellt werden, am
> besten mit Fehlerabschaetzung damit man weiss bis wieviele
> Iterationen man rechnen muss um unterhalb einer gewissen
> Fehlerschranke zu bleiben? Das waere sehr hilfreich! :)
> Danke bereits im vorraus!

Im Internet gesucht haben wirst du ja wahrscheinlich selbst.

In den Unibibliotheken gibt es bestimmt für alle möglichen numerische Verfahren Programmierbeispiele, jedenfalls habe ich mal so etwas von einer Professorin aus Berlin in PASCAL in der Hand gehalten.

Ansonsten könntest du dir auch die entsprechenden Quelltexte von einer math-library besorgen, im Linux-Kernel habe ich entsprechendes für den logarithmus zur Basis 2 gefunden.

Viele Grüße,
Marc

Bezug
                
Bezug
Implementation von ln(x) in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 00:25 Mo 06.12.2004
Autor: hochl

Nein, ich habe mit Taylor diese hergeleitet (und nochmal auf mathworld nachgeblaettert):

[mm] ln(x+1)=x-1/2*x^2+1/3*x^3-1/4*x^4+... [/mm]

Leider ist die Reihe nicht sonderlich gut geeignet zum ausrechnen, sie konvergiert nicht so schoen und schnell wie die z.B. fuer [mm] e^x. [/mm] In den Quellen der Libmath habe ich nachgeschaut, leider ist der Code ziemlich unuebersichtlich und es ist irgendwie nicht klar wie der Author auf seinen Loesungsweg kommt.

Es gibt doch sicher irgendwie Literatur zu dem Thema, ich habe etwas gesucht aber einfach nichts gefunden, ich bin mir aber sicher dass es da bestimmt was gibt und ich es nur nicht finden konnte bis jetzt. Trotzdem danke fuer die Antwort :)

Hat noch jemand ne Idee?

Bezug
                        
Bezug
Implementation von ln(x) in C: ln als Umkehrfunktion von exp
Status: (Antwort) fertig Status 
Datum: 13:06 Mi 15.12.2004
Autor: Hugo_Sanchez-Vicario

Hallo hochl,

ich hätte auch zunächst die ln(1+x)-Reihe vorgeschlagen, aber die konvergiert echt sehr schlecht.

Was hältst du davon, wenn du statt y=ln(x) zu berechnen, die Gleichung
exp(y)=x mit dem Newton-Verfahren löst. Da die Ableitung ja auch exp(x) ist, muss du diese Berechnung ja einmal pro Schritt durchführen. Und exp(x) ist linksgekrümmt ohne Extrema, so dass das Verfahren garantiert konvergiert.

Hugo

Bezug
                                
Bezug
Implementation von ln(x) in C: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:33 Mi 15.12.2004
Autor: hochl

Man kann das Argument durch Division mit e nach [-1/2, 1.2] skalieren, da konvergiert sie einigermassen. Aber so besonders schoen finde ich das nicht.

Bezug
                                        
Bezug
Implementation von ln(x) in C: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:25 Do 16.12.2004
Autor: Hugo_Sanchez-Vicario

Hallo hochl, du sprichst doch jetzt von der Taylor-Reihe von ln(1+x), oder?

Hast du mal meinen Vorschlag ausprobiert, und die Nullstelle von f(x)=exp(x)-ARG gesucht? Das ist ja das gleiche Nullstelle wie von x-ln(ARG), nur leichter berechenbar.

(Wenn du x=ln(ARG) berechnen möchtest.)

Hugo

Bezug
                                                
Bezug
Implementation von ln(x) in C: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:32 Do 16.12.2004
Autor: hochl

Ja, was besseres als Taylor hab ich noch nicht gefunden, leider. Ok man koennte es mit nem Spline annaehern, aber so richtig gluecklich macht mich das jetzt auch nicht. Das mit Newton und exp(x)-ARG ist leider nicht so gut, weil man ja fuer jede Iteration dann die Exponentialreihe ausrechnen muss, das will ich eigentlich vermeiden weil's extrem lahm wird. Aber klar, das waere schonmal ne Notloesung und muesste gehn (f'(x) und f''(x) beide > 0). Was mir noch in den Sinn kam: Gibt's vielleicht ne geschickte Moeglichkeit wasm it nem Wavelet zu machen? Damit habe ich noch nie was gemacht, aber das kann man doch auch nehmen wenn man ein paar Punkte kennt und damit die Funktion annaehern will.

Bezug
                                                        
Bezug
Implementation von ln(x) in C: weiss leider auch nicht
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:49 Do 16.12.2004
Autor: Hugo_Sanchez-Vicario

Ich fürchte, ich kann dir bei deinem Problem auch nicht richtig weiterhelfen... schade. Allerdings rate ich dir von allzu komplizierten Kostruktionen ab, das ist dann sicher auch zu rechenintensiv.

Hugo

Bezug
                                                        
Bezug
Implementation von ln(x) in C: weitere Ideen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:34 Do 16.12.2004
Autor: mathemaduenn

Hallo hochl,
Zunächst: Hier kann ich auch nur Ansätze liefern. Durch e teilen bedeutet ja im bildbereich der Funktion minus eins abziehen also teile solange durch e(bzw. [mm] \wurzel{e} [/mm] ...) bis du in einem Bereich schöner Konvergenz deiner Reihe landest. Falls es nichts macht einige Funktionswerte parat(gespeichert) zu haben kannst Du natürlich auch Splines nehmen. Aufgrund der hohen Glattheit(x>1) der ln funktion sollten diese ausreichend sein Wavelets braucht man wohl für was anderes (z.B. Bildverarbeitung oder DGL)
gruß
mathemaduenn

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]