Fonctions
Résolu
Bonjour,
comment puis-je programmer cette fonction: ln(1+x)=(x-x^2/2+x^3/3-x^4/4+x^5/5-...+(-1)^n+1*x^n/n)
comment puis-je programmer cette fonction: ln(1+x)=(x-x^2/2+x^3/3-x^4/4+x^5/5-...+(-1)^n+1*x^n/n)
1 réponse
La manière la plus simple c'est simplement d'utiliser la fonction log fournie par la librairie mathématique (attention à bien linker ton programme avec la librairie mathématique) :
Exemple : Voici à quoi ça ressemble pour compiler (ici sous linux) :
Maintenant si j'ai bien compris tu veux recoder le développement limité de ln(1+x). Dans ce cas il faut deux paramètres :
- la valeur de x
- la valeur de n
Ensuite il faut écrire une boucle qui permet de calculer la valeur en ajoutant les termes successifs du développement limité.
Du coup, à moins que tu décommentes les deux lignes en gras,tu n'as plus besoin de linker avec la libm :
Bonne chance
#include <math.h> #include <stdio.h> int main() { double x = 0.03; printf("ln(1 + %lf) = %lf\n", x, log(x + 1)); return 0; }
Exemple : Voici à quoi ça ressemble pour compiler (ici sous linux) :
(mando@silk) (~) $ gcc -W -Wall toto.c -lm && ./a.out log(1 + 0.030000) = 0.029559
Maintenant si j'ai bien compris tu veux recoder le développement limité de ln(1+x). Dans ce cas il faut deux paramètres :
- la valeur de x
- la valeur de n
Ensuite il faut écrire une boucle qui permet de calculer la valeur en ajoutant les termes successifs du développement limité.
//#include <math.h> #include <stdio.h> double ln_vois_1(double x, unsigned n) { unsigned i; double res = 0; double x_i = 1; int sign_i = -1; for(i = 1; i < n; ++i) { x_i *= x; sign_i *= -1; res += sign_i * x_i / i; } return res; } int main() { double x = 0.03; unsigned n = 20; printf("log(1 + %lf) = %lf\n", x, ln_vois_1(x, n)); //printf("log(1 + %lf) = %lf\n", x, log(1 + x)); return 0; }
Du coup, à moins que tu décommentes les deux lignes en gras,tu n'as plus besoin de linker avec la libm :
(mando@silk) (~) $ gcc -W -Wall toto.c && ./a.out log(1 + 0.030000) = 0.029559
Bonne chance
Dans les printf, il est préférable de mettre %f pour les double.