Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

programme algobox

Posté par
pppa
20-02-14 à 20:11

Bonjour

j'ai écrit un code pour approcher la/les solution(s) réelle(s) d'une équation du troisième degré par la méthode de la dichotomie.

Le programme fonctionne formellement :

V A R I A B L E S
a E S T _ D U _ T Y P E N O M B R E
b E S T _ D U _ T Y P E N O M B R E
S e u i l E S T _ D U _ T Y P E N O M B R E
M e s s E S T _ D U _ T Y P E C H A I N E
M i l i e u E S T _ D U _ T Y P E N O M B R E

D E B U T _ A L G O R I T H M E
  a P R E N D _ L A _ V A L E U R - 2
  b P R E N D _ L A _ V A L E U R 3
  S e u i l P R E N D _ L A _ V A L E U R 0 . 0 0 0 0 0 1
  M i l i e u P R E N D _ L A _ V A L E U R ( a + b ) / 2
   T A N T _ Q U E ( a b s ( b - a ) > S e u i l ) F A I R E
      D E B U T _ T A N T _ Q U E
      S I ( F 1 ( a ) * F 1 ( ( a + b ) / 2 ) < 0 ) A L O R S
      D E B U T _ S I
      a P R E N D _ L A _ V A L E U R a
      b P R E N D _ L A _ V A L E U R ( a + b ) / 2
  F I N _ S I

   S I N O N
   D E B U T _ S I N O N
   a P R E N D _ L A _ V A L E U R ( a + b ) / 2
   b P R E N D _ L A _ V A L E U R b
   F I N _ S I N O N

  A F F I C H E R a
  A F F I C H E R b
F I N _ T A N T _ Q U E
F I N _ A L G O R I T H M E

F o n c t i o n n u m é r i q u e u t i l i s é e :
F 1 ( x ) = p o w ( x , 3 ) + 2 * p o w ( x , 2 ) - 1

J'ai 3 questions.

1/ Algbx m'affiche le résultat de tous les tests successifs jusqu'au résultat avec la précision que j'ai fixée. Est-il possible de limiter l'affichage au seul dernier résultat le plus fin ?

2/ Dans le cas de trois solutions réelles (cas avec cette fonction F1), seule la solution la plus grande est testée et affichée. Est-il possible d'avoir l'affichage des 3 solutions ?

