Question

Je suis en train d'utiliser la série de Taylor pour développer un algorithme pour résoudre numériquement son une fonction. Je l'ai été à elle pendant un certain temps, mais je n'ai pas encore eu de chance. Je ne sais pas ce que je fais mal.

La fonction est

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

Aussi: pourquoi la perte de précision se produire même dans cette fonction? lorsque x est proche de zéro, sin (x) / ln (1 + x) est encore loin d'être le même numéro que x. Je ne vois pas où l'importance est même perdu.

Pour résoudre ce problème, je crois que je vais avoir besoin d'utiliser les développements de Taylor pour sin (x) et ln (1 + x), qui sont

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

et

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

respectivement. J'ai tenté d'utiliser comme dénominateurs pour combiner les x et sin (x) / ln (1 + x) des composants, et même de combiner les trois, mais rien ne semble fonctionner correctement à la fin. Toute aide est appréciée.

Était-ce utile?

La solution 6

Méthode utilisée en question est correcte -. Vérifiez que votre calculatrice est en mode radians

Autres conseils

La perte de précision peut entrer parce que quand x ~ 0, ln(1+x) est également proche de 0, de sorte que vous liquidation divisant par un très petit nombre. Les ordinateurs ne sont pas très bon à cela; -)

Si vous utilisez la série de Taylor pour ln(1+x) directement, il va être une sorte de douleur parce que vous aurez le vent en divisant par une série infinie de termes. Pour les cas comme celui-ci, je préfère habituellement calculer simplement la série de Taylor pour l'ensemble de la fonction dans son ensemble de la définition:

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

à partir de laquelle vous obtiendrez

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

(je triché et branché dans Mathematica Comme Steve dit de, cette série ne converge pas si vite, même si je ne peux pas penser à une meilleure méthode pour le moment.

EDIT :. Je pense que j'ai mal lu la question - si tout ce que vous essayez de faire est de trouver les zéros de la fonction, il y a certainement de meilleures façons que d'utiliser une série de Taylor

Comme c'est des devoirs, je vais juste essayer de donner quelques conseils dans la bonne direction.

Solution 1

Plutôt que d'utiliser l'approximation de la série Talyor, essayez d'utiliser simplement un algorithme de recherche de racine telles que la méthode de Newton-Raphson, une interpolation linéaire, ou bissection intervalle (ou les combiner même). Ils sont très simples à mettre en œuvre, et avec un choix de valeur correspond le départ (s), la racine peuvent converger vers une valeur précise assez rapidement.

Solution 2

Si vous avez vraiment besoin d'utiliser l'approximation de Taylor pour une raison quelconque, puis juste augmenter le sin (x), ln (x), et tout le reste. (Multipliant par par ln (x) pour éliminer le dénominateur dans votre cas fonctionnera). Ensuite, vous aurez besoin d'utiliser une sorte de solveur d'équation polynomiale. Si vous voulez un degré raisonnable de précision, vous aurez besoin d'aller au-delà de la 3e ou 4e puissances j'imagine, ce qui signifie une solution simple d'analyse ne va pas être facile. Cependant, vous voudrez peut-être se pencher sur quelque chose comme le méthode Durand-Kerner pour résoudre générale polynômes d'ordre quelconque. Pourtant, si vous avez besoin d'utiliser des termes d'ordre élevé cette approche va tout simplement conduire à des complications, donc je recommande la solution 1.

Hope qui aide ...

Je pense que vous avez besoin de regarder ce qui se passe à ln (x + 1) x -.> 0 et vous verrez pourquoi cette fonction ne se comporte pas bien près de x = 0

Je n'ai pas examiné ce que de près, mais vous devez savoir que certaines séries taylor convergeant très, très lentement.

Il suffit de calculer la série de Taylor de f directement.

Maxima me donne (4 premiers termes à propos de 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top