IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

calcul de la racine carrée par la méthode de Newton


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Par défaut calcul de la racine carrée par la méthode de Newton
    salut!!!
    je suis en train d'écrire une fonction qui calcule la racine carrée d'un réel positif a par la methode de newton.
    la racine carrée d'un reel>0 est egale à la limite de la suite (Xn) n>0
    X indice(n+1)= 1/2 *( x indice n + a / x indice n)
    X0 est arbitraire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    entrer(a);
    entrer (X0);
    n <-0
     
    tant que ???
    x(n+1)<- 1/2 *( x indice n + a / x indice n)
    n<-n+1
    fin tant que
    et apres on fait une boucle mais quelle est la condition d'arrêt!!!!!
    et quand on retourne la racine carrée de a!!!!!
    merci de me conseiller!!

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu peux utiliser la précision pour faire ton calcul.

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Vu que tu sais que ta suite converge (en tout cas en mathématiques, car en représentation flottante ça doit être plus dur à prouver), tu peux comparer l'écart entre Xn et Xn+1 (divisé par Xn pour prendre en compte l'ordre de grandeur). Donc tu t'arrêtes lorsque (|Xn+1 - Xn| / |Xn|) < ε... Il faut maintenant déterminer ton ε

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2006
    Messages : 40
    Par défaut
    J'allais le dire. Ta suite est convergente donc

    | x(n+1) - x(n) | < epsilon

    Epsilon est une valeur très petite. A toi de voir quelle est le meilleur rapport qualité du résultat, temps de l'algorithme.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    je ce bout de code ici (Delphi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // distance de deux points
    Function Distance(x1, y1, x2, y2 : integer): integer;
    // Calcul de l'hypothénuse a := sqrt(dx*dx+dy*dy)
    // en utilisant la formule de Newton pour le calcul de la racine carrée
    // 12 itérations suffisent :  sqrt(a) -->  Xo = (1+a)/2  et  Xn+1 = (xn+a/xn)/2
    // C'est 3 fois plus rapide que  j := trunc(sqrt(sqr(dx)+sqr(dy)))
    var
      i : Integer;
      a, r0, r1 : Integer;
    begin
      r0 := x2-x1;      
      r1 := y2-y1;
      a := r0*r0 + r1*r1;
      r1 := (1+a) DIV 2;
      FOR i := 1 TO 12 DO
      begin
        r0 := r1;
        IF r0 > 0 then r1 := (r0+(a div r0)) div 2;
      end;
      Result:= r1;
    end;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    à la vitesse ou l'itération converge 12 itérations c'est déja énorme
    surtout si on choisit inteligemment l'amorce

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    étant donnée qu'un entier est sur 32 Bits

    est-ce qu'il ne serait pas possible de choisir le nombre d'itération
    en fonction de la grosseur du chiffre initial?

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    si Chiffre initiale < 16777215 (24bits)
        Nombre d'iteration=8
    else si Chiffre initiale < 65535 (16bits)
          Nombre d'iteration=6
      else si Chiffre initiale < 255 (8bits)
          Nombre d'iteration=4
      else
          Nombre d'iteration=12
    où quelque chose du genre?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. Calcul de la racine carrée d'un nombre
    Par Anomaly dans le forum Télécharger
    Réponses: 3
    Dernier message: 04/11/2013, 23h16
  2. [Free Pascal] Approximation de la racine carrée par la méthode de Newton
    Par Roland Chastain dans le forum Free Pascal
    Réponses: 2
    Dernier message: 30/05/2013, 00h54
  3. Réponses: 3
    Dernier message: 17/10/2010, 16h27
  4. Calcul d'une intégrale double par la méthode des quadratures
    Par deubelte dans le forum Mathématiques
    Réponses: 5
    Dernier message: 10/05/2009, 12h40
  5. [TP] Calcul de la racine carrée
    Par cloudstrif dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 23/04/2007, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo