Polynômes réduits modulo
Modérateur : xcasadmin
-
- Messages : 6
- Inscription : mer. avr. 22, 2015 2:45 pm
Polynômes réduits modulo
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.
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.
Re: Polynômes réduits modulo
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)
}:;
-
- Messages : 6
- Inscription : mer. avr. 22, 2015 2:45 pm
Re: Polynômes réduits modulo
Merci, mais si je fais suivre ce programme de la commandealb 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) }:;
seq([n,Polynomes(n)],n,3,7)
je reçois "NaN". Faut-il une autre commande ?
C.
Re: Polynômes réduits modulo
tu gagnerais du temps en installant Xcas.
Re: Polynômes réduits modulo
sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde
-
- Messages : 6
- Inscription : mer. avr. 22, 2015 2:45 pm
Re: Polynômes réduits modulo
Bon, Xcas en ligne, c'était trop beau, semble-t-il...alb a écrit :sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde
C.
Re: Polynômes réduits modulo
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)
}:;
-
- Messages : 6
- Inscription : mer. avr. 22, 2015 2:45 pm
Re: Polynômes réduits modulo
Merci beaucoup !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) }:;
C.
Re: Polynômes réduits modulo
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.
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.
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;
}:;
http://www-fourier.ujf-grenoble.fr/~par ... casfr.html
Chez moi, Polynomes(10) renvoie la liste en environ 1/10eme de seconde.
Re: Polynômes réduits modulo
en principe oui.
Du coup je ne comprends pas cette difference:
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)
Re: Polynômes réduits modulo
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.
Re: Polynômes réduits modulo
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