algebra 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +53 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/Gemfile +7 -0
  6. data/Gemfile.lock +28 -0
  7. data/LICENSE.txt +21 -0
  8. data/README-ja.txt +60 -0
  9. data/README.md +61 -0
  10. data/Rakefile +43 -0
  11. data/algebra.gemspec +33 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/doc-ja/README-ja.html +69 -0
  15. data/doc-ja/README-ja.rd +60 -0
  16. data/doc-ja/README.html +0 -0
  17. data/doc-ja/README.rd +0 -0
  18. data/doc-ja/algebra-ja.html +66 -0
  19. data/doc-ja/algebra-ja.rd +60 -0
  20. data/doc-ja/algebraic-equation-ja.html +36 -0
  21. data/doc-ja/algebraic-equation-ja.rd +26 -0
  22. data/doc-ja/algebraic-extension-field-ja.html +122 -0
  23. data/doc-ja/algebraic-extension-field-ja.rd +118 -0
  24. data/doc-ja/algebraic-parser-ja.html +87 -0
  25. data/doc-ja/algebraic-parser-ja.rd +95 -0
  26. data/doc-ja/changes.html +161 -0
  27. data/doc-ja/changes.rd +119 -0
  28. data/doc-ja/elementary-divisor-ja.html +56 -0
  29. data/doc-ja/elementary-divisor-ja.rd +45 -0
  30. data/doc-ja/euclidian-ring-ja.html +78 -0
  31. data/doc-ja/euclidian-ring-ja.rd +69 -0
  32. data/doc-ja/finite-group-ja.html +285 -0
  33. data/doc-ja/finite-group-ja.rd +276 -0
  34. data/doc-ja/finite-map-ja.html +224 -0
  35. data/doc-ja/finite-map-ja.rd +227 -0
  36. data/doc-ja/finite-set-ja.html +393 -0
  37. data/doc-ja/finite-set-ja.rd +408 -0
  38. data/doc-ja/index-ja.html +113 -0
  39. data/doc-ja/index-ja.rd +112 -0
  40. data/doc-ja/jordan-form-ja.html +106 -0
  41. data/doc-ja/jordan-form-ja.rd +99 -0
  42. data/doc-ja/localized-ring-ja.html +121 -0
  43. data/doc-ja/localized-ring-ja.rd +131 -0
  44. data/doc-ja/m-polynomial-ja.html +542 -0
  45. data/doc-ja/m-polynomial-ja.rd +596 -0
  46. data/doc-ja/matrix-algebra-ja.html +686 -0
  47. data/doc-ja/matrix-algebra-ja.rd +727 -0
  48. data/doc-ja/matrix-algebra-triplet-ja.html +124 -0
  49. data/doc-ja/matrix-algebra-triplet-ja.rd +129 -0
  50. data/doc-ja/permutation-group-ja.html +159 -0
  51. data/doc-ja/permutation-group-ja.rd +151 -0
  52. data/doc-ja/polynomial-converter-ja.html +64 -0
  53. data/doc-ja/polynomial-converter-ja.rd +54 -0
  54. data/doc-ja/polynomial-ja.html +446 -0
  55. data/doc-ja/polynomial-ja.rd +473 -0
  56. data/doc-ja/residue-class-ring-ja.html +112 -0
  57. data/doc-ja/residue-class-ring-ja.rd +113 -0
  58. data/doc-ja/sample-algebraic-equation01.rb.v.rd +11 -0
  59. data/doc-ja/sample-algebraic-equation02.rb.v.rd +11 -0
  60. data/doc-ja/sample-algebraic-root01.rb.v.rd +20 -0
  61. data/doc-ja/sample-algebraicfield01.rb.v.rd +26 -0
  62. data/doc-ja/sample-algebraicfield02.rb.v.rd +15 -0
  63. data/doc-ja/sample-cayleyhamilton01.rb.v.rd +14 -0
  64. data/doc-ja/sample-diagonalization01.rb.v.rd +48 -0
  65. data/doc-ja/sample-divmod01.rb.v.rd +17 -0
  66. data/doc-ja/sample-elementary-divisor01.rb.v.rd +48 -0
  67. data/doc-ja/sample-factorize01.rb.v.rd +11 -0
  68. data/doc-ja/sample-factorize02.rb.v.rd +13 -0
  69. data/doc-ja/sample-factorize03.rb.v.rd +14 -0
  70. data/doc-ja/sample-factorize04.rb.v.rd +14 -0
  71. data/doc-ja/sample-factorize05.rb.v.rd +53 -0
  72. data/doc-ja/sample-galois-group01.rb.v.rd +27 -0
  73. data/doc-ja/sample-gaussian-elimination01.rb.v.rd +19 -0
  74. data/doc-ja/sample-geometry01.rb.v.rd +33 -0
  75. data/doc-ja/sample-geometry02.rb.v.rd +34 -0
  76. data/doc-ja/sample-geometry03.rb.v.rd +45 -0
  77. data/doc-ja/sample-geometry04.rb.v.rd +33 -0
  78. data/doc-ja/sample-geometry07.rb.v.rd +62 -0
  79. data/doc-ja/sample-groebner01.rb.v.rd +13 -0
  80. data/doc-ja/sample-groebner02.rb.v.rd +18 -0
  81. data/doc-ja/sample-groebner03.rb.v.rd +19 -0
  82. data/doc-ja/sample-group01.rb.v.rd +21 -0
  83. data/doc-ja/sample-jordan-form01.rb.v.rd +56 -0
  84. data/doc-ja/sample-jordanform01.rb.v.rd +55 -0
  85. data/doc-ja/sample-lagrange-multiplier01.rb.v.rd +35 -0
  86. data/doc-ja/sample-m-factorize01.rb.v.rd +15 -0
  87. data/doc-ja/sample-m-factorize02.rb.v.rd +12 -0
  88. data/doc-ja/sample-m-polynomial01.rb.v.rd +10 -0
  89. data/doc-ja/sample-map01.rb.v.rd +9 -0
  90. data/doc-ja/sample-polynomial01.rb.v.rd +9 -0
  91. data/doc-ja/sample-polynomial02.rb.v.rd +11 -0
  92. data/doc-ja/sample-primefield01.rb.v.rd +13 -0
  93. data/doc-ja/sample-quotientfield01.rb.v.rd +11 -0
  94. data/doc-ja/sample-quotientfield02.rb.v.rd +18 -0
  95. data/doc-ja/sample-quotientfield03.rb.v.rd +16 -0
  96. data/doc-ja/sample-quotientfield04.rb.v.rd +16 -0
  97. data/doc-ja/sample-set01.rb.v.rd +18 -0
  98. data/doc-ja/sample-splitting-field01.rb.v.rd +19 -0
  99. data/doc-ja/samples-ja.html +885 -0
  100. data/doc-ja/samples-ja.rd +221 -0
  101. data/doc-ja/style.css +85 -0
  102. data/doc-ja/todo.html +20 -0
  103. data/doc-ja/todo.rd +9 -0
  104. data/lib/algebra.rb +36 -0
  105. data/lib/algebra/algebraic-equation.rb +56 -0
  106. data/lib/algebra/algebraic-extension-field.rb +135 -0
  107. data/lib/algebra/algebraic-parser.rb +160 -0
  108. data/lib/algebra/algebraic-system.rb +224 -0
  109. data/lib/algebra/annihilate.rb +52 -0
  110. data/lib/algebra/array-supplement.rb +53 -0
  111. data/lib/algebra/auto-require.rb +84 -0
  112. data/lib/algebra/chinese-rem-th.rb +135 -0
  113. data/lib/algebra/combinatorial.rb +145 -0
  114. data/lib/algebra/elementary-divisor.rb +193 -0
  115. data/lib/algebra/euclidian-ring.rb +161 -0
  116. data/lib/algebra/factors.rb +305 -0
  117. data/lib/algebra/finite-group.rb +374 -0
  118. data/lib/algebra/finite-map.rb +201 -0
  119. data/lib/algebra/finite-set.rb +456 -0
  120. data/lib/algebra/galois-group.rb +129 -0
  121. data/lib/algebra/gaussian-elimination.rb +385 -0
  122. data/lib/algebra/groebner-basis-coeff.rb +228 -0
  123. data/lib/algebra/groebner-basis.rb +197 -0
  124. data/lib/algebra/import-module-single-thread.rb +86 -0
  125. data/lib/algebra/import-module.rb +491 -0
  126. data/lib/algebra/jordan-form.rb +114 -0
  127. data/lib/algebra/linear-algebra.rb +143 -0
  128. data/lib/algebra/localized-ring.rb +294 -0
  129. data/lib/algebra/m-index.rb +282 -0
  130. data/lib/algebra/m-polynomial-factor-int.rb +186 -0
  131. data/lib/algebra/m-polynomial-factor-zp.rb +114 -0
  132. data/lib/algebra/m-polynomial-factor.rb +315 -0
  133. data/lib/algebra/m-polynomial-gcd.rb +40 -0
  134. data/lib/algebra/m-polynomial.rb +875 -0
  135. data/lib/algebra/matrix-algebra-triplet.rb +292 -0
  136. data/lib/algebra/matrix-algebra.rb +929 -0
  137. data/lib/algebra/numeric-supplement.rb +123 -0
  138. data/lib/algebra/permutation-group.rb +257 -0
  139. data/lib/algebra/polynomial-converter.rb +193 -0
  140. data/lib/algebra/polynomial-factor-alg.rb +148 -0
  141. data/lib/algebra/polynomial-factor-int.rb +252 -0
  142. data/lib/algebra/polynomial-factor-zp.rb +165 -0
  143. data/lib/algebra/polynomial-factor.rb +140 -0
  144. data/lib/algebra/polynomial.rb +592 -0
  145. data/lib/algebra/powers.rb +31 -0
  146. data/lib/algebra/prime-gen.rb +32 -0
  147. data/lib/algebra/rational.rb +81 -0
  148. data/lib/algebra/residue-class-ring.rb +219 -0
  149. data/lib/algebra/sets-system.rb +43 -0
  150. data/lib/algebra/splitting-field.rb +103 -0
  151. data/lib/algebra/version.rb +3 -0
  152. data/sample/Makefile +10 -0
  153. data/sample/do-testscripts.rb +100 -0
  154. data/sample/sample-algebraic-equation01.rb +6 -0
  155. data/sample/sample-algebraic-equation02.rb +6 -0
  156. data/sample/sample-algebraic-root01.rb +15 -0
  157. data/sample/sample-algebraicfield01.rb +21 -0
  158. data/sample/sample-algebraicfield02.rb +10 -0
  159. data/sample/sample-cayleyhamilton01.rb +9 -0
  160. data/sample/sample-diagonalization01.rb +43 -0
  161. data/sample/sample-divmod01.rb +12 -0
  162. data/sample/sample-elementary-divisor01.rb +43 -0
  163. data/sample/sample-factorize01.rb +6 -0
  164. data/sample/sample-factorize02.rb +8 -0
  165. data/sample/sample-factorize03.rb +9 -0
  166. data/sample/sample-factorize04.rb +9 -0
  167. data/sample/sample-factorize05.rb +48 -0
  168. data/sample/sample-galois-group01.rb +22 -0
  169. data/sample/sample-gaussian-elimination01.rb +14 -0
  170. data/sample/sample-geometry01.rb +28 -0
  171. data/sample/sample-geometry02.rb +29 -0
  172. data/sample/sample-geometry03.rb +40 -0
  173. data/sample/sample-geometry04.rb +28 -0
  174. data/sample/sample-geometry07.rb +58 -0
  175. data/sample/sample-groebner01.rb +8 -0
  176. data/sample/sample-groebner02.rb +13 -0
  177. data/sample/sample-groebner03.rb +14 -0
  178. data/sample/sample-group01.rb +16 -0
  179. data/sample/sample-jordan-form01.rb +51 -0
  180. data/sample/sample-lagrange-multiplier01.rb +30 -0
  181. data/sample/sample-m-factorize01.rb +10 -0
  182. data/sample/sample-m-factorize02.rb +7 -0
  183. data/sample/sample-m-polynomial01.rb +5 -0
  184. data/sample/sample-map01.rb +4 -0
  185. data/sample/sample-polynomial01.rb +4 -0
  186. data/sample/sample-polynomial02.rb +6 -0
  187. data/sample/sample-primefield01.rb +8 -0
  188. data/sample/sample-quotientfield01.rb +6 -0
  189. data/sample/sample-quotientfield02.rb +13 -0
  190. data/sample/sample-quotientfield03.rb +11 -0
  191. data/sample/sample-quotientfield04.rb +11 -0
  192. data/sample/sample-set01.rb +13 -0
  193. data/sample/sample-splitting-field01.rb +14 -0
  194. data/sample/test-00-cayley-hamilton.rb +76 -0
  195. data/sample/test-00-groebner-basis.rb +274 -0
  196. data/sample/test-00-polynomial-factor-alg.rb +89 -0
  197. data/sample/test-00.list +4 -0
  198. data/sample/time-trial.rb +65 -0
  199. metadata +373 -0
@@ -0,0 +1,473 @@
1
+ =begin
2
+ [((<index-ja|URL:index-ja.html>))]
3
+ ((<Algebra::Polynomial>))
4
+ /
5
+ ((<Algebra::PolynomialFactorization>))
6
+ /
7
+ ((<Algebra::SplittingField>))
8
+ /
9
+ ((<Algebra::Galois>))
10
+
11
+ = Algebra::Polynomial
12
+ ((*(1変数多項式環クラス)*))
13
+
14
+ 1変数の多項式環を表現します。実際のクラスを生成するには環を指定して、クラスメソッド ((<::create>)) あるいは関数 ((<Algebra.Polynomial>))() を用います。
15
+
16
+ == ファイル名:
17
+ * ((|polynomial.rb|))
18
+
19
+ == スーパークラス:
20
+
21
+ * ((|Object|))
22
+
23
+ == インクルードしているモジュール:
24
+
25
+ * ((|Enumerable|))
26
+ * ((|Comparable|))
27
+ * ((<Algebra::EuclidianRing|URL:euclidian-ring-ja.html>))
28
+ * ((<Algebra::PolynomialFactorization>))
29
+ * ((<Algebra::SplittingField>))
30
+ * ((<Algebra::Galois>))
31
+
32
+ == 関連するメソッド:
33
+
34
+ --- Algebra.Polynomial(ring [, obj0 , obj1 [, ...]])
35
+ ((<::create>))(ring, obj0[, obj1 [, ...]])> に同じ。
36
+
37
+ == クラスメソッド:
38
+
39
+ --- ::create(ring, obj0[, obj1[, ...]])
40
+ ((|ring|)) で表現されるクラスを係数環とする多項式環クラスを
41
+ 生成します。
42
+
43
+ (({obj0, obj1, ...})) で指定されたオブジェクトが変数を
44
+ 表現し、これが複数ならば、再帰的に多項式環上の多項
45
+ 式環を生成します。
46
+
47
+ このメソッドの戻り値は Polynomial クラスのサブクラス
48
+ です。このサブクラスにはクラスメソッドとして ((|ground|)) と
49
+ ((|var|))、((|vars|)) が定義され、それぞれ、係数環 ((|ring|))、
50
+ 主変数オブジェクト(最後に指定された変数)、全ての変数オ
51
+ ブジェクトを返します。
52
+
53
+ オブジェクト(({obj0, obj1, ...}))は変数の名(((|to_s|))の値)
54
+ に利用されるだけです。
55
+
56
+ 例: 整数を係数とする多項式環の生成
57
+ require "polynomial"
58
+ P = Algebra::Polynomial.create(Integer, "x")
59
+ x = P.var
60
+ p((x + 1)**100) #=> x^100 + 100x^99 + ... + 100x + 1
61
+ p P.ground #=> integer
62
+
63
+
64
+ 例: 整数を係数とする複数変数多項式環の生成
65
+ require "polynomial"
66
+ P = Algebra::Polynomial.create(Integer, "x", "y", "z")
67
+ x, y, z = P.vars
68
+ p((-x + y + z)*(x + y - z)*(x - y + z))
69
+ #=> -z^3 + (y + x)z^2 + (y^2 - 2xy + x^2)z - y^3 + xy^2 + x^2y - x^3
70
+ p P.var #=> z
71
+
72
+ この例の (({P})) は
73
+
74
+ Algebra::Polynomial.create(
75
+ Algebra::Polynomial.create(
76
+ Algebra::Polynomial.create(
77
+ Integer,
78
+ "x"),
79
+ "y"),
80
+ "z")
81
+
82
+ と同値で、最後の変数 ((|z|)) が主変数となります。
83
+
84
+ --- ::var
85
+ 多項式環の変数(主変数)を返します。
86
+
87
+ --- ::vars
88
+ 再帰的に各多項式環の変数を集めた配列を返します。
89
+
90
+ --- ::mvar
91
+ ((<::vars>)) と同じです。
92
+
93
+ --- ::to_ary
94
+ (({[self, *vars]})) を返します。
95
+
96
+ 例: 多項式環と変数を同時に定義する。
97
+ P, x, y, z = Algebra::Polynomial.create(Integer, "x", "y", "z")
98
+
99
+ --- ::variable
100
+ 変数(主変数)を表現するオブジェクトを返します。
101
+
102
+ --- ::variables
103
+ 再帰的に各多項式環の変数を表現するオブジェクトを
104
+ 集めた配列を返します。
105
+
106
+ --- ::indeterminate(obj)
107
+ ((|obj|)) で表現される変数を再帰的に探して返します。
108
+
109
+ --- ::monomial([n])
110
+ ((|n|)) 次の単項式を返します。
111
+
112
+ 例:
113
+ P = Algebra::Polynomial(Integer, "x")
114
+ P.monomial(3) #=> x^3
115
+
116
+ --- ::const(c)
117
+ 値 ((|c|)) の定数項を返します。
118
+
119
+ 例:
120
+ P = Algebra::Polynomial(Integer, "x")
121
+ P.const(3) #=> 3
122
+ P.const(3).type #=> P
123
+
124
+ --- ::zero
125
+ 零元を返します。
126
+
127
+ --- ::unity
128
+ 単位元を返します。
129
+
130
+ #--- ::euclidian?
131
+
132
+ == メソッド:
133
+
134
+ --- var
135
+ ((<::var>)) と同じです。
136
+
137
+ --- variable
138
+ ((<::variable>)) と同じです。
139
+
140
+ --- each(&b)
141
+ 各次の係数を昇冪順に繰り返します。
142
+
143
+ 例:
144
+ P = Algebra::Polynomial(Integer, "x")
145
+ x = P.var
146
+ (x**3 + 2*x**2 + 4).each do |c|
147
+ p c #=> 4, 0, 2, 1
148
+ end
149
+
150
+ --- reverse_each(&b)
151
+ 各次の係数を降冪順に繰り返します。
152
+
153
+ 例:
154
+ P = Algebra::Polynomial(Integer, "x")
155
+ x = P.var
156
+ (x**3 + 2*x**2 + 4).reverse_each do |c|
157
+ p c #=> 1, 2, 0, 4
158
+ end
159
+
160
+ --- [](n)
161
+ ((|n|)) 次の係数を返します。
162
+
163
+ --- []=(n, v)
164
+ ((|n|)) 次の係数を((|v|))に設定します。
165
+
166
+ --- monomial
167
+ ((<::monomial>)) と同じです。
168
+
169
+ --- monomial?
170
+ 単項式であるとき真を返します。
171
+
172
+ --- zero?
173
+ 零元であるとき真を返します。
174
+
175
+ --- zero
176
+ 零元を返します。
177
+
178
+ --- unity
179
+ 単位元を返します。
180
+
181
+ #--- variable=(bf)
182
+ #--- size
183
+ #--- compact!
184
+ #--- ground_div(n, d)
185
+
186
+ --- ==(other)
187
+ 等しいとき真を返します。
188
+
189
+ --- <=>(other)
190
+ 大小関係を求めます。
191
+
192
+ --- +(other)
193
+ 和を計算します。
194
+
195
+ --- -(other)
196
+ 差を計算します。
197
+
198
+ --- *(other)
199
+ 積を計算します。
200
+
201
+ --- **(n)
202
+ ((|n|)) 乗を計算します。
203
+
204
+ --- /(other)
205
+ 商を計算します。((<div>))と同じです。
206
+
207
+ --- divmod(other)
208
+ ((|other|)) で割った商と余りの配列を返します。
209
+
210
+ --- div(other)
211
+ ((|other|)) で割った商を返します。(({divmod(other).first}))
212
+ と一致します。
213
+
214
+ --- %(other)
215
+ ((|other|)) で割った余りを返します。(({divmod(other).last}))
216
+ と一致します。
217
+
218
+ --- divide?(other)
219
+ ((|other|)) で割り切れるとき真を返します。
220
+ (({divmod(other).last == zero?}))と一致します。
221
+
222
+ --- deg
223
+ 次数を返します。
224
+
225
+ 例:
226
+ P = Algebra::Polynomial(Integer, "x")
227
+ x = P.var
228
+ (5*x**3 + 2*x + 1).deg #=> 3
229
+
230
+ --- lc
231
+ 先頭係数(leading coeffcient)を返します。
232
+
233
+ 例:
234
+ (5*x**3 + 2*x + 1).lc #=> 5
235
+
236
+ --- lm
237
+ 先頭単項式(leading monomial)を返します。
238
+
239
+ 例:
240
+ (5*x**3 + 2*x + 1).lm #=> x**3
241
+
242
+ --- lt
243
+ 先頭項(leading term)を返します。(({lc * lm}))と等しい値を持ちます。
244
+
245
+ 例:
246
+ (5*x**3 + 2*x + 1).lt #=> 5*x**3
247
+
248
+ --- rt
249
+ 残余項(rest term)を返します。(({self - lt}))と等しい値を持ちます。
250
+
251
+ 例:
252
+ (5*x**3 + 2*x + 1).rt #=> 2*x + 1
253
+
254
+ --- monic
255
+ 最高次係数を1に直した式を返します。(({self / lc})) と同じ値を持
256
+ ちます。
257
+
258
+ --- cont
259
+ 係因数(content(全ての係数の最大公約数))を返します。
260
+
261
+ --- pp
262
+ 原始的部分(primitive part)を返します。(({self / cont}))と
263
+ 同じ値を持ちます。
264
+
265
+ --- to_s
266
+ 文字列表現を得ます。表示形式を変えるには ((|display_type|)) を用います。
267
+ ((|display_type|)) に与えられる値は ((|:norm|))(デフォルト), ((|:code|))
268
+ です。
269
+
270
+ 例:
271
+ P = Algebra::Polynomial(Integer, "x")
272
+ x = P.var
273
+ p 5*x**3 + 2*x + 1 #=>5x^3 + 2x + 1
274
+ P.display_type = :code
275
+ p 5*x**3 + 2*x + 1 #=> 5*x**3 + 2*x + 1
276
+
277
+ --- derivate
278
+ 微分した値を返します。
279
+
280
+ 例:
281
+ (5*x**3 + 2*x + 1).derivate #=> 15*x**2 + 2
282
+
283
+ --- sylvester_matrix(other)
284
+ ((|other|)) とのシルベスター行列を返します。
285
+
286
+ --- resultant(other)
287
+ ((|other|)) との集結式返します。予め
288
+
289
+ --- project(ring[, obj]){|c, n| ... }
290
+ 各単項式について、
291
+ 次数を ((|n|)) に、係数 ((|c|)) に代入し ... を評価したものを
292
+ その単項式の値に置き換え、((|ring|)) 上で和を取った値を
293
+ 返します。((|obj|)) が省略されると (({ring.var})) が用いら
294
+ れます。
295
+
296
+ 例:
297
+ require "polynomial"
298
+ require "rational"
299
+ P = Algebra::Polynomial(Integer, "x")
300
+ PQ = Algebra::Polynomial(Rational, "y")
301
+ x = P.var
302
+ f = 5*x**3 + 2*x + 1
303
+ p f.convert_to(PQ) #=> 5y^3 + 2y + 1
304
+ p f.project(PQ) {|c, n| Rational(c) / (n + 1)} #=> 5/4y^3 + y + 1
305
+
306
+ --- evaluate(obj)
307
+ 主変数に ((|obj|)) を代入した値を返します。
308
+ (({ project(ground, obj){|c, n| c} })) の値と一致します。
309
+
310
+ 例:
311
+ require "polynomial"
312
+ P = Algebra::Polynomial(Integer, "x")
313
+ x = P.var
314
+ f = x**3 - 3*x**2 + 1
315
+ p f.evaluate(-1) #=> -3 (in Integer)
316
+ p f.evaluate(x + 1) #=> x^3 - 3x - 1 (in P)
317
+
318
+ --- call(obj)
319
+ ((<evaluate>))と同じです。
320
+
321
+ --- sub(var, value)
322
+ 変数 ((|var|)) に ((|value|)) を代入した値を返します。
323
+
324
+ 例:
325
+ require "polynomial"
326
+ P = Algebra::Polynomial(Integer, "x", "y", "z")
327
+ x, y, z = P.vars
328
+ f = (x - y)*(y - z - 1)
329
+ p f.sub(y, z+1) #=> 0
330
+
331
+ --- convert_to(ring)
332
+ 各項を((|ring|))上で評価します。(({ project(ring){|c, n| c} }))の
333
+ 値と一致します。
334
+
335
+ = Algebra::PolynomialFactorization
336
+ ((*(因数分解モジュール)*))
337
+
338
+ 因数分解をするためのモジュールです。
339
+
340
+ == ファイル名:
341
+ ((|polynomial-factor.rb|))
342
+
343
+ == メソッド:
344
+
345
+ --- sqfree
346
+ 無平方化します。
347
+
348
+ --- sqfree?
349
+ 無平方なら真を返します。
350
+
351
+ --- irreducible?
352
+ 既約なら真を返します。
353
+
354
+ --- factorize
355
+ 因数分解します。
356
+
357
+ 因数分解可能な係数環は
358
+ * Integer
359
+ * Rational
360
+ * 素体
361
+ * 代数体(Rational 上の有限次拡大)
362
+ です。
363
+
364
+
365
+ = Algebra::SplittingField
366
+ ((*(分解体モジュール)*))
367
+
368
+ 多項式の最小分解体を求めるためのモジュール
369
+
370
+
371
+ == ファイル名:
372
+ * ((|splitting-field.rb|))
373
+
374
+
375
+ == メソッド:
376
+
377
+
378
+ --- decompose([fac0])
379
+ 自身の最小分解体を ((|field|))、拡大に要した既約多項式
380
+ の配列を ((|def_polys|))、最小分解体上で1次式の積に因数分解し
381
+ たものを ((|facts|))、多項式の根の配列を ((|roots|))、
382
+ ((|roots|)) を基礎体に添加した元が前に来るように並べ替えた
383
+ の配列を ((|proots|)) として、
384
+
385
+ [field, def_polys, facts, roots, proots]
386
+
387
+ を返します。基礎体上の因数分解 ((|fac0|)) を添えると高速化に役立ちます。
388
+ (((|facts|)) の要素と ((|fact0|)) は ((|Algebra::Factors|)) オブジェクト
389
+ 、((|field|)) は
390
+ ((<AlgebraicExtensionField|algebraic-extension-field.html>))
391
+ オブジェクトです。ただし、自身が一次因子に分解されるときは
392
+ ((<groud>)) そのものを返します。
393
+
394
+ 例:
395
+ require "algebra"
396
+ PQ = Polynomial(Rational, "x")
397
+ x = PQ.var
398
+ f = x**5 - x**4 + 2*x - 2
399
+ field, def_polys, facts, roots, proots = f.decompose
400
+ p def_polys #=> [a^4 + 2, b^2 + a^2]
401
+ p facts #=> (x - 1)(x - a)(x + a)(x - b)(x + b)
402
+ p roots #=> [1, a, -a, b, -b]
403
+ p proots #=> [a, b, 1, -a, -b]
404
+ fp = Polynomial(field, "x")
405
+ x = fp.var
406
+ facts1 = Factors.new(facts.collect{|g, n| [g.call(x), n]})
407
+ p facts1.pi == f.convert_to(fp) #=> true
408
+
409
+ --- splitting_field([fac0]))
410
+ 自身の最小分解体の情報を返します。返り値の各フィールドの値は以下
411
+ の通りです。poly_exps 以外は ((<decompose>)) の以下のものに相当します。
412
+
413
+ poly, field, roots, proots, def_polys
414
+
415
+ ただし、((|roots|))、((|proots|)) の各要素は ((|field|)) の
416
+ 要素として変換されています。
417
+
418
+ 例:
419
+ require "algebra"
420
+ PQ = Polynomial(Rational, "x")
421
+ x = PQ.var
422
+ f = x**5 - x**4 + 2*x - 2
423
+ sf = f.splitting_field
424
+ p sf.roots #=> [1, a, -a, b, -b]
425
+ p sf.proots #=> [a, b, 1, -a, -b]
426
+ p sf.def_polys #=> [a^4 + 2, b^2 + a^2]
427
+
428
+ = Algebra::Galois
429
+ ((*(ガロア群)*))
430
+
431
+ 多項式のガロア群を求めるためのモジュール
432
+
433
+ == ファイル名:
434
+ * ((|galois-group.rb|))
435
+
436
+ == インクルードしているモジュール:
437
+ * なし
438
+
439
+ == 関連するメソッド:
440
+
441
+ --- GaloisGroup.galois_group(poly)
442
+ ((<galois_group>)) と同じ
443
+
444
+ == モジュールメソッド:
445
+ * なし
446
+
447
+ == メソッド:
448
+
449
+ --- galois_group
450
+ 多項式のガロア群を返します。群は各元が
451
+ ((<PermutationGroup|permutation-group.html>)) である
452
+ ((<FiniteGroup|finite-group.html>)) オブジェクトとして表現されます。
453
+
454
+ 例:
455
+ require "rational"
456
+ require "polynomial"
457
+
458
+ P = Algebra.Polynomial(Rational, "x")
459
+ x = P.var
460
+ p( (x**3 - 3*x + 1).galois_group.to_a )
461
+ #=>[[0, 1, 2], [1, 2, 0], [2, 0, 1]]
462
+
463
+ (x**3 - x + 1).galois_group.each do |g|
464
+ p g
465
+ end
466
+ #=> [0, 1, 2]
467
+ # [1, 0, 2]
468
+ # [2, 0, 1]
469
+ # [0, 2, 1]
470
+ # [1, 2, 0]
471
+ # [2, 1, 0]
472
+
473
+ =end