Pour tout $x \in [0;1]$ on a $x^n \in [0;1]$ et $x^n < x^{n+1}$. Aussi peut on obtenir 1 en faisant $x+x^2+...+x^n$ avec une valeur particulière de $x$ dans [0;1]?
Autrement dit , pour tout $n$ entier naturel supérieur ou égal à 1, existe -t-il toujours dans $[0;1]$ un réel $x$ tel que $x+x^2+...+x^n=1$ ?
Votre compte-rendu doit comporter une partie expérimentale et une partie théorique .
Dans l'ordre que vous voulez vous devez fournir
Pour la partie algorithmique et programmation vous devez rendre un algorithme et le programme python, dont le squelette est donné plus loin
Soit $(u_n)$ la suite des solutions dans [0;1]. Dans le but d'étudier $(u_n)$ on aimerait avoir suffisamment de valeurs numériques des termes de $(u_n)$. pour cela modifier l'algorithme suivant (dichotomie) de telle sorte que l'on puisse calculer les $n$ premières valeurs de $(u_n)$
Voir le document dans la partie cours sur l'algorithme de dichotomie
Entrer a,b,e
Tant que b - a > e
m prend la valeur (a+b)/2
si f(a)f(m) < 0
b prend la valeur m
sinon
a prend la valeur m
fin
fin
afficher a
Traduire l'algorithme modifié et donner les 10 premières valeurs de $(u_n)$ en explicitant la précision. Pour calculer $f(x)$ on utilisera la méthode de Horner pour les polynômes pour minimiser le nombre de multiplications
Ce qui prend du temps dans les calculs ce sont les multiplications et divisions
La voici expliquée sur un exemple:
Supposons que $f(x) = 2x^3 +3x^2+4x +5$. Si on veut calculer $f(10)$ par la méthode habituelle on va faire $2 \times 10 \times 10 \times 10$ donc 3 multiplications puis 2 multiplications puis 1, donc en tout 3 + 2 + 1
On peut faire moins en écrivant $f(x)$ autrement $f(x) = ((2x + 3)x + 4)x + 5$ donc 3 multiplications
Donc $x^n+x^{n-1}+....+x-1=(... ((( x+1)\times x + 1)....)\times x - 1$)
Voici une traduction en Python
def f(x,n):
coefficient = 1
for i in range(n - 1):
coefficient = coefficient*x + 1
return coefficient*x - 1
Voici le squelette du programme
## Calcule l'image de x par f par la méthode de Horner
# f(x) = x**n + x**(n-1)+ ... +x - 1
def f(x,n):
coefficient = 1
for i in range(n-1):
coefficient = coefficient*x + 1
return coefficient*x - 1
#-----------------------------------------------------------
# Calcule par la méthode de dichotomie une valeur approchée à p près
# de la solution de f(x) = 0
def dichotomie(a,b,p,n):
borne_sup = b
borne_inf = a
while borne_sup - borne_inf > p:
milieu = ....à compléter.....
if f(borne_inf,n)*f(milieu,n) < 0:
......à compléter.....
else:
......à compléter.....
return milieu
#-----------------------------------------------------------
# Calcule les m premiers termes de la suite u des racines
def suite(m):
for i in range(1,m):
print("n = ",i+1," u = ",dichotomie(0,1,10**(-12),i+1))
#-----------------Programme principal-----------------------
#calcul des 19 premiers à partir de n = 2 de la suite u
suite(20)