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.