Domanda

Sto cercando di utilizzare serie di Taylor per sviluppare un algoritmo numerico suono per la risoluzione di una funzione. Sono stato a esso per un bel po ', ma non ho ancora avuto fortuna. Non sono sicuro di quello che sto facendo male.

La funzione è

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

Inoltre: perché perdita di precisione, anche si verificano in questa funzione? quando x è vicino a zero, sin (x) / ln (1 + x) non è neppure vicino ad essere lo stesso numero x. Non vedo dove il significato è ancora sta perdendo.

Per risolvere questo problema, credo che avrò bisogno di usare le espansioni di Taylor per il peccato (x) e ln (1 + x), che sono

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

e

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

, rispettivamente. Ho cercato di usare come denominatori di combinare l'x e sin (x) / ln (1 + x) componenti, e anche di combinare tutti e tre, ma nulla sembra funzionare correttamente, alla fine. Ogni aiuto è apprezzato.

È stato utile?

Soluzione 6

Metodo utilizzato in questione è corretta -. Basta assicurarsi che la calcolatrice è in modalità radianti

Altri suggerimenti

La perdita di precisione può venire in perché quando x ~ 0, ln(1+x) è anche vicino a 0, in modo da vento fino dividendo per un numero molto piccolo. I computer non sono molto bravi a quello; -)

Se si utilizza la serie di Taylor per ln(1+x) direttamente, che sta per essere una specie di dolore, perché finirai dividendo per una serie infinita di termini. Per casi come questo, io di solito preferisco calcolare solo la serie di Taylor per l'intera funzione nel suo complesso dalla definizione:

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

da cui si otterrà

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

(ho barato e inserito in Mathematica ;-) Come Steve dice, questa serie non converge tutto ciò che in fretta, anche se non riesco a pensare a un metodo migliore in questo momento.

Modifica :. Penso che ho letto male la domanda - se tutti si sta cercando di fare è trovare gli zeri della funzione, ci sono modi sicuramente meglio di utilizzando una serie di Taylor

Poiché si tratta di compiti a casa, sto solo andando a cercare di dare alcune indicazioni nella giusta direzione.

Soluzione 1

Invece di utilizzare la serie approssimazione Talyor, cercare di usare semplicemente un algoritmo di individuazione root quali il metodo di Newton-Raphson, interpolazione lineare, o intervallo di bisezione (o combinarli pari). Essi sono molto semplici da implementare e con una scelta appropriata del valore iniziale (s), la radice possono convergere ad un preciso valore abbastanza rapidamente.

Soluzione 2

Se si ha realmente bisogno di utilizzare la serie di approssimazione di Taylor per qualsiasi motivo, allora semplicemente ampliare il sin (x), ln (x), e qualsiasi altra cosa. (Moltiplicando attraverso dalla ln (x) per rimuovere il denominatore nel tuo caso funzionerà). Quindi è necessario utilizzare una sorta di polinomiale risolutore di equazioni. Se si desidera un ragionevole grado di precisione, è necessario andare oltre il 3 ° o 4 ° potere mi immagino, il che significa una soluzione analitica semplice non sta per essere facile. Tuttavia, si consiglia di guardare in qualcosa di simile alla Durand-Kerner metodo per risolvere generale polinomi di qualsiasi ordine. Eppure, se è necessario utilizzare i termini di ordine superiore di questo approccio è solo andare a portare a complicazioni, quindi consiglio vivamente soluzione 1.

La speranza che aiuta ...

Penso che avete bisogno di guardare a ciò che accade a ln (x + 1) come x -.> 0 e si vedrà perché questa funzione non si comporta bene nei pressi di x = 0

Non ho guardato in questo che da vicino, ma si deve essere consapevoli che alcune serie di Taylor convergono molto, molto lentamente.

Basta calcolare la serie di Taylor di f direttamente.

Maxima mi dà (primi 4 termini su 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top