Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 28-10-2017 17:37:53
- ethukilop
- Invité
Algorithme
Bonjour,
J'ai un algorithme à faire mais je ne sais pas comment m'y prendre. Voici l'énoncé :
U0= 0
[tex]U_{n+1}= \frac{2\times U_{n}+1}{U_{n}+2}[/tex]
Proposer un algorithme pour déterminer la valeur de N tel que pour tout n > N,
IUn-1I < 10.
J'ai fait :
U prend la valeur de 5
Tant que lUn-1l < 10
...
Afficher N
Et je ne sais pas quoi faire d'autre...
#2 28-10-2017 18:07:15
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 405
Re : Algorithme
Bonjour,
Par IUn-1I tu entends [tex]|u_n-1|[/tex] ? ; [tex]|u_{n-1}|[/tex] ? Autre chose ?
Je penche pour [tex]|u_n-1|[/tex], mais pourquoi ce -1 ?
En tous cas, si u =0 on a :
U1=0.5
U2=0.8
U3=0.9285714285714287
............................
u35 = 1
u36 = 1
Alors [tex]| u_{35}-1| =0[/tex] idem pour [tex]u_n \text{ avec }n\geqslant 35[/tex]
Alors tu ne sortiras jamais de ta boucle :
Tant que [tex]|U_n-1<10|[/tex]
puisque à partit de n=35 [tex]|u_n-1|=0[/tex].
C'est pourquoi tu pars de u0=5 ?
@+
Hors ligne
#3 28-10-2017 18:25:50
- ethukilop
- Invité
Re : Algorithme
L'exercice en entier est :
La suite [tex](u_{n})[/tex] est définie par :
[tex]u_{0}=0[/tex]
[tex]u_{n+1}=\frac{2\times u_{n}+1}{u_{n}+2}[/tex]
1) a) Démontrer par récurrence que pour tout n, 0=<un<1. --> OK
b) Vérifier que [tex]u_{n+1}-u_{n}=\frac{1-u_{n}^2}{u_{n}+2}[/tex] puis montrer que la suite (un) est croissante. --> OK
2) En déduire que la suite (un) est convergente vers une limite [tex]l[/tex]. ->ok
3) On admet que cette limite [tex]l[/tex] vérifie [tex]f(l)=l[/tex] avec [tex]f[/tex] définie sur [0;1] par [tex]f(x)=\frac{2x+1}{x+2}[/tex]
a. Déterminer la valeur de [tex]l[/tex] --> OK
b. Proposer un algorithme pour déterminer la valeur de [tex]N[/tex] tel que pour tout [tex]n>N[/tex], |un−[tex]l[/tex]| < 10^-3.
Entrer cet algorithme sur votre calculatrice puis déterminer [tex]N[/tex].
Et j'ai trouvé [tex]l[/tex]= 1
#4 28-10-2017 19:20:59
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 405
Re : Algorithme
Re,
[tex]u_{n+1}-u_{n}=\dfrac{1-u_{n}^2}{u_{n}+2}[/tex]
Si u0>1 la suite est décroissante
S u0 <1 la suite est croissante
D'accord pour [tex]l=1[/tex]
[tex]1-u^2_n=(1-u_n)(1+u_n)[/tex]
Le numérateur est positif entre -1 et 1, négatif en dehors
Pour les valeurs absolues, prends la barre avec AltGR + 6
les variables a définir sont N et U.
On affecte la valeur 0 à N et à u
TANT QUE |u-1|>=0.001
augmenter N de 1 : N=N+1
calculer la nouvelle valeur de u = : u=(2*u+1)/(u+2)
FIN de TANT QUE
Afficher N-1
Afficher u
Le test d'arrêt est donné par l'énoncé...
A l'intérieur de ta boucle tu dois gérer un compteur N qui augmente de 1 à chaque tour...
A la sortie on a bien |u-1|<0.001.
Donc le N est trop grand puisque il est demandé le plus petit N tel que n>N vérifie la condition
Donc il faut diminuer N de 1 --> affichage 6, ainsi pour n>6, soit à partir de 7 la condition est vérifiée
Réponse N = 6
et donc [tex]u_7 \approx 0.9990859232175502[/tex] et [tex]|u_7-1|\approx 0.000914076782449813 <10^{-3}[/tex]
Pigé ?
@+
Hors ligne
#5 28-10-2017 20:22:13
- ethukilop
- Invité
Re : Algorithme
Oui merci beaucoup !!
#6 29-10-2017 08:53:49
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 405
Re : Algorithme
Bonjour,
Oui ?
Alors, c'est bien...
Cependant (sauf si tu avais aussi compris cela) :
- la condition donnée par l'énoncé c'est [tex]|u_n-1|<10^{-3}[/tex]
Je t'ai proposé TANT QUE [tex]|u_n-1|\geqslant 0.001[/tex]
Parce que si la valeur absolue n'est pas supérieure ou égale c'est qu'elle est strictement inférieure
- on peut améliorer l'algorithme et demander l'affichage correct de N.
il suffit de créer un compteur i et non plus N et d'affecter à N la valeur de i, puis d'augmenter i
Version AlgoBox :
i EST_DU_TYPE NOMBRE
u EST_DU_TYPE NOMBRE
N EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
i PREND_LA_VALEUR 0
u PREND_LA_VALEUR 0
TANT_QUE (abs(u-1)>=0.001) FAIRE
DEBUT_TANT_QUE
N PREND_LA_VALEUR i
i PREND_LA_VALEUR i+1
u PREND_LA_VALEUR (2*u+1)/(u+2)
FIN_TANT_QUE
AFFICHER "N = "
AFFICHER N
AFFICHER "u = "
AFFICHER u
FIN_ALGORITHME
Résultat :
***Algorithme lancé***
N = 6
u = 0.99908592
***Algorithme terminé***
- d'autres langages plus évolués comme Python (il y en a bien d'autres) dispose de la négation not, pas AlgoBox
Version Python :
while not(abs(u-1)<0.001):
N=i
i+=1
u=(2*u+1)/(u+2)
print("N =",N)
print("u =", u
print("|u-1| =", abs(u-1))
Tu constates
* l'utilisation de not
* l'affichage de la valeur abolue.
Pour not, ça n'existe pas avec AlgoBox
Pour l'affichage de la valeur absolue avec AlgoBox, j'aurais été obligé
--> de créer une variable supplémentaire (par exemple V)
--> d'affecter à V la valeur abosolue de u-1
--> d'afficher le message "V = "
--> d'afficher la variable V
Résultat Python :
N = 6
u = 0.9990859232175502
|u-1| = 0.000914076782449813
@+
Hors ligne
Pages : 1
Discussion fermée







