Calcul par approximation successive
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Calcul par approximation successive



  1. #1
    invite352bbdac

    Calcul par approximation successive


    ------

    Bonsoir,

    Je suis entrain de mettre en oeuvre un algorithme pour me rapprocher d'un point particulier.

    Pour cela, j'utilise la méthode de l'approximation successive.

    J'obtiens des résultats cohérents au départ de mon algorithme puis la valeur stagne, je suppose que l'algorithme doit avoir sa limite.

    Pourriez-vous m'aider à déterminer le "delta" approprié à mon problème ?

    La valeur à atteindre est d'environ 17000 plus ou moins 3000.

    Mes conditions initiales sont :
    consigne = 65535
    delta = consigne/2

    Voici l'algorithme que j'ai pu mettre en oeuvre :

    Code:
    int consigne = 25000;
    int delta_consigne = 100000;
    
    int itt = 0;
    QString etat_switch;
    
    while ( delta_consigne > 1)
    {
        if (itt == 0)
        {
        delta_consigne = consigne / 2;
    
        envoie(consigne);
        }
        
        else if (itt > 0)
        {
            reception_etat_switch(etat_switch);
    
            if(etat_switch.toInt() == 0)
            {
                delta_consigne /= 2;
                consigne -= delta_consigne;
    
                envoie(consigne);
            }
    
            else if (etat_switch.toInt() == 1)
            {
                delta_consigne /= 2;
                consigne += delta_consigne;
    
                envoie(consigne);
                reset_state_switch();
            }
        }
        itt++;
    }
    Merci pour votre aide.

    -----

  2. #2
    pm42

    Re : Calcul par approximation successive

    Au bout de 17 itérations, delta_consigne vaut 0 et ton algorithme stagne en effet.

  3. #3
    pm42

    Re : Calcul par approximation successive

    Citation Envoyé par pm42 Voir le message
    Au bout de 17 itérations, delta_consigne vaut 0 et ton algorithme stagne en effet.
    J'ai répondu un peu vite. Je regarde plus en détail quand j'ai du temps.

  4. #4
    invite352bbdac

    Re : Calcul par approximation successive

    Les exigences c'est surtout comment :

    -s'assurer que tu converge vers la bonne valeur
    -d'avoir suffisamment de pas pour t'en rapprocher.

    Je vais le tester au cas par cas avec un min et un max pour voir si il fonctionne.

  5. A voir en vidéo sur Futura
  6. #5
    invite936c567e

    Re : Calcul par approximation successive

    Bonjour

    (NB : peut-être faudrait-il préciser la finalité des fonctions présentes mais non définies dans le bout de code fourni.)

    En supposant que « envoie(consigne); » fixe la valeur à tester et que « etat_switch.toInt() » indique si cette valeur est inférieure à la valeur recherchée, alors la méthode présentée s'apparente à une recherche par dichotomie.

    En l'état, ce code ne garantit pas que toutes les valeurs possibles seront explorées. En effet :

    • Le premier pas delta utilisé est trop petit, car le « delta = consigne/2; » initial est suivi d'un « delta_consigne /= 2; » avant le premier « consigne -= delta_consigne; » ou « consigne += delta_consigne; ».

    • Si l'on excepte ce premier problème, comme les pas sont obtenus par des divisions entières par 2, lorsque le pas de départ n'est pas une puissance de 2, durant ces divisions il survient des arrondis qui peuvent réduire la somme des pas nécessaires pour atteindre la valeur recherchée. En l'occurrence, en démarrant à consigne=65535, on a un arrondi à chaque division et le pas delta prend successivement les valeurs 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3 et 1. Ainsi, si la recherchée est inférieure à 16, alors elle ne sera jamais atteinte car 65535-32767-16383-8191-4095-2047-1023-511-255-127-63-31-15-7-3-1=16. La valeur 20 ne pourra pas non plus être atteinte pour la même raison, car 65535-32767-16383-8191-4095-2047-1023-511-255-127-63-31-15-7-3+1=18 et 65535-32767-16383-8191-4095-2047-1023-511-255-127-63-31-15-7+3-1=22.

    • Si l'on excepte ces deux premiers problèmes, le fait de terminer sur un pas de +1 ou -1 interdit d'atteindre une valeur entière sur deux. Par exemple, avec consigne=8 au départ et delta valant successivement 4, 2 et 1, la valeur finale ne pourra être que 8-4-2-1=1, 8-4-2+1=3, 8-4+2-1=5, 8-4+2+1=7, ... 8+4+2-1=13 ou 8+4+2+1=15, soit aucune valeur paire.

    • Si l'on excepte ces trois premiers problèmes, le fait de ne pas arrêter les itérations dès que la valeur recherchée a été trouvée interdit de re-proposer cette valeur par la suite.

  7. #6
    invite352bbdac

    Re : Calcul par approximation successive

    J'ai changé ma condition d'arret :

    while ( abs (consigne_2 - consigne_1) > 0 )

    Mon algorithme fonctionne mais à certains pas je me retrouve avec la valeur 9999 après plusieurs séquences de tests.

    C'est étrange, ... je n'arrive pas à en conclure quelque chose.

  8. #7
    invite6c250b59

    Re : Calcul par approximation successive

    Citation Envoyé par electro575 Voir le message
    C'est étrange, ... je n'arrive pas à en conclure quelque chose.
    C'est comme l'histoire du chien qui aboyait dans le tonneau.

  9. #8
    invite936c567e

    Re : Calcul par approximation successive

    Citation Envoyé par electro575 Voir le message
    C'est étrange, ... je n'arrive pas à en conclure quelque chose.
    C'est étrange, avec aussi peu d'informations (notamment sans le code utilisé), nous non plus on n'arrive pas à conclure quoi que ce soit.

  10. #9
    invite352bbdac

    Re : Calcul par approximation successive

    Merci pour votre aide.

    La solution que j'ai trouvé c'est de réduire le delta seulement lorsque le switch passe d'un état à un autre.

    Dans ce cas, je converge bien vers la valeur voulue.

    Bonne journée.

Discussions similaires

  1. approximation de Galerkin, calcul par éléments finis
    Par invite518b0bc6 dans le forum Physique
    Réponses: 1
    Dernier message: 27/03/2013, 19h15
  2. Calcul du champ E dans l'approximation paraxial
    Par invite91cb62e0 dans le forum Physique
    Réponses: 1
    Dernier message: 25/01/2010, 00h28
  3. convertisseur A/N à approximation successive
    Par invite323ceadc dans le forum Électronique
    Réponses: 1
    Dernier message: 09/05/2009, 22h21
  4. Calcul pH et approximation
    Par invite4e3e3173 dans le forum Chimie
    Réponses: 6
    Dernier message: 18/02/2009, 21h48
  5. Calcul pH sans approximation
    Par invite59cc5052 dans le forum Chimie
    Réponses: 4
    Dernier message: 21/04/2008, 21h16