![]()
|
Go to the first, previous, next, last section, table of contents.
代数的数の演算前節で, 代数的数の表現, 定義について述べた. ここでは, 代数的数を用いた 演算について述べる. 代数的数に関しては, 組み込み函数として提供されている 機能はごく少数で, 大部分はユーザ定義函数により実現されている. ファイル は, `sp' で, `gr' と同様 Asir の標準ライブラリディレクトリ におかれている. [0] load("gr")$ [1] load("sp")$ あるいは, 常に用いるならば, `$HOME/.asirrc' に書いておくのもよい.
代数的数の, 定義多項式による簡単化は, [49] T=A0^2+1; (#0^2+1) [50] simpalg(T); 0
[39] A0=newalg(x^2+1); (#0) [40] T=(A0^2+A0+1)/(A0+3); ((#0^2+#0+1)/(#0+3)) [41] simpalg(T); (3/10*#0+1/10) [42] T=1/(A0^2+1); ((1)/(#0^2+1)) [43] simpalg(T); div : division by 0 stopped in invalgp at line 258 in file "/usr/local/lib/asir/sp" 258 return 1/A; (debug)
この例では, 分母が 0 の代数的数を簡単化しようとして 0 による除算が生じ
たため, ユーザ定義函数である [43] simpalg(1/A0*x+1/(A0+1)); (-#0)*x+(-1/2*#0+1/2)
代数的数を係数とする多項式の基本演算は, 適宜 [83] A0=newalg(x^2+1); (#0) [84] A1=newalg(x^3+A0*x+A0); (#1) [85] T=(2*A0+A1*A0+A1^2)*x+(1+A1)/(2+A0); (#1^2+#0*#1+2*#0)*x+((#1+1)/(#0+2)) [86] S=algptorat(T); (((t#0+2)*t#1^2+(t#0^2+2*t#0)*t#1+2*t#0^2+4*t#0)*x+t#1+1)/(t#0+2) [87] algptorat(coef(T,1)); t#1^2+t#0*t#1+2*t#0
このように,
逆に, [88] rattoalgp(S,[alg(0)]); (((#0+2)/(#0+2))*t#1^2+((#0^2+2*#0)/(#0+2))*t#1+((2*#0^2+4*#0)/(#0+2)))*x +((1)/(#0+2))*t#1+((1)/(#0+2)) [89] rattoalgp(S,[alg(0),alg(1)]); (((#0^3+6*#0^2+12*#0+8)*#1^2+(#0^4+6*#0^3+12*#0^2+8*#0)*#1+2*#0^4+12*#0^3 +24*#0^2+16*#0)/(#0^3+6*#0^2+12*#0+8))*x+(((#0+2)*#1+#0+2)/(#0^2+4*#0+4)) [90] rattoalgp(S,[alg(1),alg(0)]); (((#0+2)*#1^2+(#0^2+2*#0)*#1+2*#0^2+4*#0)/(#0+2))*x+((#1+1)/(#0+2)) [91] simpalg(@89); (#1^2+#0*#1+2*#0)*x+((-1/5*#0+2/5)*#1-1/5*#0+2/5) [92] simpalg(@90); (#1^2+#0*#1+2*#0)*x+((-1/5*#0+2/5)*#1-1/5*#0+2/5)
Go to the first, previous, next, last section, table of contents. |