Bonjour, j'ai un exercice à faire et je rencontre un problème pour la dernière question ou il faut construire un algorithme sur Algobox.
On a f(x)=e^x/((e^x)+1)
g(x)=f(x)-x
Alpha :valeur approché a 10^-7 de la solution à l'équation g(x)=0
Dans une des questions précédentes nous demandant de trouver la valeur de Alpha, je trouve : Alpha=0,6590461.
On définit la suite U(n)=f(U(n)).
Enfin, on veut donc construire sur Algobox l'algorithme qui nous donnerais n (le plus petit possible) tel que U(n) devienne une valeur approchée de Alpha a 10^-6.
Voila mon algorithme :
1 VARIABLES
2 n EST_DU_TYPE NOMBRE
3 p EST_DU_TYPE NOMBRE
4 U EST_DU_TYPE NOMBRE
5 DEBUT_ALGORITHME
6 U PREND_LA_VALEUR 0
7 n PREND_LA_VALEUR 0
8 LIRE p
9 TANT_QUE (U-0,6590461>p) FAIRE
10 DEBUT_TANT_QUE
11 n PREND_LA_VALEUR n+1
12 U PREND_LA_VALEUR exp(U+1)/(exp(U+1)+1)
13 FIN_TANT_QUE
14 AFFICHER n
15 AFFICHER U
16 FIN_ALGORITHME
Mais le problème c'est qu'il affiche :***Algorithme interrompu ligne 13 : dépassement de la capacité autorisée pour les boucles***
(en ayant essayer avec p=0.000001)
Je ne comprend pas si j'ai fait une erreur quelque part ou sinon comment remédier a ce problème ? 
au début U vaut 0 donc U-0.6590461 vaut -0.6590461 (et mets des points et pas des virgules !!!)
donc tu sors de la boucle immédiatement.
mets des valeurs absolues donc TANT_QUE (abs(U-0.6590461)>p) FAIRE
et puis après c'est curieux aussi ton instruction qui met à jour U, mets plutôt :
U PREND_LA_VALEUR exp(U)/(exp(U)+1)
Bonjour,
Je suis d'accord avec Glapion pour ton entrée dans la boucle qui ne se fait pas !
Et pour ta valeur de
.... si elle est fausse tu vas avoir un résultat faux avec cet algo !
Il faudrait mieux comparer U et f(U) ....
U(n+1) = f(U(n)) et pas ce qui est écrit.
U(n+1) = e^(U(n))/(e^(U(n)+1)
Une proposition est :
VARIABLES
n EST_DU_TYPE NOMBRE
p EST_DU_TYPE NOMBRE
U EST_DU_TYPE NOMBRE
Q EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
U PREND_LA_VALEUR 0
n PREND_LA_VALEUR 0
p PREND_LA_VALEUR 1/1000000
Q PREND_LA_VALEUR exp(U)/(exp(U)+1)
TANT_QUE (Q-U > p) FAIRE
DEBUT_TANT_QUE
n PREND_LA_VALEUR n+1
U PREND_LA_VALEUR Q
Q PREND_LA_VALEUR exp(U)/(exp(U)+1)
FIN_TANT_QUE
AFFICHERcalcul* n+1
AFFICHER Q
FIN_ALGORITHME
-----

Non, mais je ne peux pas le modifier autant J-P, car dans l'énoncé il nous donnait un algorithme a trou d'abord à compléter puis ensuite a faire sur algobox.
u[0]=... J'ai mis : 0
n=0
Saisir(p)
Tantque (|u[n]-...|>p) faire J'ai mis 0.6590461
n=n+1
u[n]=... J'ai mis exp(u[n-1])/(exp(u[n-1])+1))
FinTantque
Afficher (n et u[n])
C'est du n'importe quoi un algo avec u[0] et u[n] ..... Cela voudrait dire que u est une liste de nombres ... pas un nombre ...
Il sort d'où cet algo ? D'un livre ? D'une photocopie de ton prof ?
En tenant compte de vos conseils Glapsion, j'obtient :
***Algorithme lancé***
Entrer p : 0.000001
100.65904583
***Algorithme terminé***
Ce qui ne me semble faux. De plus je ne comprend pas pourquoi vous m'avez conseiller de mettre juste ''U'' dans la ligne 12 alors que la suite est définit à la base par récurrence Un+1=f(Un) ... :/ Mais je l'ai fait quand même et ca me donne ce que je vous ai mis plus haut.
Il y avait des valeurs absolues : | | dans la ligne : Tantque (|u[n]-...|>p) faire J'ai mis 0.6590461
NE pas les oublier !
Oui je les ai rajouter comme Glapsion me lavait dit et ca me donne le résultat que je vous ai poster plus haut.
Et l'affichage c'est
10 suivi de 0.65904583
Transformer
AFFICHERcalcul* n+1
AFFICHER Q
en AFFICHERcalcul* n+1
AFFICHER "-"
AFFICHER Q
Cela donnera : 10-0.65904583
Mais je ne peux pas modifier autant l'algo car il doit correspondre à celui qui a dans l'énoncé : juste traduit sur Algobox.
D'accord je viens de comprendre en fait que les deux chiffres étaient collés en rajouter ''-'' ou un retour à la ligne ca va mieux forcément.
Dernier problème, la valeur qui s'affiche est enfaite une valeur a 10^-8 pas a 10^-6. Je devrais trouver 0.659046 et non 0.65904583 ?:/
Bon dimanche,
Deux idées pour éviter l'overflow:
1° procéder par emboîtements ,pour la précision approcher à
puis
et
.
2° mettre un test sur le nombre de boucles,
Alain
Oula je ne comprend pas du tout. Il nous demande une valeur à 10^-6, donc l'algorithme doit donner une valeur a 10^-6 De plus je ne comprend pas ça : ''Donc quelle est comprise dans ]0,65904483 ; 0,65904683['' Pourquoi ne peut on pas arrondire directement nous a 0.659046 puisque l'on connait les chiffres suivants ?!
Supposons que ton Alpha = 0,6590461 ait correctement été arrondi, on sait alors que alpha est compris dans [0,65904605 ; 0,65904615[
L'intervalle dans lequel alpha est compris a une amplitude de 0,65904615 - 0,65904605 = 0,0000001 = 10^-7
Il n'empêche que |alpha - 0,6590461| <= 0,5.10^-7
Et donc 0,6590461 est une valeur approchée de alpha à 0,5.10^-7
*****
A mon sens, l'algo demande le nombre d'itérations à faire, pour trouver une valeur numérique telle que |alpha - valeur numérique| <= 10^-6
et l'algo donne n = 10 pour la "valeur numérique" = 0,65904583 ... et on a |alpha - 0,65904583| <= 10^-6
**********

Zut, à la fin de mon message précédent, lire :
On sait juste que |alpha - 0,65904583| <= 10^-6 et que donc alpha est compris dans
[0,6590483 ; 0,65904
83]

Merci pour ces explications je crois que je commence à comprendre.
Simplement l'énoncé dit : ''Pour obtenir le plus petit entier n tel que Un soit une valeur approchée de Alpha à 10^-6''
Donc je dois dire quoi dans ma réponse ? Un =(environ) 0.65904583 ou j'ai quand même le droit d'arrondir a 10^-6. Par exemple Un=(environ) 0.659046. (enfaîte j'ai vraiment envie d'arrondir comme cela car avec un 8 derrière on arrondit au supérieur...)
Ou alors je crois que je ne comprends pas ça :
On sait juste que |alpha - 0,65904583| <= 10^-6 et que donc alpha est compris dans
[0,65904\red 483 ; 0,65904\red 683]
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :