next up previous
Next: GNU Free Documentation License Up: dirty tricks Previous: dirty tricks

Dom::Polynomialや Dom::DistributedPolynomial に代入する。(expr)

(注意:この小節は土基が未熟だったため書かれたもので、 expr を使えば dirty trick ではなく扱えます。)

代入は subs で大丈夫と思っていたら、どういうわけか Dom::Polynomial などでは全くうまくいきません。

p:=3:
Zp:=Dom::IntegerMod(p):   
VARS:=[X,Y,t,u]:    //変数
POLY:=Dom::DistributedPolynomial(VARS,Zp): // POLY=(Z/pZ)[X,Y]
subs(POLY(X),X=t);   // X に t を代入したい

                                (1 mod 3) X   
//うーん。うまくいかない。

subs(collect(POLY(X),VARS),X=t);      //一旦 collect をかます。

                                     t

//うまくいった。
//場合によっては結果にもう一度 POLY をかぶせた方が良いこともあるでしょう。

...と思っていたのですが、このワザは新バージョンのmupad では できなくなってました。 というか、expr というのがあったんですね。 というわけで、正解は「 expr をつかいましょう。」でした。 kenpei さまのページにはちゃんと書いてありました。 さすが。

p:=3:
Zp:=Dom::IntegerMod(p):   
VARS:=[X,Y,t,u]:    //変数
POLY:=Dom::DistributedPolynomial(VARS,Zp): // POLY=(Z/pZ)[X,Y]
subs(POLY(X),X=t);   // X に t を代入したい

                                (1 mod 3) X   
//うーん。うまくいかない。

subs(expr(POLY(X)),X=t);      //一旦 expr をかます。

                                     t

//うまくいった。
//場合によっては結果にもう一度 POLY をかぶせた方が良いこともあるでしょう。
もちろん、こういう場合にはグレブナ基底で扱うこともできるわけですが、 わざわざそこまでしなくても、という時には便利ですね。



2008-11-15