69Fermer71
PolluxLe 19/05/2008 à 19:06
PpHd (./69) :
Pollux (./66) :
Ben non, puisque si y a des variables dont je connais pas la valeur elles vont être réévaluées dans Z/pZ et ça donnera n'importe quoi.

Ca donnera exactement ce à quoi s'attendre. Le n'importe quoi c'est d'écrire mod((x+1)/2,2) et de penser que ca va faire ce que je veux sans savoir ce que ca fait. Ce que tu veux, c'est évaluer (x+1)/2 dans Z, puis évaluer ce résultat mod 2. Pas évaluer (x+1)/2 mod 2 !

Ben on est d'accord, c'est juste ton conseil de lancer d'abord une évaluation dans Z puis une évaluation dans Z/2Z qui est foireux : si x était une valeur numérique ça va faire ce qu'on veut, si x ne l'était pas ça va foirer comme tu le soulignes.
Pollux (./66) :
Ca veut aussi dire que eval o subs(deux,2) o eval o subs(2,deux) n'est pas du tout équivalent à eval, ce qui est un peu bizarre parce que le but d'un CAS c'est de permettre des généralisations en remplaçant une valeur particulière par un symbole.

Tu peux donner un exemple concret.. De préférence en utilisant l'API MAYLIB. Le but d'un CAS est de faire des calculs algébriques, pas de faire autre chose.

// mettre la somme de x^0 à x^(n-1) dans p (a priori l'expand() ne fait rien puisque n est pas connu, mais bon)
expand((x^n-1)/(x-1)) -> p

mod(subs(n,42,p),x-1,x) = 42 top
subs(n,42,mod(p,x-1,x)) = polynôme en NAN sad
subs(un,1,subs(n,42,mod(p,x-un,x))) = 42 top

Comment est-ce que je peux me débrouiller pour que p soit vu comme un polynôme et pas comme une fraction rationnelle sans pour autant remplacer n par une constante ?
(c'est encore pire si tu tapes même pas la fraction toi-même et que le CAS remplace sum(x^i,i,0,n-1) par (x^n-1)/(x-1) : il y a un mismatch entre le CAS qui a fait ce remplacement en considérant que le résultat était un polynôme [c'est effectivement un polynôme, même s'il n'en a pas la forme] et mod() qui dit le contraire et que comme ça ressemble pas à un polynôme c'est que c'est une vilaine fraction rationnelle qui doit renvoyer NAN)
Pollux (./66) :
Bref, faire une première évaluation dans C est un peu un hack puisque MAY ne se souviendra plus du contexte de cette évaluation et réinterprétera l'expression dans Z/2Z.

Qui t'empêche de faire une évaluation dans Z/2Z de suite ?

Personne, je conteste juste "Ben si tu évalues d'abord dans C, puis dans Z/pZ, tu obtiens ce que tu as voulu." : tu ne peux pas obtenir ce que je veux même avec deux évaluations (sauf si tu manipules exclusivement des valeurs numériques).