Une résolution par balayage | Si f x ×f x p 0 alors

publicité
Une résolution par balayage
L'algorithme présenté dans cette page permet de trouver "toutes" (ou presque(*)) les solutions d'une équation du type f(x)=0
sur un intervalle donné.
Voici l'idée de la méthode :
On se place sur un intervalle [a ; b] donné où la fonction f est définie. On découpe
cet intervalle en "tranches de taille identique". On teste alors si la fonction change
de signe entre les bornes de chaque tranche. Si oui, on considère que la fonction a
coupé l'axe des abscisses entre les deux bornes et que l'on a donc un
encadrement d'une solution de l'équation f(x) = 0.
Dans toute la suite on
appellera a et b les deux
bornes de l'intervalle, p la
longueur "d'une tranche".
Indiquer les encadrement des solutions obtenues lorsque l'on choisit successivement :
a=0, b=6 et p=2
a=0, b=6 et p=1,5
a=0, b=6 et p=1
a=0,5, b=6 et p=1
Voici une première version de l'algorithme où l'on a choisi de "découper" l'intervalle [a ; b] en 1 000 tranches de tailles
identiques.
Algorithme en langage naturel
Entrées :
Saisir les bornes a et b de l'intervalle (a<b)
Initialisation des variables :
Affecter (b-a)/1000 à p
Affecter a à x
Affecter 0 à M // M représente le nombre de solutions trouvées
Effacer toutes les listes
Traitement :
Tant que x ≤b faire
| Si f x ×f xp0 alors
|
| Augmenter M de 1
|
| Affecter x à Liste_des_valeurs_par_défaut en position M
|
| Affecter x + p à Liste_des_valeurs_par_excès en position M
|
| Affecter x + p à x
| Sinon
|
| Affecter x + p à x
| Fin de Si
Fin de Tant que
Sorties :
Pour i allant de 1 à M faire
| Afficher "Les solutions sont comprises entre : "
| Afficher la valeur de Liste_des_valeurs_par_défaut, position M
| Afficher "et : "
| Afficher la valeur de Liste_des_valeurs_par_excès, position M
Fin de Pour
Sur Casio
1) Tester cet algorithme avec les fonctions définies par :
a) f(x) = cos(x) sur [0 ; 7] (mettre la calculatrice en radians)
b) f(x) = x²-1 sur [-2 ; 2]
2) Tracer le graphe de la fonction f définie au b). Que constate-t-on? Comment l'expliquer?
Amélioration de l'algorithme :
Pour palier au défaut rencontré à la question 2) nous allons rajouter un test supplémentaire dans le traitement de
l'algorithme.
Algorithme en langage naturel
Sur Casio
Entrées :
Saisir les bornes a et b de l'intervalle (a<b)
Initialisation des variables :
Affecter (b-a)/1000 à p
Affecter a à x
Affecter 0 à N // N représente le nombre de solutions exactes trouvées
Affecter 0 à M // M représente le nombre de solutions approchées trouvées
Effacer toutes les listes
Traitement :
Tant que x≤b faire
| Si f(x) = 0 alors
|
| Affecter N+1 à N
|
| Affecter x à Liste_des_solutions_exactes en position N
|
| Affecter x + p à x
| Sinon
|
| Si f x ×f x p0 alors
|
|
| Augmenter M de 1
|
|
| Affecter x à Liste_des_valeurs_par_défaut en position M
|
|
| Affecter x + p à Liste_des_valeurs_par_excès en position M
|
|
| Affecter x + p à x
|
| Sinon
|
|
| Affecter x + p à x
|
| Fin de Si
| Fin de Si
Fin de Tant que
Sorties :
Afficher "Le nombre de solution de l'équation est : "
Afficher la valeur de N+M
Pour i allant de 1 à N faire
| Afficher "Les solutions exactes sont : "
| Afficher la valeur de Liste_des_solutions_exactes, position N
Fin de Pour
Pour i allant de 1 à M faire
| Afficher "Les solutions sont comprises entre : "
| Afficher la valeur de Liste_des_valeurs_par_défaut, position M
| Afficher "et : "
| Afficher la valeur de Liste_des_valeurs_par_excès, position M
Fin de Pour
Tester l'algorithme avec les fonctions précédentes
Mini défi : Cet algorithme contient une instruction répétée trois fois, alors que l'on peut ne l'écrire qu'une seule fois en
modifiant la structure de l'algorithme. Sauriez-vous trouver laquelle et effectuer cette modification?
(*)
Un début d'explication du "presque toutes les solutions" du début :
Tester cet algorithme sur la fonction f définie par f(x) = sin(1/x) en choisissant comme bornes :
a) a=0,00001 et b = 1
b) a=0,00001 et b = 0,1
Que remarque-t-on?
Téléchargement