Frage

Ich versuche, Taylor-Reihe zu verwenden, um einen numerisch Sound-Algorithmus zur Lösung eine Funktion zu entwickeln. Ich habe schon eine ganze Weile bei ihm gewesen, aber habe kein Glück noch. Ich bin mir nicht sicher, was ich falsch mache.

Die Funktion ist

f(x)=1 + x - sin(x)/ln(1+x)   x~0

Außerdem: warum Verlust an Präzision auch in dieser Funktion auftreten? wenn x nahe Null ist, sin (x) / ln (1 + x) ist nicht einmal annähernd die gleiche Anzahl wie x zu sein. Ich sehe nicht, wo Bedeutung ist auch verloren.

Um dies zu lösen, glaube ich, dass ich die Taylor-Erweiterungen für sin (x) und ln (1 + x) verwendet werden muß, die sind

x - x^3/3! + x^5/5! - x^7/7! + ...

und

x - x^2/2 + x^3/3 - x^4/4 + ...

ist. Ich habe versucht, wie Nenner zu verwenden, um den x und sin (x) / ln zu kombinieren (1 + x) Komponenten und sogar alle drei zu kombinieren, aber nichts scheint am Ende richtig zu trainieren. Jede Hilfe ist willkommen.

War es hilfreich?

Lösung 6

Methode in Frage verwendet wird, ist richtig -. Nur Ihr Rechner in Radian-Modus stellen Sie sicher, ist

Andere Tipps

Der Verlust an Präzision kommen in kann, weil, wenn x ~ 0, ln(1+x) auf 0 auch in der Nähe ist, so wickeln Sie durch eine sehr kleine Zahl aufzuteilen. Computer sind nicht sehr gut darin; -)

Wenn Sie die Taylor-Reihe für ln(1+x) direkt verwenden, es wird eine Art Schmerz, weil Sie durch eine unendliche Reihe von Begriffen Dividieren aufzuwickeln werden. Für Fälle wie diese, ziehe ich es in der Regel nur die Taylor-Reihe für die gesamte Funktion berechnen als Ganzes aus der Definition:

f(x) = f(0) + f'(0) x + f''(0) x/2 + f'''(0) x/6 + ...

, von dem Sie erhalten

f(x) = 2 + 3x/2 - x^2/4 - x^3/24 - x^4/240 - 23x^5/1440 + 31x^6/2880 ...

(ich betrogen und steckte es in Mathematica ;-) Wie Steve sagt, diese Reihe konvergiert nicht alle, die schnell, obwohl ich keine bessere Methode zur Zeit denken kann.

EDIT . Ich denke, dass ich die Frage falsch verstanden - wenn alle Sie versuchen, die Nullstellen der Funktion zu tun zu finden sind, gibt es auf jeden Fall bessere Möglichkeiten als eine Taylor-Reihe mit

Da diese Hausaufgaben, ich werde versuchen, nur ein paar Hinweise in der richtigen Richtung zu geben.

Lösung 1

Rather die Talyor Reihennäherung als verwenden, versuchen, einfach eine Stammsuchalgorithmus wie das Newton-Raphson-Verfahren, lineare Interpolation oder Intervallhalbierungs (oder sogar kombinieren). Sie sind sehr einfach zu implementieren, und immer mit einer geeigneten Wahl des Startwertes (s), die Wurzel auf einen präzisen Wert konvergieren kann ziemlich schnell.

Lösung 2

Wenn Sie wirklich die Taylor-Reihen-Näherung für welchen Gründen auch immer verwenden müssen, dann erweitern Sie einfach die sin (x), ln (x), und was sonst auch immer. (Multipliziert man durch ln (x) die oberen Nenner in Ihrem Fall entfernen funktioniert). Dann müssen Sie irgendeine Art von Polynom-Gleichung Löser verwenden. Wenn Sie ein vernünftiges Maß an Genauigkeit wollen, müssen Sie über den 3. oder 4. Kräfte gehen Ich kann mir vorstellen würde, was bedeutet, eine einfache analytische Lösung wird nicht einfach sein. Sie können jedoch href="http://en.wikipedia.org/wiki/Durand-Kerner_method" etwas in wie das Durand-Kerner Methode zur Lösung von allgemeinen aussehen wollen Polynome beliebiger Ordnung. wenn Sie noch brauchen diese Methode höherer Ordnung Begriffe zu verwenden, ist nur zu Komplikationen gehen führen, so würde ich auf jeden Fall empfehlen Lösung 1.

Ich hoffe, das hilft ...

Ich glaube, Sie brauchen, zu betrachten, was passiert mit ln (x + 1) als x -.> 0, und Sie werden sehen, warum diese Funktion nicht gut benimmt sich in der Nähe von x = 0

Ich habe nicht in diese sah, die eng, aber Sie sollten sich bewusst sein, dass einige Taylorreihe konvergieren sehr, sehr langsam.

berechnen einfach die Taylor-Reihe von f direkt an.

Maxima gibt mir (die ersten 4 Begriffe etwa x = 0):

(%i1) f(x):=1 + x - sin(x)/log(1+x);
                                           - sin(x)
(%o1)                     f(x) := 1 + x + ----------
                                          log(1 + x)


(%i2) taylor(f(x),x,0,4);
                                2    3    4
                           x   x    x    x
(%o2)/T/                   - + -- + -- + --- + . . .
                           2   4    24   240
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top