bonsoir à tous et à toute
j'ai un algorithme a faire et j'ai quelque soucis , f est une fonction continue sur [a;b] f(a)*f(b)<0 donc signe de f(a) différent du signe de f(b)
d'après le corolaire des VI f(x)=o n' a qu'une seule solution
j'ai commencé avec; variable a,
variable b,
variable c,
variable précision
variable x
début algorithme:
précision PREND_LA_VALEUR 0.01
LIRE a
LIRE b
TANT_QUE (b-a>précision) FAIRE
DEBUT_TANT_QUE
c PREND_LA_VALEUR (a+b)/2
Si f(c)=0
c prend la valeur x
Si f(a)f(c)<0
x prend la valeur a<x<c
Sif(b)f(c)>o
x prend la valeur c<x<b
tant que fin
afficher a
afficher b
afficher <solution<
fin algorithme
je ne suis pas très bon en algorithme, merci de votre aide
L'algorithme rédigé pour l'outil didactique AlgoBox
Algorithme de recherche de racine d'une équation par la méthode de la dichotomie
'a' et 'b' sont les bornes de l'intervalle initial
'ecart' est l'erreur acceptable
La fonction est définie dans l'onglet "Utiliser une fonction numérique"
1 VARIABLES
2 a EST_DU_TYPE NOMBRE
3 b EST_DU_TYPE NOMBRE
4 m EST_DU_TYPE NOMBRE
5 ecart EST_DU_TYPE NOMBRE
6 fa EST_DU_TYPE NOMBRE
7 fm EST_DU_TYPE NOMBRE
8 DEBUT_ALGORITHME
9 // Saisie des bornes initiales et de la marge d'erreur
10 LIRE a
11 AFFICHER "a="
12 AFFICHER a
13 LIRE b
14 AFFICHER "b="
15 AFFICHER b
16 LIRE ecart
17 AFFICHER "ecart="
18 AFFICHER ecart
19 // Initialisation de l'image de la borne inférieure
20 fa PREND_LA_VALEUR F1(a)
21 // On boucle tant que l'écart entre les bornes est supérieur à la marge d'erreur
22 TANT_QUE (abs(b-a)>ecart) FAIRE
23 DEBUT_TANT_QUE
24 // Calcul du milieu de l'intervalle et de son image
25 m PREND_LA_VALEUR (a+b)/2
26 fm PREND_LA_VALEUR F1(m)
27 // test si cette image est du signe de l'image de la borne inférieure ou du signe opposé
28 SI (fa*fm>0) ALORS
29 DEBUT_SI
30 // la racine est entre m et b, on déplace la borne inférieure
31 a PREND_LA_VALEUR m
32 fa PREND_LA_VALEUR fm
33 FIN_SI
34 SINON
35 DEBUT_SINON
36 // la racine est entre a et m, on déplace la borne supérieure
37 b PREND_LA_VALEUR m
38 FIN_SINON
39 FIN_TANT_QUE
40 AFFICHER "valeur approchée racine entre a et b : "
41 AFFICHER m
42 FIN_ALGORITHME
Fonction numérique utilisée :
F1(x)=x*exp(x)-pow(x,2)-2*x+2
***Algorithme lancé***
a=-2
b=-3
ecart=0.0001
valeur approchée racine entre a et b : -2.6781616
***Algorithme terminé***
ok merci , mais est ce qu'il serait possible de m'expliquer mes erreurs pour éviter que je les refasse ?
tes erreurs sont nombreuses, hélas
et je ne me vois pas les analyser toutes
il suffit d'essayer de faire "tourner" l'algorithme à la main sur un exemple simple pour s'en rendre compte
par exemple, quand tu écris :
Si f(c)=0
c prend la valeur x
mais si cela arrive dès la première boucle, x n'a pas été initialisé...
et ensuite, tu ne le lis plus, ce x, tu te contente d'y stocker des valeurs
tu espères que tu auras systématiquement f(c)=0 ?
autre exemple flagrant : à chaque boucle, tu calcules
c PREND_LA_VALEUR (a+b)/2
c'est bien, mais a et b ne variant pas, c prend toujours la même valeur
et ton test de sortie de boucle :
TANT_QUE (b-a>précision) FAIRE
mais a et b ne variant jamais, tu ne risques pas de sortir de ta boucle un jour
j'arrête là, tu dois d'abord apprendre à exécuter un algorithme sur le papier, c'est pénible, mais tu en as drôlement besoin.
Exécute l'algorithme manuellement pour tenter de voir ce qui cloche
désoler, je voulais savoir , si il était possible d'entrer ma fonction par exemple f(x)=5x-2 pour que le programme trouve la solution de cette fonction dans l'intervalle [a;b]
tu veux dire, avec Algobox ?
tu vas sur l'onglet "Utiliser une fonction numérique"
tu coches la case
tu saisis la fonction de ton choix, par exemple
5*x-2
en respectant la syntaxe
et dans l'algorithme, tu utilises F1(tavariable), comme je l'ai fait dans mon exemple
20 fa PREND_LA_VALEUR F1(a)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :