Polynomial / PolynomialFactorization
(1変数多項式環クラス)
1変数の多項式環を表現します。実際のクラスを生成するには環を指定して、クラスメソッド Polynomial.create あるいは関数 Polynomial を用います。
Polynomial(ring [, obj0 , obj1 [, ...]])
Polynomial.create(ring, obj0[, obj1 [, ...]]) に同じ。
Polynomial.create(ring, obj0[, obj1[, ...]])
ring で表現されるクラスを係数環とする多項式環クラスを 生成します。
obj0, obj1, ...
で指定されたオブジェクトが変数を
表現し、これが複数ならば、再帰的に多項式環上の多項
式環を生成します。
このメソッドの戻り値は Polynomial クラスのサブクラス です。このサブクラスにはクラスメソッドとして ground と var、vars が定義され、それぞれ、係数環 ring、 主変数オブジェクト(最後に指定された変数)、全ての変数オ ブジェクトを返します。
オブジェクトobj0, obj1, ...
は変数の名(to_sの値)
に利用されるだけです。
例: 整数を係数とする多項式環の生成
require "polynomial" P = Polynomial.create(Integer, "x") x = P.var p((x + 1)**100) #=> x^100 + 100x^99 + ... + 100x + 1 p P.ground #=> integer
例: 整数を係数とする複数変数多項式環の生成
require "polynomial" P = Polynomial.create(Integer, "x", "y", "z") x, y, z = P.vars p((-x + y + z)*(x + y - z)*(x - y + z)) #=> -z^3 + (y + x)z^2 + (y^2 - 2xy + x^2)z - y^3 + xy^2 + x^2y - x^3 p P.var #=> z
この例の P
は
Polynomial.create( Polynomial.create( Polynomial.create( Integer, "x"), "y"), "z")
と同値で、最後の変数 z が主変数となります。
Polynomial.var
多項式環の変数(主変数)を返します。
Polynomial.vars
再帰的に各多項式環の変数を集めた配列を返します。
Polynomial.mvar
Polynomial.vars と同じです。
Polynomial.variable
変数(主変数)を表現するオブジェクトを返します。
Polynomial.variables
再帰的に各多項式環の変数を表現するオブジェクトを 集めた配列を返します。
Polynomial.indeterminate(obj)
obj で表現される変数を再帰的に探して返します。
Polynomial.monomial([n])
n 次の単項式を返します。
例:
P = Polynomial(Integer, "x") P.monomial(3) #=> x^3
Polynomial.const(c)
値 c の定数項を返します。
例:
P = Polynomial(Integer, "x") P.const(3) #=> 3 P.const(3).type #=> P
Polynomial.zero
零元を返します。
Polynomial.unity
単位元を返します。
var
Polynomial.var と同じです。
variable
Polynomial.variable と同じです。
each(&b)
各次の係数を昇冪順に繰り返します。
例:
P = Polynomial(Integer, "x") x = P.var (x**3 + 2*x**2 + 4).each do |c| p c #=> 4, 0, 2, 1 end
reverse_each(&b)
各次の係数を降冪順に繰り返します。
例:
P = Polynomial(Integer, "x") x = P.var (x**3 + 2*x**2 + 4).reverse_each do |c| p c #=> 1, 2, 0, 4 end
[n]
n 次の係数を返します。
[n] = v
n 次の係数をvに設定します。
monomial
Polynomial.monomial と同じです。
monomial?
単項式であるとき真を返します。
zero?
零元であるとき真を返します。
zero
零元を返します。
unity
単位元を返します。
==(other)
等しいとき真を返します。
<=>(other)
大小関係を求めます。
+(other)
和を計算します。
-(other)
差を計算します。
*(other)
積を計算します。
**(n)
n 乗を計算します。
/(other)
商を計算します。divと同じです。
divmod(other)
other で割った商と余りの配列を返します。
div(other)
other で割った商を返します。divmod(other).first
と一致します。
%(other)
other で割った余りを返します。divmod(other).last
と一致します。
divide?(other)
other で割り切れるとき真を返します。
divmod(other).last == zero?
と一致します。
deg
次数を返します。
例:
P = Polynomial(Integer, "x") x = P.var (5*x**3 + 2*x + 1).deg #=> 3
lc
先頭係数(leading coeffcient)を返します。
例:
(5*x**3 + 2*x + 1).lc #=> 5
lm
先頭単項式(leading monomial)を返します。
例:
(5*x**3 + 2*x + 1).lm #=> x**3
lt
先頭項(leading term)を返します。lc * lm
と等しい値を持ちます。
例:
(5*x**3 + 2*x + 1).lt #=> 5*x**3
rt
残余項(rest term)を返します。self - lt
と等しい値を持ちます。
例:
(5*x**3 + 2*x + 1).rt #=> 2*x + 1
monic
最高次係数を1に直した式を返します。self / lc
と同じ値を持
ちます。
cont
係因数(content(全ての係数の最大公約数))を返します。
pp
原始的部分(primitive part)を返します。self / cont
と
同じ値を持ちます。
to_s
文字列表現を得ます。表示形式を変えるには display_type を用います。 display_type に与えられる値は :norm(デフォルト), :code です。
例:
P = Polynomial(Integer, "x") x = P.var p 5*x**3 + 2*x + 1 #=>5x^3 + 2x + 1 P.display_type = :code p 5*x**3 + 2*x + 1 #=> 5*x**3 + 2*x + 1
derivate
微分した値を返します。
例:
(5*x**3 + 2*x + 1).derivate #=> 15*x**2 + 2
sylvester_matrix(other)
other とのシルベスター行列を返します。予め
require "matrix"
しておく必要があります。
resultant(other)
other との集結式返します。予め
require "matrix"
しておく必要があります。
project(ring[, obj]){|c, n| ... }
各次 n の係数 c に関して ... を評価し、その値を
c*x**n
の値に置き換え ring 上で和を取った値を
返します。obj が省略されると ring.var
が用いら
れます。
例:
require "polynomial" require "rational" P = Polynomial(Integer, "x") PQ = Polynomial(Rational, "y") x = P.var f = 5*x**3 + 2*x + 1 p f.evaluate(-1) #=> -6 p f.convert_to(PQ) #=> 5y^3 + 2y + 1 p f.project(PQ) {|c, n| Rational(c) / (n + 1)} #=> 5/4y^3 + y + 1
evaluate(obj)
変数に obj を代入した値を返します。
project(ground, obj){|c, n| c}
の値と一致します。
convert_to(ring)
各項をring上で評価します。 project(ring){|c, n| c}
の
値と一致します。
(因数分解モジュール)
因数分解をするためのモジュールです。
polynomial-factor.rb
sqfree
無平方化します。
sqfree?
無平方なら真を返します。
irreducible?
既約なら真を返します。
factorize
因数分解します。
因数分解可能な係数環は
です。