Problème de factorisation ?

Utilisation de Xcas

Modérateur : xcasadmin

Répondre
buck
Messages : 6
Inscription : mar. sept. 08, 2015 9:33 pm

Problème de factorisation ?

Message par buck » mer. sept. 09, 2015 9:30 pm

Bonjour,

Je suis un grand débutant sur XCas. Je vous prie de m'excuser si la réponse à ma question est évidente.
J'ai regardé le forum, mais je n'ai pas trouvé de cas similaire.

Je cherche à factoriser le polynôme complexe suivant :
P(x):=(sqrt(2)-i*sqrt(6))*x^3-(2*sqrt(3)+2*i)*x^2+4*sqrt(2)*i*x+8
La réponse de XCas est la suivante :
http://imageshack.com/a/img661/3029/aV23u1.png
(j'ai également mis les paramètres).
La bonne réponse est (sauf erreur de calcul de ma part) :
(x-sqrt(x)*i)*(x*sqrt(sqrt(2)-sqrt(6)*i)-i*sqrt(4*sqrt(2)*i)*(x*sqrt(sqrt(2)-sqrt(6)*i)+i*sqrt(4*sqrt(2)*i)

Pourriez-vous m'aider à comprendre mon erreur dans XCas ?

Merci d'avance.

buck
Messages : 6
Inscription : mar. sept. 08, 2015 9:33 pm

Re: Problème de factorisation ?

Message par buck » jeu. sept. 10, 2015 6:15 am

Petite erreur de solution, désolé :
(x-sqrt(2)*i)*(x*sqrt(sqrt(2)-sqrt(6)*i)-i*sqrt(4*sqrt(2)*i))*(x*sqrt(sqrt(2)-sqrt(6)*i)+i*sqrt(4*sqrt(2)*i))

J'ai essayé de la développer avec XCas et en utilisant la fonction simplifier, j'arrive sur mon polynôme de départ.

J'ai donc bien un problème sur la factorisation

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: Problème de factorisation ?

Message par frederic han » jeu. sept. 10, 2015 9:42 am

Bonjour,

Le fait d'exprimer une factorisation en utilisant un rootof (ie dans votre cas un polynome en u ou u est une racine d'un polynome de degre 8) n'est a priori pas une erreur meme s'il existe une reponse par radicaux. Cette ecriture a ses avantages, par exemple pour evaluer un polynome en votre element.

En revanche ce qui me perturbe est (giac 1.2.1-7 ou 1.2.0-19):

Code : Tout sélectionner

13>> P:=(sqrt(2)-i*sqrt(6))*x^3-(2*sqrt(3)+2*i)*x^2+4*sqrt(2)*i*x+8
(sqrt(2)-(i)*sqrt(6))*x^3-(2*sqrt(3)+2*i)*x^2+4*sqrt(2)*(i)*x+8
// Time 0
14>> F:=factor(P)
rootof([[61,-66,-1873,1254,20503,-11550,-52251,6138],[1,0,-28,0,262,0,-156,0,1089]])/241842627019800576*(43622407471104*x^3+(-sqrt(2)*(43622407471104*i))*x^2+(-sqrt(3)*43622407471104*(-sqrt(3)*1/11417486601450180459569872896*(3805828867150060153189957632*i)+1))*x+rootof([[59990692608,64928932992,-1842077825280,-1233772670592,20164700134656,11363792711040,-51390924076800,-6031137087360],[1,0,-28,0,262,0,-156,0,1089]]))/(4-4*i)
// Time 0.17
15>> normal(P-F)
rootof([[-4368,1,111216,-19,-933744,175,-1258656,3725139],[1,0,-28,0,262,0,-156,0,1089]])/931392
// Time 0.04
16>> simplify(P-F)
(5544*x^3*rootof([[-26-61*i,-165+66*i,662+1873*i,4521-1254*i,-5558-20503*i,-42735+11550*i,14682+52251*i,22275-6138*i],[1,0,-28,0,262,0,-156,0,1089]])+x^2*rootof([[177408+753984*i,365904-365904*i,-5699232-20379744*i,-6952176+6952176*i,45017280+168271488*i,2561328-2561328*i,59409504+225596448*i,642161520-150386544*i],[1,0,-28,0,262,0,-156,0,1089]])+x*rootof([[-388080-388080*i,-1097712+1097712*i,13427568+13427568*i,36224496-36224496*i,-165710160-165710160*i,-345779280+345779280*i,416565072+416565072*i,178927056-178927056*i],[1,0,-28,0,262,0,-156,0,1089]])+64*rootof([[1386+1386*i,15367968-15367968*i],[1,0,-28,0,262,0,-156,0,1089]]))/245887488
approx(normal(P-F)) me semble loin d'etre nul ce qui n'est pas normal.

en revanche:

Code : Tout sélectionner

19>> F2:=factor(normal(P))
2*((-i)*sqrt(3)+1)*sqrt(2)*(x+rootof([[-2,-3,35,48,-224,-300,-12,-144],[1,0,-16,0,88,0,192,0,144]])/288)*(x+(-i)*sqrt(2))*(x+rootof([[2,3,-35,-48,224,300,12,144],[1,0,-16,0,88,0,192,0,144]])/288)/2
// Time 0.13
20>> normal(P-F2)
0

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Problème de factorisation ?

Message par parisse » jeu. sept. 10, 2015 7:44 pm

il y a clairement un probleme, et c'est marrant que faire normal avant factor fasse fonctionner, ca fournit en tout cas un bug fix si je n'ai pas le courage d'aller au fonds du bug (faut dire que ce n'est pas si simple, puisqu'on travaille sur une extension de degre 8).

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: Problème de factorisation ?

Message par frederic han » ven. sept. 11, 2015 7:56 am

C'est peut etre un probleme de polynomes unitaires:

Code : Tout sélectionner

Q:=(P/(sqrt(2)-i*sqrt(6)));
F2:=factor(Q);
normal(F2-Q)
donne bien 0.

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Problème de factorisation ?

Message par parisse » ven. sept. 11, 2015 8:18 am

J'ai un correctif, je le mettrai en ligne sans doute lundi. C'etait un nettoyage mal fait dans le calcul d'une extension algebrique commune.

buck
Messages : 6
Inscription : mar. sept. 08, 2015 9:33 pm

Re: Problème de factorisation ?

Message par buck » ven. sept. 11, 2015 8:16 pm

Bonsoir,

J'ai essayé de passer avec des radicaux (en cochant Sqrt dans la page de configuration de XCas, mais j'ai toujours une réponse assez loin de ce que je cherchais à obtenir, à savoir :
http://imageshack.com/a/img538/308/xgIbfR.png
au lieu de :
(x-sqrt(2)*i)*(x*sqrt(sqrt(2)-sqrt(6)*i)-i*sqrt(4*sqrt(2)*i))*(x*sqrt(sqrt(2)-sqrt(6)*i)+i*sqrt(4*sqrt(2)*i))

est-ce possible dans XCas ?

Merci d'avance pour votre aide

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: Problème de factorisation ?

Message par frederic han » sam. sept. 12, 2015 6:42 am

Bonjour, en resume:

Il y a 2 choses distinctes avec votre:

Code : Tout sélectionner

P(x):=(sqrt(2)-i*sqrt(6))*x^3-(2*sqrt(3)+2*i)*x^2+4*sqrt(2)*i*x+8


1) le resultat donné par factor(P(x)) ou cfactor(P(x)) est faux avec giac/xcas <= 1.2.1-7.

En revanche:

Code : Tout sélectionner

3>> factor(normal(P(x)))
2*((-i)*sqrt(3)+1)*sqrt(2)*(x+rootof([[-2,-3,35,48,-224,-300,-12,-144],[1,0,-16,0,88,0,192,0,144]])/288)*(x+(-i)*sqrt(2))*(x+rootof([[2,3,-35,-48,224,300,12,144],[1,0,-16,0,88,0,192,0,144]])/288)/2
est correct.

Code : Tout sélectionner

s1:=-rootof([[-2,-3,35,48,-224,-300,-12,-144],[1,0,-16,0,88,0,192,0,144]])/288;
s2:=i*sqrt(4*sqrt(2)*i)/sqrt(sqrt(2)-sqrt(6)*i);
simplify(s1-s2); // donne bien 0
NB: on peut rendre l'affichage d'un roofof plus joli en lui donnant un nom:

Code : Tout sélectionner

18>> rootof([1,0,-16,0,88,0,192,0,144]):='u';
u
21>> factor(normal(P(x)));
(7*u^7-118*u^5+676*u^3+1176*u)/144*(x+(-2*u^7-3*u^6+35*u^5+48*u^4-224*u^3-300*u^2-12*u-144)/288)*(x+(u^6-18*u^4+108*u^2+104)/64)*(x+(2*u^7+3*u^6-35*u^5-48*u^4+224*u^3+300*u^2+12*u+144)/288)/2
23>> approx(u,30);
3.14626436994197234232913506571+i
2) Les radicaux ne seront pas gardes pour des extensions de degre >2 et tot ou tard des rootof apparaitront puisque pour
xcas un rootof est plus simple qu'un racine de racine:

