Bonjour,
Sans vouloir répondre à la totalité du problème posé, voilà un coup de pouce.
En calculant les 1ers termes de la somme, on trouve:
sn(x) = x -x**3/3 +x**5/5 -x**7/7 etc...
Si on appelle u le numérateur d'un des termes, on voit bien qu'on peut calculer le numérateur du terme suivant en le multipliant par -(x*x). Et une fois le nouveau numérateur calculé, il suffit de le diviser par (2*k+1) pour avoir le nouveau terme à ajouter à la somme précédente.
Voilà un petit code qui fait ça:
1 2 3 4 5 6 7 8 9 10 11
| def arctang(x, n):
k = 0
u = x # 1ère valeur de u pour k=0
t = u # 1er terme de s pour k=0
s = t # somme pour k=0
while k<n:
k += 1
u *= -(x*x)
t = u/(2*k+1)
s += t
return s |
Si on veut calculer l'arc tangente, on ne sait pas d'avance à quel rythme ça convergera, et donc quel "n" il faudra prendre. Alors, il faudra arrêter la boucle de calcul au moment où le terme t à ajouter à s deviendra tout petit. Disons inférieur à 10**(-15):
1 2 3 4 5 6 7 8 9 10 11 12
| def arctang(x):
eps = 10**(-15)
k = 0
u = x # 1ere valeur de u pour k=0
t = u # 1er terme de s pour k=0
s = t # somme pour k=0
while abs(t)>eps:
k += 1
u *= -(x*x)
t = u/(2*k+1)
s += t
return s |
Voyons maintenant si ça marche.
On importe pi et tan (fonction tangente) du module math. On se donne un angle quelconque en radian (ici pi/8), on calcule la tangente de cet angle avec la fonction "tan", et on vérifie qu'on retrouve bien l'angle initial pi/8 avec notre fonction arctang:
1 2 3 4 5 6 7 8 9
| from math import pi, tan
a = pi/8
x = tan(a)
atg = arctang(x)
print(a, atg, abs(atg-a)<10**(-15)) |
Ce qui affiche:
0.39269908169872414 0.39269908169872414 True
Avec ça, tu devrais pouvoir faire la suite!
Partager