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

algorithme dichotomie

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 :-)



Avatar de l’utilisateur
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

dm de math pour demain

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

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Fulano et 28 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite