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 

Formulation Équation et partie entière de racine carrée
Aller à la page 1, 2, 3  Suivante
 
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: 24 Mar 2015 20:35    Sujet du message: Formulation Équation et partie entière de racine carrée Répondre en citant

Re-bonjour ALS,

J'essaye de formuler une équation à Maple, mais il ne semble pas vouloir y répondre

Équation :

f:= ( floor(sqrt(351163x))+1)² - 351163x = y²:
isolve(f);

Peut-être que l'équation est mal formulée...?
L'équation, en elle même, a t-elle une relation avec les cercles...?
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: 25 Mar 2015 8:55    Sujet du message: Répondre en citant

Bonjour,
L'équation était mal formulée: oubli des * et utilisation de ² à la place de ^2.
J'ai résolu l'équation en cherchant y en fonction de x: j'obtiens 2 expressions opposées.
Je représente ensuite ces 2 courbes très chaotiques à cause de la présence de la partie entière (fonction floor)
Pas de relation a priori avec les cercles pour moi.

Code:

> restart:
> f:= ( floor(sqrt(351163*x))+1)^2 - 351163*x - y^2;

                            1/2  1/2      2               2
          f := (floor(351163    x   ) + 1)  - 351163 x - y

> s:=solve(f,{y});

               2                       1/2
  s := {y = (%1  + 2 %1 - 351163 x + 1)   },

                 2                       1/2
        {y = -(%1  + 2 %1 - 351163 x + 1)   }

                    1/2  1/2
  %1 := floor(351163    x   )

> with(plots): plot({rhs(op(s[1])),rhs(op(s[2]))},x=0..100);



@+
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: 25 Mar 2015 10:24    Sujet du message: Répondre en citant

Bonjour ALS,

Merci, je pense que c'est probablement une solution pour la factorisation s'il y à des solutions à l'équation en question.
J'arrive pas encore à faire sortir sur Maple, la séquence que vous avez écrit, j'attends pour voir.
Ceci dit, voici ce qu'on pourrait peut-être faire pour résoudre les factorisations :

On part du principe qu'on peut écrire le nombre à factoriser sous forme de différence de deux carrés.
L'idéal c'est que l'un des deux carrés soit directement, la partie entière de la racine carré du nombre "p" à factoriser, auquel on ajoute 1.

Exemple : 247

floor(sqrt(247)) = 15
On ajoute 1, ce qui donne 15+1 = 16
Effectivement 16² - 247 = 9 c'est à dire le carré de 3
Donc 247 = 16² - 3²
Évidement 247 = (16+3) * (16-3) = 19 *13.
Dans le cas de 247, l'un des carré qui permet la factorisation est évidente, c'est floor(sqrt(247))+1

Mais il y à des nombres, par exemple 351163, dont l'un des carrés qui permet la factorisation, n'est pas directement de la forme floor(sqrt(p)) + 1.

La solution possible, est de faire de sorte qu'on trouve un entier k (semi-premier de préférence ) auquel on multiplie le nombre p de départ, de sorte que l'un des carrés qui factoriserait le nombre (p*k) soit de la forme la plus évidente floor(sqrt(p*k))+1.


Voici comment j'ai posé donc l'équation :


(( floor(sqrt(p*k))+1)² - (p*k) = x²

( floor(sqrt(p*k))² + 1² +2*( floor(sqrt(p*k)) - (p*k) = x²

2*( floor(sqrt(p*k)) + 1 = x²

2*( floor(sqrt(p*k)) = x²-1

En mettant au carré pour faire sortir les racines carrés on a :

4 * p * k = ( x²-1) ²

Il s'agit donc de résoudre l'équation afin de trouver un k tel que (4 * p * k) soit un carré.

J'ai remplacé, k par x, et x par y par convention, pour donner :

4*p*x = (y²-1)² ou 4*p*x = (x^4)-2*x²-1

On peut remplacer "p" par les nombres qu'on veut factoriser, par exemple 351163.

L'équation devient :

4*351163*x = (y²-1)²

À partir de là, je ne sais pas si le raisonnement est correct par rapport à (floor(sqrt(p*k))² que j'ai réduit en p*k....?
Pensez-vous ALS, que le raisonnement est correct...?
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: 25 Mar 2015 11:08    Sujet du message: Répondre en citant

Re-bonjour ALS,

J'ai tracé, la courbe de la séquence que vous avez fait ; serait-il possible de demander à Maple les coordonnées des points de la courbe qui sont sur l'axe des ordonnées..?

P.S.: j'ai dû me tromper dans l'écriture d'une autre équation, mais bizarrement, je tombe sur 622 en arrondissant pour 351163 :

f(x) = ((x² - 1)² + 1) (1 / 351163)

Je trace cette courbe et en cherchant les points de la courbe qui touche l'axe des "x" on a par exemple le point A :

A (1.09868411338846, 0.000000063741499)

Ensuite je multiplie 351163 * 1.09868411338846 =385817.20930983177898

Et enfin sqrt(385817.20930983177898) = 621.14185924781448349

J'arrondis ensuite à 621+1 = 622.
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: 25 Mar 2015 11:59    Sujet du message: Répondre en citant

Bonjour,
Citation:

À partir de là, je ne sais pas si le raisonnement est correct par rapport à (floor(sqrt(p*k))² que j'ai réduit en p*k....?


Non, (floor(sqrt(x))² n'est pas x. Exemple: si x=12345

Code:

>  floor(sqrt(12345))^2;
                                12321


Je suis absent jusqu'à mardi prochain. Désolé...
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: 25 Mar 2015 12:08    Sujet du message: Répondre en citant

Re-bonjour ALS,

Je reviens rapidement expliciter la méthode de multiplier le nombre semi-premier p au départ par un autre semi-premier dont on connait bien sûr les facteurs.

Pour 351163 on sait que l'un des carrés qui factorise le nombre n'est pas de la forme (floor(sqrt(p))+1)

L'idée c'est de transformer le nombre de départ en le multipliant par un autre semi-premier dont on connaît les facteurs, pour avoir un nombre plus facilement factorisable, par exemple on va prendre 15 = 3*5

On a 351163*15 = 5267445

Ainsi s'il faut factoriser 351163 sous forme de différence de deux carrés, il n'y à qu'une seule solution non triviale :

restart; f := x^2-y^2 = 351163; isolve(f);

{x = -175582, y = -175581}, {x = -175582, y = 175581},

{x = -622, y = -189}, {x = -622, y = 189}, {x = 622, y = -189},

{x = 622, y = 189}, {x = 175582, y = -175581},

{x = 175582, y = 175581}

La seule solution c'est le couple (622,189)


Alors que si on recherche les solutions pour (351163*15) on a :

restart; f := x^2-y^2 = 351163*15; isolve(f);

{x = -2633723, y = -2633722}, {x = -2633723, y = 2633722},

{x = -877909, y = -877906}, {x = -877909, y = 877906},

{x = -526747, y = -526742}, {x = -526747, y = 526742},

{x = -175589, y = -175574}, {x = -175589, y = 175574},

{x = -6299, y = -5866}, {x = -6299, y = 5866},

{x = -3653, y = -2842}, {x = -3653, y = 2842},

{x = -2677, y = -1378}, {x = -2677, y = 1378},

{x = -2299, y = -134}, {x = -2299, y = 134},

{x = 2299, y = -134}, {x = 2299, y = 134},

{x = 2677, y = -1378}, {x = 2677, y = 1378},

{x = 3653, y = -2842}, {x = 3653, y = 2842},

{x = 6299, y = -5866}, {x = 6299, y = 5866},

{x = 175589, y = -175574}, {x = 175589, y = 175574},

{x = 526747, y = -526742}, {x = 526747, y = 526742},

{x = 877909, y = -877906}, {x = 877909, y = 877906},

{x = 2633723, y = -2633722}, {x = 2633723, y = 2633722}

Donc plusieurs solutions non triviales, c'est à dire plus de chance de factoriser le p de départ.

Ensuite il suffit de prendre l'une des solutions et de le diviser par 3 ou par 5 et le résultat est l'un des facteurs du nombre p de départ :

Exemple :

Le couple {x = 3653, y = 2842}
On a 3653^2 - 2842^2 = (3653+2842) * (3653-2842) = 6495 * 811
Ici on a directement l'un des facteurs cherchés.

Le couple {x = 6299, y = 5866}
On a 6299^2 - 5866^2 = (6299+5866) * (6299-5866) = 12165 * 433
Ici encore on a directement l'un des facteurs cherchés.

Le couple {x = 2677, y = 1378}
On a 2677^2 - 1378^2 = (2677+1378) * ( 2677-1378) = 4055 * 1299
Ici on a pas directement l'un des facteurs cherchés, mais il suffit de tester les divisions successives : 4055/3 = ...? 4055/5=...? 1299/3=...? 1299/5=..?

Donc pour factoriser un nombre semi-premier de départ, qui n'admet qu'une seule solution non triviale de factorisation sous forme de différence de deux carrés, en multipliant ce nombre de départ par un nombre semi-premier dont on connait les facteurs, le nouveau nombre formé admet plusieurs solutions de factorisations sous forme de différences de carrés, et donc plus de solutions pour factoriser le nombre de départ.

Après l'idéal encore, c'est parmi les k possibilités de nombre semi-premier qu'on pourrait prendre pour multiplier le nombre de départ, c'est d'en trouver un, qui donnerait un nombre dont la factorisation sous forme de différence de carrés est facilement trouvable.

Qu'en dîtes vous ALS....?
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: 25 Mar 2015 12:09    Sujet du message: Répondre en citant

Ok ALS, bonnes vacances alors : )
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: 26 Mar 2015 14:44    Sujet du message: Piste pour la factorisation Répondre en citant

(suite)

Quelques graphiques avec p =15 ; p=247 ; p= 351163 avec Geogébra qui prend en compte vraisemblablement la fonction partie entière "floor".

https://scontent-ams.xx.fbcdn.net/hphotos-xpf1/v/t1.0-9/10983353_1579311969015805_3229467080449781735_n.jpg?oh=2b90bc610c005112dd5765aa912f1c45&oe=5579BBE6


https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-xap1/v/t1.0-9/11080974_1579311975682471_5940693291284833387_n.jpg?oh=2c22d0050cc3101d2b860201db325318&oe=5570D0D9&__gda__=1437829344_8dbdbc0b7a5ad459d5b70b808805dd16


https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xap1/v/t1.0-9/s720x720/11081159_1579311972349138_8878749008915126391_n.jpg?oh=551aa0b5e230898d5b9d71f8a4bd3009&oe=55766D69&__gda__=1438404689_2d3d64c4c9a48a63feb7e7cff2fefd2e
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: 30 Mar 2015 8:06    Sujet du message: Répondre en citant

Bonjour,
Avec Maple, on obtient un résultat analogue en augmentant le nombre de points à traiter sur la courbe et en prenant l'option pour les fonctions discontinues (ici pour p=247):

Code:

> restart:

>  f:= ( floor(sqrt(247*x))+1)^2 - 247*x - y^2;
 
>  s:=solve(f,{y});
 
>  with(plots): plot({rhs(op(s[1])),rhs(op(s[2]))},x=0..50,numpoints=5000,discont=true);



A plus tard.
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: 30 Mar 2015 11:04    Sujet du message: Répondre en citant

Bonjour ALS,

Il me tardait de vous revoir : )
J'espère que vous avez passé de bonnes vacances : )
Je vais essayer votre séquence.
Alors sur Geogebra, on arrive à avoir rapidement, les solutions de l'équation qui donnent des nombres entiers mais ce qui est dommage c'est que Géogébra ne gère pas les "grands nombres", et n'a qu'une précision à peu près à 17 digits.

Avec Maple, j'arrive à tracer la courbe pour les "grands nombres" mais je ne sais pas comment demander à Maple de trouver un point de la courbe qui a des coordonnées entières.

La question que je me pose, ne pourrait-on pas juste à partir de l'équation, sans donc tracer de courbe, avoir un ou des points ayant des coordonnées entières...? ( Dérivés...? Primitives..? Corps des nombres entiers..? etc...?)

Sinon, je pense que l'idée est intéressante de multiplier les nombres de départ, afin de les factoriser plus facilement...
Tous les nombres que je peux manipuler sur Geogebra, car "petit" et moins de 15 digits ( 88447 ; 351163 ; 5686913 ; 2537 ; etc etc... ) montrent qu'il y à une infinité de "k" qui permettent de factoriser un "p" de départ avec ( floor(sqrt(p*k))+1)²

Comment pourrait-on faire ALS...?
Je sens qu'on y est presque...
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: 30 Mar 2015 11:28    Sujet du message: Répondre en citant

Re-bonjour ALS,

J'ai tracé la courbe avec votre séquence, mais j'arrive pas à interpréter le graphique...? ( Peut-on voir dessus les points de la courbe ayant des coordonnées entières ..? )

P.S.: J'ai oublié de vous demander ; la séquence suivante, permet de tester des "k" et de renvoyer les "y" entiers, mais comment faire pour savoir quel "k" a conduit à un "y" entier ..?

Maple :

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

restart;
f := proc (x, p) options operator, arrow; sqrt(floor(sqrt(p*x))^2+2*floor(sqrt(p*x))-p*x+1) end proc;
a := seq(k, k = 1 .. 10):
e := seq(f(i, 77), i = a):
l := select(proc (x) options operator, arrow; type(x, integer) end proc, [e]);

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

Là, on a donc les résultats des "y" entiers pour des "k" entre 1 et 10, mais comment paramétrer la séquence, pour qu'elle donne les résultats sous forme de couple (k,y) entiers, afin de savoir précisément quel "k" mène à tel "y".....?
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: 30 Mar 2015 14:49    Sujet du message: Répondre en citant

Les points de la courbe sous Maple sont stockés sous forme de matrices. On peut les visualiser grâce à cette petite séquence d'instructions:

Code:

> y:=(floor(247^(1/2)*x^(1/2))^2+2*floor(247^(1/2)*x^(1/2))-247*x+1)^(1/2);
> with(plots):
> obj:=plot(y,x=0..50,discont=true):
> for k to nops(op(1,obj)) do evalm(op(k,op(1,obj))) od;


Donc dans la mesure où le pas entre 2 abscisses consécutives n'est pas entier, il est difficile de récupérer des coordonnées entières de points par cette méthode.
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: 30 Mar 2015 16:17    Sujet du message: Répondre en citant

Bonjour ALS,

Elle est excellente la séquence : )
Mais étrangement, alors que pour la valeur 3 par exemple on a f(3)=5 ; on ne voit pas la valeur 3 dans la matrice...?? ( mais on voit des valeurs comme 2.999885... )

f(x):=sqrt((floor(sqrt(77) sqrt(x)))^2+2 floor(sqrt(77) sqrt(x))-77 x+1):

Mais dans ce cas ALS, ne pourrait-on fixer que les points d’abscisse entiers....?
Au lieu d'avoir des points d’abscisse tels que A(0.0002112 , B(0.00002113 etc....?
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: 31 Mar 2015 7:02    Sujet du message: Répondre en citant

Bonjour,
Plus besoin de courbe, si je crée une liste de points [x,y], avec x entier.
Ensuite je parcours cette liste pour savoir parmi ces points sont ceux à deux coordonnées entières.

Code:

> y:=(floor(247^(1/2)*x^(1/2))^2+2*floor(247^(1/2)*x^(1/2))-247*x+1)^(1/2);
> L:=seq([k,evalf(subs(x=k,y))],k=0..100):
> S:=NULL:
> for k in L do
>  if k[2]=floor(k[2]) then S:=S,[k[1],floor(k[2])] fi
> od:
> S;

                  1/2  1/2 2              1/2  1/2              1/2
   y := (floor(247    x   )  + 2 floor(247    x   ) - 247 x + 1)


  [0, 1], [1, 3], [4, 6], [8, 7], [9, 9], [15, 4], [24, 1], [35, 2],

        [45, 11], [48, 5], [60, 8], [63, 8], [77, 5], [80, 11],

        [96, 2], [99, 14]

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: 31 Mar 2015 9:09    Sujet du message: Répondre en citant

Bonjour ALS,

Merci pour la séquence, qui est très pratique pour certains nombres.
Mais d'un autre côté, il y à un petit hic quelque part, puisque pour d'autres nombres, la séquence arrondit les résultats, et ressort des valeurs fausses.

Par exemple pour le nombre semi-premier 105312799.

Pour ce nombre la séquence renvoie des faux résultats qui ont été arrondis,( avec k de 1 à 1000 par exemple ) :

[282, 330], [770, 500]

et ne donne pas les résultats corrects, alors que dans cet exemple, ni 282 ni 770 ne sont solutions mais le multiplicateur 783 est une solution....?
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
Aller à la page 1, 2, 3  Suivante
Page 1 sur 3

 
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.