Kodama's home / tips.
#!/usr/local/bin/ruby
require "polynomial"
f=Poly("(2x+1)(x^3-1)^2")
g=Poly("7x^2+6x+5")
h=Poly("3x^4")
printf "f+g*h = %s\n", (f+g*h)
fc=f.factorize
printf "%s = %s\n",f, Polynomial.factor2s(fc)
Result:
f+g*h = 2x^(7)+22x^(6)+18x^(5)+11x^(4)-2x^(3)+2x+1 2x^(7)+x^(6)-4x^(4)-2x^(3)+2x+1 = (x-1)(x-1)(2x+1)(x^(2)+x+1)(x^(2)+x+1)
展開したディレクトリが作業用のディレクトリで無い場合には, ~/.profile の中で, 展開したディレクトリを export RUBYLIB="~/lib/ruby" のようにして ruby が探せるように登録します.
+,-,*, /, % ** 四則演算
divmod(divisors) 商と余りを返す. divisors は 除数の列(Array)
divmodZp Zp 上の割算
divmodI Z上の割算
substitute({代入リスト}) "変数名"==>値 の Hash に従って代入
derivative([vars]) 配列内の変数名に対して順に偏微分を行う.
integral([vars])
変数名の Array の 先頭の変数から順に積分し原始関数を求める.
積分定数は考慮しない.
lt leading term
lc leading coefficient
lp leading power product
coeff(var,deg) var の多項式と見ての deg 次の係数多項式を返す.
maxdeg(var) var の多項式と見ての最高次数
mindeg(var) var の多項式と見ての最低次数
PolynomialM(arg)
arg に対応する多項式を生成.
"(x+2y)^3(x-y)^2" のような文字列を受け付ける.
to_s(format)
format: "text" then "5x^4+3x^2+1" (default)
"tex" "5x^{4}+3x^{2}+1"
"texm" "$5x^{4}+3x^{2}+1$"
"prog" "5*x**4+3*x**2+1"
getGBase(plist)
getGBaseZp(plist,prime)
plist be Array of PolynomialM
return Array of PolynomialM of Reduced Grobner base
over field Rational, Complex, Float or Zp(p:prime).
minimal strong Groebner bases を求める.
getGBaseI(plist)
+ - * / % ** 加算,減算, 乗算, 冪乗
divmod(poly) 除算. 商,余り の組みを返す
divmodI(poly) 商を Z[x] 上で除算. 商,余り の組みを返す
余りの次数が除数より大きい可能性もある.
divmodZp(poly,p) Zp 上での除算, pは素数とする. 商,余りの組みを返す
derivative 微分
integral 積分
substitute(x) 代入, "x" は Integer , Float, Polynomial 等
factorize Integer または Rational 係数で因数分解
countSolution(a="-infty",b="infty", countRedundancy=true)
区間 (a,b) での実数解の個数.
Polynomial.gcd(a,b,c,...) 最大公約式
Polynomial.gcd2(a,b,c,...) or gcd2([a,b,c,...])
最大公約式と 最大公約式を作る線形結合の係数
return gcd,x,y,z,.. s.t. gcd=a*x+b*y+c*z+...
Polynomial.gcdZp(prime,a,b,c,...) 上の Zp係数版
Polynomial.gcd2Zp(prime,a,b,c,...) 上の Zp係数版
zero? 0か
normalize! 高次の余分な0を削除, 低次の0を補完
degree 多項式の次数
lt 最高次の項 cx^n. leading term
lc 最高次の係数 c. leading coefficient
lp 最高次のxべき x^n. leading power product
Polynomial(arg)
arg に対応する Polynomial を返す
Polynomial([5,6,7])=5+6x+7x^2 配列から
Polynomial(5,6,7)=5+6x+7x^2 数列から
Polynomial("5+6x+7x^2")=5+6x+7x^2 文字列から
Polynomial("5+6*x+7*x**2")=5+6x+7x^2 文字列の別な形式
Polynomial("(x+1)**2(x-1)**2")=x^4-2x^2+1 文字列の別な形式
Polynomial.gen_func 又は array.to_poly
Array 型の オブジェクト array に対応する母関数を返す
各次数の係数が array で指定されていると考えれば良い.
Polynomial.exp_gen_func 指数型母関数
to_a 係数の並びからなる Array に変換 gen_func の逆
to_s(var="x",order=true,format="text")
文字列に変換
"5x^4+3x^2+1", "5x^{4}+3x^{2}+1",
"$5x^{4}+3x^{2}+1$", "5*x**4+3*x**2+1" などの書式を指定できる.
Z係数 1変数 多項式環 Z[x] の ideal の
minimal strong Grobner basis を求める.
getGBase(plist)
+,-,*,/,%,divmod substitute(x) xを代入. derivative 微分
+,-,*,/,%, divmod
substitute({代入リスト}) "変数名"==>値 の Hash に従って代入
derivative([vars]) 配列内の変数名に対して順に偏微分を行う.
Monomial.setTermOrder(t) 項の順序づけ.
Monomial.getTermOrder
t= "lex"(default), "deglex", "degrevlex"
set/get term order
Monomial.setVarOrder(order) 変数の順序づけ
Monomial.getVarOrder
Monomial.appendVarName(v)
set/get/append var. order
default: VarOrder=["x","y","z","s","t","u","v","w"]
prime?(x) 素数か?
checkDivZ?(a,b,p) (b+k*p)|a となる k はあるか? a,b,p,k,は整数.
inv(n,p) Zp での n の逆数を返す.
factorize(n) 素因数分解. return list [p1,p2,p3,...]
factor2s(factor,sep=" ") factorize で得た 素因数列を文字列に直す.
gcd(a,b,c,...) 最大公約数
gcd2(a,b,c,...) or gcd2([a,b,c,...])
最大公約数と 最大公約数を作る線形結合の係数
return gcd,x,y,z,.. s.t. gcd=a*x+b*y+c*z+...
lcm(a,b,c,...) 最小公倍数.
factorial(n) 階乗
nextPrime(n) nより大きい最小の素数.
makePrimeList(n=3) 2から 少なくとも nまでの素数表を作成.
できた表は Number::PrimeList[i] で参照できる.
i_to_notation_str(i,b) 整数を b を基数とする表現の文字列に変換
i_to_notation_array(i,b) b を基数とする数値表示の各桁の列
i_to_notation_factorial(i) 階乗基数表示での各桁の列
notation_str_to_i(str,b) bを基数として数値を表す文字列を整数に変換
notation_array_to_i(c,b) bを基数とする各桁の列から整数を作る
i=c[n]n!+c[n-1](n-1)!+...+c[2]2!+c[1]1!, c[0]=0 (i>=0)
notation_factorial_to_i(c) i_to_notation_fractal の逆
factor2s(factor,sep=" ")
factorize で得た 素因数列を文字列に直す.
Kodama's home / tips.