Polynômes réduits modulo

Utilisation de Xcas pour Firefox et les navigateurs compatibles

Modérateur : xcasadmin

Répondre
cassepieds
Messages : 6
Inscription : mer. avr. 22, 2015 2:45 pm

Polynômes réduits modulo

Message par cassepieds » jeu. avr. 23, 2015 9:13 am

Bonjour.
Sur le fil "Problèmes avec les polynômes", alb m'a indiqué ce programme pour calculer certains polynômes définis par récurrence :

Polynomes(n):={
local P,k;
P:=1;
pour k de 3 jusque n faire
P:=diff(P*(x^2+x));
fpour
retourne normal(P)
}:;

à faire suivre de la commande :
seq([n,Polynomes(n)],n,3,7)

(J'ai changé la numérotation des polynômes.)

Cela marche comme souhaité. Cependant, quand je calculerai ainsi certains polynômes définis par récurrence, je n'aurai besoin de connaître leurs coefficients que modulo un certain nombre premier. Comme ces coefficients, non réduits modulo, deviennent vite astronomiques, je suppose que je ferai gagner du temps et de la mémoire au programme en lui faisant faire tous les calculs modulo ce nombre premier.

En ligne de commande, ceci réussit :

P:=x%11
1%11x

normal(P*((x^2+x)%11) )
1%11x3+1%11x2

mais le programme suivant, où j'ai simplement essayé de remplacer les polynômes par leurs réduits modulo 11 dans le programme d'alb ci-dessus, ne réussit pas :

Polynomes(n):={
local P,k;
P:=1%11;
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
fpour
retourne normal(P)
}:;

Si après ce programme (qui renvoie "Done"), on tape la commande

seq([n,Polynomes(n)],n,3,7)

on reçoit une liste de polynômes dont les coefficients sont écrits sous forme décimale et ne correspondent pas aux valeurs attendues.

Ce programme-ci ne réussit pas non plus, il donne le même résultat :

Polynomes(n):={
local P,k;
P:=1%11;
pour k de 3 jusque n faire
P:=diff(P*(1%11 x^2 + 1%11 x));
fpour
retourne normal(P)
}:;

Quelqu'un peut-il m'aider ? Merci d'avance.
C.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 9:41 am

la reponse est dans l'aide detaillee de Xcas

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;

cassepieds
Messages : 6
Inscription : mer. avr. 22, 2015 2:45 pm

Re: Polynômes réduits modulo

Message par cassepieds » jeu. avr. 23, 2015 10:10 am

alb a écrit :la reponse est dans l'aide detaillee de Xcas

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;
Merci, mais si je fais suivre ce programme de la commande
seq([n,Polynomes(n)],n,3,7)
je reçois "NaN". Faut-il une autre commande ?
C.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 10:16 am

tu gagnerais du temps en installant Xcas.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 10:18 am

sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde

cassepieds
Messages : 6
Inscription : mer. avr. 22, 2015 2:45 pm

Re: Polynômes réduits modulo

Message par cassepieds » jeu. avr. 23, 2015 10:22 am

alb a écrit :sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde
Bon, Xcas en ligne, c'était trop beau, semble-t-il...
C.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 12:04 pm

sur Xcas en ligne:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,temp;
  P:=1;
  pour k de 3 jusque n faire
    temp:=diff(P*(x^2+x));
    P:=irem(symb2poly(temp),11);
    P:=poly2symb(P);
  fpour
  retourne normal(P)
}:;

cassepieds
Messages : 6
Inscription : mer. avr. 22, 2015 2:45 pm

Re: Polynômes réduits modulo

Message par cassepieds » jeu. avr. 23, 2015 1:35 pm

alb a écrit :sur Xcas en ligne:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,temp;
  P:=1;
  pour k de 3 jusque n faire
    temp:=diff(P*(x^2+x));
    P:=irem(symb2poly(temp),11);
    P:=poly2symb(P);
  fpour
  retourne normal(P)
}:;
Merci beaucoup !
C.

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

Re: Polynômes réduits modulo

Message par parisse » jeu. avr. 23, 2015 1:36 pm

seq([n,Polynomes(n)],n,3,7) % 0 marche plutot bien.
Ceci dit il vaudrait mieux modifier Polynomes(n) pour renvoyer directement la liste de listes souhaitee, car sinon on recalcule plusieurs fois les premiers polynomes.

Code : Tout sélectionner

Polynomes(n):={
local P,k,l;
P:=1%11;
l:=[[2,P % 0]];
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
l:=append(l,[k,P % 0]);
fpour
return l;
}:;
Pour utiliser Xcas sur le web sans perdre trop en vitesse, vous pouvez utiliser le lien suivant
http://www-fourier.ujf-grenoble.fr/~par ... casfr.html
Chez moi, Polynomes(10) renvoie la liste en environ 1/10eme de seconde.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 3:19 pm

en principe oui.
Du coup je ne comprends pas cette difference:

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;
seq([n,Polynomes(n)],n,3,200) // en 4.24 s

Code : Tout sélectionner

Polynomes(n):={
local P,k,l;
P:=1%11;
l:=[[2,P % 0]];
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
l:=append(l,[k,P % 0]);
fpour
return l;
}:;
Polynomes(12) // en 5.93 s  et impossible d'avoir Polynomes(20)

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

Re: Polynômes réduits modulo

Message par parisse » jeu. avr. 23, 2015 5:34 pm

Dans le 2ème cas, le polynome P n'est pas normalisé dans la boucle, il reste sous forme d'un produit de plus en plus compliqué à dériver, alors que P % 0 force la normalisation.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Polynômes réduits modulo

Message par alb » jeu. avr. 23, 2015 7:41 pm

d'accord, on peut donc faire:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,l;
  P:=1%11;
  l:=[[2,P % 0]];
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
    l:=append(l,[k,P]);
  fpour
  return l;
}:;
Polynomes(100) // affiche en 0.024 s
Polynomes(5000):; // realise en moins de 3 s

Répondre