Code : Tout sélectionner

17>> simplify(sqrt(sqrt(3))+1/sqrt(2))
rootof([[10,0,-81,0,190,0,-945,0],[1,0,-8,0,18,0,-104,0,1]])/152

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Problème de factorisation ?

Message par parisse » sam. sept. 12, 2015 3:51 pm

Apres correction du bug, on obtient bien les 3 facteurs de degre 1, mais ils sont exprimes avec des rootof pour deux d'entre eux. Il serait sans doute possible d'ecrire un peu de code pour detecter que les extensions algebriques de degre 8 peuvent se reecrire avec des i et des racines imbriquees, mais d'une part il faut bien s'arreter quelque part, la limite est 4, et d'autre part ce serait moins efficace pour des calculs ulterieurs.

buck
Messages : 6
Inscription : mar. sept. 08, 2015 9:33 pm

Re: Problème de factorisation ?

Message par buck » sam. sept. 12, 2015 4:19 pm

Merci pour toutes ces réponses.

Je suis un peu bloqué avec les rootof, car ce n'est pas très clair pour reconnaître les racines.
J'ai pas mal cherché sur Internet, mais cela reste peu utilisable dans mon contexte.

Serait-il possible dans une version ultérieure de mettre la limite dont vous parlez (4) en paramètre ?

parisse
Messages : 5739
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Problème de factorisation ?

Message par parisse » sam. sept. 12, 2015 5:36 pm

Ce n'est pas un simple parametre, il faut un algorithme pour reecrire un rootof, et qui ne marchera que dans quelques cas tres particuliers.

Répondre