Risa/Asirを用いて連立方程式の数値近似解を求めたい.
今回はグレブナー基底を用いて計算する方法を紹介する.
以下,Asirのコードである.
import("names.rr");
F=[x^2+y^2-4,x*y-1]; // この連立方程式の数値近似解を求めたい.
G=nd_gr(F,[x,y],0,2); // 2 は lexicographic order
Roots=pari(roots,G[0]); // G[0] は y の一変数方程式
Roots=map(deval,Roots); // 精度は double で.
for (I=0; I<length(Roots); I++) {
Xf=base_replace(G[1],[[y,Roots[I]]]); // Xf が x の一次式となる場合専用
printf("(x,y)=(%a, %a), error=%a¥n",X=-coef(Xf,0,x)/coef(Xf,1,x),Y=Roots[I],base_replace(F,[[x,X],[y,Y]]));
}
Risa/Asirについての仕様については, Risa/Asir を参照されたい.