Fonction ln [Résolu]

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
J'aimerais faire une fonction pour calculer un valeur approchée d'un logarithme (népérien par exemple). Je sais qu'entre -1 et 1 je peux utiliser un dévéloppement en série entière de ln, mais le problème c'est en dehors de cet intervalle. J'ai bien essayé en calculant l'intégrale de 1/x mais ca n'est pas très précis, ou bien c'est trop lent.
Quelqu'un sait-il comment je peux faire (par exemple comment est codée la fonction log de math.h, ou bien dans les calculatrices classiques) ?
Merci pour vos réponses
A voir également:

6 réponses

Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
bon j'ai une idée pour comment faire.
en utilisant ln(x) = -ln(1/x), on se débrouille toujours pour ke x > 1. ensuite, on mets x entre 1 et 10 en utilisant ln(10^n.x')=n.ln(10)+ln(x') (fo calculer ln(10) une bonne fois pour toute juste)
puis apres, pour se rapprocher de 1, suffit d'utiliser ln(x) = 2 ln(sqrt(x)) (note k'au bout de 5 racines carrées de suite, on a nécessairement x entre 1 et 1.1)
et la tu prends le développement en série, ki devient tres bon vu k'on est a coté de 1.
j'ai pas testé mais sur le papier ca a l'air de bien aller en tout k ;)
ha et si tu veu calculer racine carré sans utiliser le sqrt de math.h, suffit d'utiliser la suite (mettons on veu calculer racine(a)) :
u0 = a;
u(n+1) = 0.5( u(n) + a/u(n) ).
en+ elle converge tres vite !! (c'est la méthode de newton)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
le série entière c'est bien sur entre 0 et 2, c'est ln(1+x) entre -1 et 1
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
bon c'est pas forcement une bonne méthode, mais pour calculer ailleurs ke dans ]0;1[ il suffit d'utiliser ln(x) = -ln(1/x).
le probleme avec le developpement en série de ln, c'est ke mettons si on va juska l'ordre n, le reste intégral (qui dépend de n) n'est pas du tout borné (vu ke la dérivée n+1eme de ln est (-1)^(n)*n!/x^(n+1) ...)
dc ya des chance ke pour x entre 0 et 0.2, estimer ln x par les 1ers termes de la série de ln(1-x) soit tres mauvais.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Merci beaucoup! En fait le truc c'est qu'il faut toujours se ramener au voisinage de 1, je vais faire ce que tu as dit
Messages postés
117
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
8 septembre 2008

Il existe une formule pour le logarithme que l'on appelle dévelloppement limité et qui s'implifie la vie :

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

On a des formules pour le cos, sin, tan ( forcement ), exp, puissance et surment d'autre encore.

>:) Stéph >:)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Oui mais ces formules ne sont sympathiques que dans un voisinage défini, ici un voisinage de 0
ln(1+x)~x au voisinage de 0
(c'est ce dont je parlais dans mon premier post, la série entière)