代入は 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 をかぶせた方が良いこともあるでしょう。もちろん、こういう場合にはグレブナ基底で扱うこともできるわけですが、 わざわざそこまでしなくても、という時には便利ですね。