3/ Que se passerait-il si l'équation n'admettait pas de solution réelle ? (Si vous avez un exemple de fonction degré 3 qui ne s'annule que pour des valeurs complexes, je la testerai).

Merci pour votre aide et vos conseils.

Posté par
pppa
re : programme algobox 20-02-14 à 20:12

Je remplacerai tous les (a+b)/2 par Milieu par la suite....

Posté par
carpediem
re : programme algobox 20-02-14 à 21:01

salut

1/

il suffit de sortir "afficher a" et "afficher b" de la boucle "tant que"

2/

il suffit d'initialiser avec les bonnes valeurs (un bon encadrement)
de plus le traitement dépend des variations de f entre ces deux valeurs

il est toujours préférable de choisir un encadrement sur lequel la fonction est monotone
dans tous les autres cas il peut tomber sur n'importe laquelle des racines

j'écrirais plutôt

Citation :
a P R E N D _ L A _ V A L E U R - 2
  b P R E N D _ L A _ V A L E U R 3
  S e u i l P R E N D _ L A _ V A L E U R 0 . 0 0 0 0 0 1


demander a
demander b
demander seuil

3/

dans le cas de l'absence de racines ton programme risque de tourner indéfiniment suivant les arrondis du logiciel
ou tomber sur n'importe quelle valeur entre a et b


Posté par
pppa
re : programme algobox 21-02-14 à 20:42

Bonsoir carpediem

merci pour tes conseils

Pour le 1, j'aurais dû y penser ; merci

pour le 2, bien sûr avec F1', on sait comment varie F1, ce qui permet de fixer des intervalles de monotonie à la demande comme tu l'as pertinemment suggéré.

Reste un pb que je ne parviens pas à résoudre :
sur 2 intervalles  où F1 est croissante, j'obtiens un encadrement précis des solutions (que je connais par ailleurs par un logiciel graphique)
Sur l'intervalle de décroissance ( [-4/3 ; 0] ), par contre, il m'approche à la solution -2/3 au lieu de -1 (solution "évidente" de surcroît) , et je ne comprends pas pourquoi, (ça fait 1/2 heure que je cherche) ; je suppose que c'est dans l'instruction avec les a et les b, j'ai fait plusieurs essais mais ça n'aboutit pas !
Peux-tu (toi ou d'autres personnes) m'aider stp.

Merci par avance

Posté par
carpediem
re : programme algobox 21-02-14 à 20:50

c'est ici ::

Citation :
D E B U T _ T A N T _ Q U E
      S I ( F 1 ( a ) * F 1 ( ( a + b ) / 2 ) < 0 ) A L O R S
      D E B U T _ S I
     a P R E N D _ L A _ V A L E U R a
      b P R E N D _ L A _ V A L E U R ( a + b ) / 2
  F I N _ S I

   S I N O N
   D E B U T _ S I N O N
   a P R E N D _ L A _ V A L E U R ( a + b ) / 2
   b P R E N D _ L A _ V A L E U R b    F I N _ S I N O N


ceci n'est valable que pour les fonctions croissantes :: étudie les cas précis avec un schéma ...

d'autre part les lignes soulignées sont inutiles ....

Posté par
pppa
re : programme algobox 22-02-14 à 00:05

Citation :
les lignes soulignées sont inutiles


Effectivement...

Citation :
ceci n'est valable que pour les fonctions croissantes
:
mais pourquoi

:
Citation :
étudie les cas précis avec un schéma .
..

Tu veux dire : simuler des cas ? Je ne suis pas sûr d'avoir bien compris ce que tu veux me faire saisir ; peux-tu préciser stp ? Merci par avance

Posté par
carpediem
re : programme algobox 22-02-14 à 12:56

fais deux schéma :

f est croissante sur [a, b]

f est décroissante sur [a, b]

(et bien entendu f(x) = 0 a une racine)

et regarde ce que tu mets dans les variables a et b suivant les résultats de ton test

tu verras qu'il faut distinguer deux cas

Posté par
pppa
re : programme algobox 22-02-14 à 18:17

Hello

j'ai simulé sur excel ce que l'algorithme est censé faire (sauf que moi je ne le fais pas à vitesse grand V) et le problème semble venir du choix des bornes des intervalles de monotonie.

f est décroissante sur [-4/3;0]

Si je commence en attribuant -4/3 à a et 0 à b, on a f(a)*f((a+b)/2)< 0
et le deuxième test se fait sur f(-4/3)*f(-1) qui vaut 0, et c'est là que les perturbations commencent.

mais si dès le départ je pose b = -1/2 (f décroissante sur [-4/3 ; -1/2]
alors sans rien changer au code, algobox m'approche la bonne solution (-1) avec la précision souhaitée.

Donc, à défaut de conclure définitivement avant d'avoir reçu un ou des avis plus éclairés, je constate "empiriquement" que c'est le choix d'une valeur de b qui a d'emblée une image qui est un des zéros de f qui fait que algobox affiche un résultat aberrant.

Mais plus que constater, j'aimerais pouvoir l'expliquer clairement ; peux-tu (toi ou d'autres personnes qui maîtrisent l'informatique appliquée aux mathématiques) m'éclairer à ce sujet.

Merci par avance

Posté par
carpediem
re : programme algobox 22-02-14 à 19:11

quelle est la fonction f ?

Citation :
et le deuxième test se fait sur f(-4/3)*f(-1) qui vaut 0, et c'est là que les perturbations commencent.


le pb c'est que ton milieu est la racine !!! probablement ....

Posté par
carpediem
re : programme algobox 22-02-14 à 19:12

et tu testes 0 < 0 qui est donc faux ... et ça explose ...

Posté par
pppa
re : programme algobox 22-02-14 à 19:23

J'ai écrit f pour F1, pr simplifier ; c'est tjs la même qu'au début : f(x) = x3+2x²-1

Citation :
probablement ....


Oui, probablement, je voulais juste savoir si ce hasard du choix d'une des bornes qui conduit quasi dès le début à tester sur une racine fait que on peut en conclure à une certitude sur ce point ...

Juste pour savoir jusqu'à quel point ce logiciel est fiable, quelles sont ses forces et ....ses faiblesses.

A suivre éventuellement, sinon je vais en rester là sur ce cas...

Merci en tout cas de m'avoir aidé ; à ton écoute si tu penses avoir des informations complémentaires à me fournir à ce sujet

Posté par
carpediem
re : programme algobox 22-02-14 à 19:43

en fait réessaie en remplaçant < par ... ça devrait marcher et éviter le pb quand on tombe sur une racine ... (tiens moi au courant)

quant à ses forces et ses faiblesses .... bof j'sais pas quoi dire .... il permet de donner une réponse ... si on lui donne les bonnes bornes au départ ...

il faut donc tout de même faire une étude (partielle) de f .... (encadrer les racines) ....

en particulier il risque de bugger dans le cas où f n'est pas monotone sur l'intervalle initial ...

enfin à tester .....

Posté par
pppa
re : programme algobox 22-02-14 à 20:10

Citation :
en particulier il risque de bugger dans le cas où f n'est pas monotone sur l'intervalle initial ..


Ah ça c'est sûr, je reconnais mon pb N°2 dans ce cas là.



Tu me permettras de faire le test demain (obligations familiales, tu comprends...)

Promis je te tiens au courant, je te dois bien ça...

Bonne soirée

Posté par
carpediem
re : programme algobox 22-02-14 à 20:12

merci et à toi aussi

Posté par
pppa
re : programme algobox 23-02-14 à 19:54

Hello

Citation :
en fait réessaie en remplaçant < par  


excuse-moi, ce n'st pas plutôt le contraire que tu voulais me suggérer ?

Sur l'intervalle de  décroissance,
en entrant :
pour a : -1.333 au lieu de -4/3
pour b : -0.00000001 au lieu de 0

il m'approche la bonne solution.

Je pense que c'est ce que tu voulais que je teste ? Sinon, reprécise-moi.

Merci pour ton aide ; les essais que tu m'as suggérés m'ont appris des choses intéressantes sur le fonctionnement de ce logiciel, notamment sur ses 'limites'

Posté par
carpediem
re : programme algobox 24-02-14 à 10:54

le contraire de quoi ?

en fait ce qui importe (il me semble) ce n'est pas la croissance ou la décroissance mais la monotonie ...

il me semble que le test est bon et c'est sur qu'avec des valeurs "approchées" plutôt qu'"exactes" ça doit aller mais je pense que même avec des valeur exactes des inégalités larges devrait convenir

enfin à tester à la main sur deux tours permet de conclure exactement ....

se donne a < c < b  (c racine) et on place m entre a et c ou entre c et b et on regarde ce qu'on doit conclure ....

puis on essaie aussi m = c et on regarde ce qui se passe ...



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !