Algorithme dichotomie
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 21:10
Bonjour je suis en L2 maths-info et je travail en ce oment sur les methodes d'approximation d'une racine d'une fonction, on travail avec Scilab et le but est d'écrire l'algorithme de la dichotomie afin de programmer cette fonction.
J'ai écris mon programme mais le problème c'est qu'il boucle et je n'arrive pas a savoir pour quelle raison :
function [r_ap] = dichotomie1(a,b,f,tolx)
// calcul une valeur r_ap a tolx pres d'une racine de f comprise entre a et b
alpha = a
betaa = b
c = (alpha + betaa)/2
fa = f(alpha)
fb = f(betaa)
fc = f(c)
while b-a > tolx
c = (alpha + betaa)/2
fc = f(c)
if fa*fc <= 0 then
betaa = c
fb = fc
else
alpha = c
fa = fc
end
end
r_ap = c
endfunction
merci :-)
-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 06 Jan 2013, 21:21
plop,
vu que tu modifies jamais b ni a, ya aucune raison que ta valeur b-a change...
la vie est une fête

-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 21:29
ha oui !! j'utilise alpha et betaa ... ca marche maintenant .... merci :)
-
Karim68
- Messages: 1
- Enregistré le: 06 Jan 2013, 21:31
-
par Karim68 » 06 Jan 2013, 21:37
Bonsoir écouté je suis une chèvres en math j'ai un dm de math a rendre pour demain et je capte rien du tout est ce que qqun pourrait m'aider svp ?
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 21:44
Celui ci boucle aussi ... je suppose que c'est aussi une erreur bête mais j'ai passé tellement de temps
function r_ap = dichotomie2(a,b,f,tolx,tolf)
//on veut aussi que abs(f(r_ap))< tolf **
alpha = a
betaa = b
c = (alpha + betaa)/2
fa = f(alpha)
fb = f(betaa)
fc = f(c)
while betaa-alpha > tolx | abs(fc)>tolf
if fa*fc<=0 then
betaa = c
fb = fc
else
alphaa = c
fa = fc
end
c = (alpha + betaa)/2
fc = f(c)
end
r_ap = c
endfunction
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 21:53
Karim68 a écrit:Bonsoir écouté je suis une chèvres en math j'ai un dm de math a rendre pour demain et je capte rien du tout est ce que qqun pourrait m'aider svp ?
Créé ton propre topic.
@alitshe : c'est ton exécution qui boucle ? Ca dépend peut être de ta fonction et de tes paramètres non ?
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 21:57
Oui ca boucle à l'execution je pense que c'est les conditions de mon while qui ne sont pas bonnes, j'essai de de décomposer la valeur absolue et de faire la negation
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 21:58
while( betaa - alphaa > tolx | -tolf> fc | fc>tolf )
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 21:59
alitshe a écrit:Oui ca boucle à l'execution je pense que c'est les conditions de mon while qui ne sont pas bonnes, j'essai de de décomposer la valeur absolue et de faire la negation
Oui dans le while ce serait plutôt un "et". Tu continues tant que tu n'es pas sous le seuil des 2 niveaux.
Donc concrètement tu t'arrêtes si tu as franchis l'une des 2 tolérances...
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 22:00
alitshe a écrit:while( betaa - alphaa > tolx | -tolf> fc | fc>tolf )
Non la valeur absolue était bien

-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 22:02
je ne dois pas m'arrêter tant que je n'ai pas franchis les deux ?
en fait dans ma tête je pense :
tant que je n'ai pas : beta - alpha <= tolx et abs(fc) <= folf alors je continue, du coup j'ai fais la négation de tout ca :/
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 22:03
Ouais mais non. L'idée de la "tolérance" c'est justement pour s'arrêter si jamais l'un des 2 critères n'arrive pas à se satisfaire. Donc je pense que tu devrais essayer le "et" ;)
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 22:06
Bon je remets la valeur absolue, alors maintenant il se passe des choses étranges .....
regarde:
-8->dichotomie2(-1,2,test,0.0001,0.0001)
// ICI une boucle infinie
-9->dichotomie2(-2,2,test,0.0001,0.0001)
ans =
0.
// Ici une valeur cool mais qui me semble fausse ;-)
sachant que la fonction qui s'appelle test c'est : arctan
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 22:15
alitshe a écrit:Bon je remets la valeur absolue, alors maintenant il se passe des choses étranges .....
regarde:
-8->dichotomie2(-1,2,test,0.0001,0.0001)
// ICI une boucle infinie
-9->dichotomie2(-2,2,test,0.0001,0.0001)
ans =
0.
// Ici une valeur cool mais qui me semble fausse

sachant que la fonction qui s'appelle test c'est : arctan
C'est normal que le deuxième marche vu que tu cherches x tel que arctan(x) = 0 et c'est x = 0 ce que tu obtiens rapidement quand tu fais (-2+2)/2

Tu pourrais faire un "print" des étapes intermédiaires (ce qu'il choisit pour chaque variable à chaque passage dans la boucle) ?
-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 22:19
je ne sais pas faire un print avec scilab, je n'ai pas l'habitude d'utiliser scilab et plus non plus l'habitude du C mais c'est println ?
-
XENSECP
- Habitué(e)
- Messages: 6387
- Enregistré le: 27 Fév 2008, 19:13
-
par XENSECP » 06 Jan 2013, 22:22
alitshe a écrit:je ne sais pas faire un print avec scilab, je n'ai pas l'habitude d'utiliser scilab et plus non plus l'habitude du C mais c'est println ?
Yep

Ou sinon essaye de le faire exécuter à la main pour voir pourquoi ça bloquerait

-
alitshe
- Membre Naturel
- Messages: 38
- Enregistré le: 06 Jan 2013, 21:04
-
par alitshe » 06 Jan 2013, 22:28
je pense que c'est un probleme avec ma condition tolf car ma dichotomie sans cette condition marche très bien maintenant. Merci pour cette aide, je pense reprendre ma recherche de L'ERREUR demain et si je trouve je le posterai, car il me reste encore de nombre méthodes (encore une dichotomie, deux newton et la sécante)
encore merci, et je donne des nouvelles si je trouve
Utilisateurs parcourant ce forum : Fulano et 28 invités