Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Extraction d'une racine carée et fraction continue

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 11 Fév 2019 14:35    Sujet du message: Extraction d'une racine carée et fraction continue Répondre en citant

Bonjour ALS : )
Je sollicite votre aide s'il vous plaît pour un petit programme en rapport avec les racines carrées et les fractions continues.

Tout d'abord en rapport avec ce petit programme :

========================================

restart;
"CFRAC 2019";
kernelopts(maxdigits);
p := 26;
with(numtheory);
cfrac(sqrt(p), 10, 'c');
c := [c];

========================================

Alors pour les "petits" nombres il n'y a aucun problème et Maple renvoie les fractions.
Mais dès lors que j'utilise un "grand" nombre Maple me renvoie cette erreur : "Error, (in numtheory:-nthconver) numeric exception: division by zero"
Comment pourrait-on s'il vous plaît corriger cela...?

(J'ai pensé à calculer avec "evalf" la racine carrée du nombre et faire ensuite directement "cfrac" sur la racine calculée, mais n'y a t-il pas une autre solution ..??)

PS: Ici le "cfrac" me donne comme demandé, les 10 premières fractions, mais peut-on par exemple demander une sélection de fractions de 5..10 ou par exemple les fractions de 20 à 25 etc ...?


Ma seconde question est de savoir s'il vous plaît, si cela est possible de faire un petit programme ( par exemple comme vous avez déjà fait pour le sudoku ) qui effectue l'extraction d'une racine carrée ( comme si on faisait à la main ) et qui donne chaque étape ( disposée si c'est possible comme on apprend au primaire, c'est à dire avec la longue barre verticale et la petite barre horizontale )..?


[img] http://villemin.gerard.free.fr/ThNbDemo/RacinCar_fichiers/image045.jpg [/img]

En espérant que vous vous portez bien,
@bientôt,
Guimzo
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 21 Fév 2019 8:33    Sujet du message: Répondre en citant

Bonjour,

Oui, je vais très bien. A propos du développement en fractions continues, voici un petit programme permettant d'afficher la suite des termes de ce développement.


Exemple: si x=46/7 et n=8 , on obtient une liste de 4 termes


[y[1], y[2], y[3], y[4]] = [6, 1, 1, 3]


Code:

                                         1
                   46/7 = y[1] + ------------------
                                             1
                                 y[2] + -----------
                                                1
                                        y[3] + ----
                                               y[4]




Code:

> frac_cont:=proc(x,n)
    local y,z,k,L;
    z[1]:=x; y[1]:=floor(z[1]);L:=y[1];k:=1;
    while k<n do
                   if evalf(y[k])<>evalf(z[k]) then
                       z[k+1]:=evalf(1/(z[k]-y[k]),50);y[k+1]:=floor(z[k+1]);
                       L:=L,y[k+1];k:=k+1;
                  else RETURN([L]);
                  end if;
   end do;
   [L];
 end proc;
 

 

> frac_cont(46/7,8);
                             [6, 1, 1, 3]


> frac_cont(sqrt(279),20);

   [16, 1, 2, 2, 1, 2, 2, 1, 32, 1, 2, 2, 1, 2, 2, 1, 32, 1, 2, 2]

> frac_cont(exp(1),20);

    [2, 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, 1, 1, 10, 1, 1, 12, 1, 1]

> frac_cont(Pi,20);

   [3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2]


> frac_cont(sqrt(71258978117),100);
  [266943, 1, 3, 2, 2, 3, 21, 10, 1, 3, 8, 1, 288, 1, 1, 1, 2, 1, 4,

        1, 22, 30, 1, 17, 2, 2, 1, 2, 18, 9, 12, 1, 7, 1, 1, 2, 5, 1,

        1, 1, 7, 2, 1, 2, 1, 32, 6, 4, 1, 5, 6, 1, 1, 1, 1, 8, 1, 2,

        148, 1, 1, 2, 24, 95, 2, 2, 6, 2, 2, 2, 1, 267, 2, 2, 1, 2, 2,

        6, 1, 2, 1, 1, 3, 3, 1, 19, 8, 1, 2, 1, 2, 2, 6, 1, 1, 19, 21,

        58, 1, 7]






Je ne sais pas s'il fonctionne avec de très gros nombres.

A bientôt.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 21 Fév 2019 22:19    Sujet du message: Répondre en citant

Bonjour ALS,
Merci pour votre aide ; cela a l'air de fonctionner pour une certaine longueur de nombre.

Pour ne sélectionner qu'un intervalle donné des résultats, j'ai utilisé la fonction "op" du coup :

c := frac_cont(sqrt(3715499642219362511450627), 100):
res := [op(5 .. 10, c)];

Merci et à bientôt Professeur,
Le bonjour de Lyon
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 22 Fév 2019 9:06    Sujet du message: Répondre en citant

Bonjour Guimzo,

En évaluant la racine carrée au départ avec un grand nombre de décimales, j'ai obtenu la décomposition en fractions continues :

Code:

> with(numtheory):
> p := 3715499642219362511450627; c:=cfrac(evalf(sqrt(p),5000), 10);

                    p := 3715499642219362511450627


                                             1
  c := 1927563135728 + ---------------------------------------------
                                               1
                       2 + -----------------------------------------
                                                 1
                           7 + -------------------------------------
                                                   1
                               5 + ---------------------------------
                                                     1
                                   18 + ----------------------------
                                                       1
                                        4 + ------------------------
                                                         1
                                            1 + --------------------
                                                           1
                                                6 + ----------------
                                                             1
                                                    1 + ------------
                                                               1
                                                        5 + --------
                                                            22 + ...

> op(c);

         [1927563135728, 2, 7, 5, 18, 4, 1, 6, 1, 5, 22, ...]



La fonction op agissant sur c permet effectivement l'affichage de la suite sous forme de liste.

@+
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 22 Fév 2019 20:49    Sujet du message: Répondre en citant

Bonjour ALS,
Merci encore pour votre aide, effectivement, on peut aussi évaluer d'abord la racine carrée du nombre et ensuite faire le CFRAC dessus.
Portez-vous bien, à bientôt Professeur
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.