algebra 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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,542 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
8
+ <title>doc-ja/m-polynomial-ja.rd</title>
9
+ <link href="style.css" type="text/css" rel="stylesheet" />
10
+ </head>
11
+ <body>
12
+ <p>[<a href="index-ja.html">index-ja</a>]
13
+ <a href="#label-0">Algebra::MPolynomial</a>
14
+ /
15
+ <a href="#label-55">Algebra::MPolynomial::Monomial</a>
16
+ /
17
+ <a href="#label-62">Algebra::MPolynomialFactorization</a>
18
+ /
19
+ <a href="#label-66">Algebra::Groebner</a></p>
20
+ <h1><a name="label-0" id="label-0">Algebra::MPolynomial</a></h1><!-- RDLabel: "Algebra::MPolynomial" -->
21
+ <p><em>(多変数多項式環クラス)</em></p>
22
+ <p>多変数の多項式環を表現します。実際のクラスを生成するには環を指定して、
23
+ クラスメソッド<a href="#label-7">::create</a>あるいは関数<a href="#label-5">Algebra.MPolynomial</a>()を
24
+ 用います。</p>
25
+ <h2><a name="label-1" id="label-1">ファイル名:</a></h2><!-- RDLabel: "ファイル名:" -->
26
+ <ul>
27
+ <li><var>m-polynomial.rb</var></li>
28
+ </ul>
29
+ <h2><a name="label-2" id="label-2">スーパークラス:</a></h2><!-- RDLabel: "スーパークラス:" -->
30
+ <ul>
31
+ <li><var>Object</var></li>
32
+ </ul>
33
+ <h2><a name="label-3" id="label-3">インクルードしているモジュール:</a></h2><!-- RDLabel: "インクルードしているモジュール:" -->
34
+ <ul>
35
+ <li><var>Enumerable</var></li>
36
+ <li><var>Comparable</var></li>
37
+ <li><a href="#label-66">Algebra::Groebner</a></li>
38
+ </ul>
39
+ <h2><a name="label-4" id="label-4">関連する関数:</a></h2><!-- RDLabel: "関連する関数:" -->
40
+ <dl>
41
+ <dt><a name="label-5" id="label-5"><code>Algebra.MPolynomial(<var>ring</var> [, <var>obj0</var> [, <var>obj1</var> [, ...]]])</code></a></dt><!-- RDLabel: "Algebra.MPolynomial" -->
42
+ <dd>
43
+ <!-- Reference, RDLabel "::create(ring [, obj0[, obj1[, ...]]])" doesn't exist --><em class="label-not-found">::create(ring [, obj0[, obj1[, ...]]])</em><!-- Reference end -->に同じ。</dd>
44
+ </dl>
45
+ <h2><a name="label-6" id="label-6">クラスメソッド:</a></h2><!-- RDLabel: "クラスメソッド:" -->
46
+ <dl>
47
+ <dt><a name="label-7" id="label-7"><code>::create(<var>ring</var> [, <var>obj0</var> [, <var>obj1</var> [, ...]]])</code></a></dt><!-- RDLabel: "::create" -->
48
+ <dd>
49
+ <p><var>ring</var>で表現されるクラスを係数環とする多変数多項式環
50
+ クラスを生成します。</p>
51
+ <p>オブジェクト<code>obj0, obj1, ...</code>で変数を登録し、戻り値である
52
+ 多変数多項式環クラスは Algebra::MPolynomial クラスのサブクラスです。</p>
53
+ <p>オブジェクト<code>obj0, obj1, ...</code>は変数の区別と
54
+ 名(<var>to_s</var>の値)に利用されるだけです。</p>
55
+ <p>このサブクラスにはクラスメソッドとして<var>ground</var>と
56
+ <var>vars</var>が定義され、それぞれ、係数環<var>ring</var>、変数
57
+ の配列を返します。 </p>
58
+ <p>登録されたオブジェクト <code>obj0, obj1, ...</code> で表現される
59
+ される変数は<code>var(obj0)</code>, <code>var(obj1)</code>,...
60
+ で得ることができます。すなわち<code>vars == [var(obj0), var(obj1), ...]</code>
61
+ です。</p>
62
+ <p>各変数の大小関係は<code>obj0 &gt; obj1 &gt; ...</code>となります。各単項式
63
+ の順序は<a href="#label-17">::set_ord</a>で指定します。</p>
64
+ <p>例: 整数を係数とする多項式環の生成</p>
65
+ <pre>require "m-polynomial"
66
+ P = Algebra::MPolynomial.create(Integer, "x", "y", "z")
67
+ x, y, z = P.vars
68
+ p((-x + y + z)*(x + y - z)*(x - y + z))
69
+ #=&gt; -x^3 + x^2y + x^2z + xy^2 - 2xyz + xz^2 - y^3 + y^2z + yz^2 - z^3
70
+ p P.ground #=&gt; integer</pre></dd>
71
+ <dt><a name="label-8" id="label-8"><code>::vars([<var>obj0</var> [, <var>obj1</var> [, ...]]])</code></a></dt><!-- RDLabel: "::vars" -->
72
+ <dd>
73
+ <p><em>引数が1つもないとき</em>、既に登録されている全ての変数を
74
+ 配列として返します。</p>
75
+ <p>例:</p>
76
+ <pre>P = Algebra.MPolynomial(Integer, "x", "y", "z")
77
+ p P.vars #=&gt; [x, y, z]</pre>
78
+ <p><em>引数がただ1つで文字列であるとき</em>、文字列を「英字1字+数字の列」
79
+ に分解し、それで表現される変数を登録します。オブジェクトが既
80
+ に登録されていれば新たな登録はしません。戻り値はそれぞれのオ
81
+ ブジェクトに対応する変数の配列です。</p>
82
+ <p>例: </p>
83
+ <pre>P = Algebra.MPolynomial(Integer)
84
+ x, y, z, w = P.vars("a0b10cd")
85
+ p P.vars #=&gt; [a0, b10, c, d]
86
+ p [x, y, z, w] #=&gt; [a0, b10, c, d]</pre>
87
+ <p><em>それ以外のとき</em>、引数であるオブジェクト
88
+ <code>obj0, obj1, ...</code> で表現される変数
89
+ を登録します。オブジェクトが既に登録されていれば新たな登録
90
+ はしません。戻り値は<code>obj0, obj1, ...</code>に対応する変数
91
+ の配列です。</p>
92
+ <p>例:</p>
93
+ <pre>P = Algebra.MPolynomial(Integer)
94
+ p P.vars("x", "y", "z") #=&gt; [x, y, z]</pre></dd>
95
+ <dt><a name="label-9" id="label-9"><code>::mvar([<var>obj0</var> [, <var>obj1</var> [, ...]]])</code></a></dt><!-- RDLabel: "::mvar" -->
96
+ <dd>
97
+ <p><em>引数が1つもないとき</em>、既に登録されている全ての変数を
98
+ 配列として返します。</p>
99
+ <p><em>それ以外のとき</em>、引数であるオブジェクト
100
+ <code>obj0, obj1, ...</code> で表現される変数
101
+ を登録します。オブジェクトが既に登録されていれば新たな登録
102
+ はしません。戻り値は <code>obj0, obj1, ...</code> に対応する変数
103
+ の配列です。</p></dd>
104
+ <dt><a name="label-10" id="label-10"><code>::to_ary</code></a></dt><!-- RDLabel: "::to_ary" -->
105
+ <dd>
106
+ <p><code>[self, *vars]</code> を返します。</p>
107
+ <p>例: 多項式環と変数を同時に定義する。</p>
108
+ <pre>P, x, y, z, w = Algebra.MPolynomial(Integer, "a", "b", "c", "d")</pre></dd>
109
+ <dt><a name="label-11" id="label-11"><code>::var(<var>obj</var>)</code></a></dt><!-- RDLabel: "::var" -->
110
+ <dd>
111
+ <p><var>obj</var> で登録されたオブジェクトによって表現される変数を返します。</p>
112
+ <p>例: </p>
113
+ <pre>P = Algebra.MPolynomial(Integer, "X", "Y", "Z")
114
+ x, y, z = P.vars
115
+ P.var("Y") == y #=&gt; true</pre></dd>
116
+ <dt><a name="label-12" id="label-12"><code>::variables</code></a></dt><!-- RDLabel: "::variables" -->
117
+ <dd>
118
+ 既に登録されている変数を表現するオブジェクトの配列を返します。</dd>
119
+ <dt><a name="label-13" id="label-13"><code>::indeterminate(<var>obj</var>)</code></a></dt><!-- RDLabel: "::indeterminate" -->
120
+ <dd>
121
+ <a href="#label-11">::var</a> と同じです。</dd>
122
+ <dt><a name="label-14" id="label-14"><code>::zero?</code></a></dt><!-- RDLabel: "::zero?" -->
123
+ <dd>
124
+ 零元であるとき真を返します。</dd>
125
+ <dt><a name="label-15" id="label-15"><code>::zero</code></a></dt><!-- RDLabel: "::zero" -->
126
+ <dd>
127
+ 零元を返します。</dd>
128
+ <dt><a name="label-16" id="label-16"><code>::unity</code></a></dt><!-- RDLabel: "::unity" -->
129
+ <dd>
130
+ 単位元を返します。</dd>
131
+ <dt><a name="label-17" id="label-17"><code>::set_ord(<var>ord</var> [, <var>v_ord</var>])</code></a></dt><!-- RDLabel: "::set_ord" -->
132
+ <dd>
133
+ <p><var>ord</var> に単項式順序をシンボルで指定します。順序として可能な指定
134
+ は <code>:lex</code> (辞書式順序(デフォルト))、<code>:grlex</code> (次数付き辞書
135
+ 式順序)、<code>:grevlex</code> (次数付き逆辞書式順序)の3つです。</p>
136
+ <p>各変数間の順序は登録された順(先に登録されるほど大きい)に
137
+ なります。<var>v_ord</var> に配列を与えてこの順番を変更する事が
138
+ できます。</p>
139
+ <p>例: <code>x, y, z = P.var("xyz")</code> としたときの順位</p>
140
+ <pre>require "m-polynomial"
141
+ P = Algebra.MPolynomial(Integer)
142
+ x, y, z = P.vars("xyz")
143
+ f = -5*x**3 + 7*x**2*z**2 + 4*x*y**2*z + 4*z**2
144
+
145
+ P.set_ord(:lex)
146
+ p f #=&gt; -5x^3 + 7x^2z^2 + 4xy^2z + 4z^2
147
+
148
+ f.method_cash_clear
149
+ P.set_ord(:grlex)
150
+ p f #=&gt; 7x^2z^2 + 4xy^2z - 5x^3 + 4z^2
151
+
152
+ f.method_cash_clear
153
+ P.set_ord(:grevlex)
154
+ p f #=&gt; 4xy^2z + 7x^2z^2 - 5x^3 + 4z^2
155
+
156
+ f.method_cash_clear
157
+ P.set_ord(:lex, [2, 1, 0]) # z &gt; y &gt; x
158
+ p f #=&gt; 7x^2z^2 + 4z^2 + 4xy^2z - 5x^3</pre></dd>
159
+ <dt><a name="label-18" id="label-18"><code>::order=(<var>x</var>)</code></a></dt><!-- RDLabel: "::order=" -->
160
+ <dd>
161
+ <!-- Reference, RDLabel "::set_ord(x)" doesn't exist --><em class="label-not-found">::set_ord(x)</em><!-- Reference end --> と同じです。</dd>
162
+ <dt><a name="label-19" id="label-19"><code>::get_ord</code></a></dt><!-- RDLabel: "::get_ord" -->
163
+ <dd>
164
+ 単項式順序(:lex, :grlex, :grevlex)を返します。</dd>
165
+ <dt><a name="label-20" id="label-20"><code>::ord</code></a></dt><!-- RDLabel: "::ord" -->
166
+ <dd>
167
+ <a href="#label-19">::get_ord</a> と同じです。</dd>
168
+ <dt><a name="label-21" id="label-21"><code>::with_ord(<var>ord</var> [, <var>v_ord</var>[ [, <var>array_of_polys</var>]])</code></a></dt><!-- RDLabel: "::with_ord" -->
169
+ <dd>
170
+ <p><var>ord</var> を単項式順序、<var>v_ord</var> を変数の順序の変換配列として、
171
+ ブロックを実行します。
172
+ ブロックを抜けると以前の順序に戻ります。
173
+ 多項式の配列 <var>array_of_polys</var> が与えられれば、それらに対して
174
+ <a href="#label-30">method_cash_clear</a> が実行されてから、ブロックが実行されます。
175
+ (このブロックはスレッドセーフではありません。)</p>
176
+ <p>例:</p>
177
+ <pre>require "m-polynomial"
178
+ P = Algebra.MPolynomial(Integer)
179
+ x, y, z = P.vars("xyz")
180
+ f = -5*x**3 + 7*x**2*z**2 + 4*x*y**2*z + 4*z**2
181
+
182
+ P.with_ord(:lex, nil, [f]) do
183
+ p f #=&gt; -5x^3 + 7x^2z^2 + 4xy^2z + 4z^2
184
+ p f.lt #=&gt; -5x^3
185
+ end
186
+
187
+ P.with_ord(:grlex, nil, [f]) do
188
+ p f #=&gt; 7x^2z^2 + 4xy^2z - 5x^3 + 4z^2
189
+ p f.lt #=&gt; 7x^2z^2
190
+ end
191
+
192
+ P.with_ord(:grevlex, nil, [f]) do
193
+ p f #=&gt; 4xy^2z + 7x^2z^2 - 5x^3 + 4z^2
194
+ p f.lt #=&gt; 4xy^2z
195
+ end
196
+
197
+ P.with_ord(:lex, [2, 1, 0], [f]) do # z &gt; y &gt; x
198
+ p f #=&gt; 7x^2z^2 + 4z^2 + 4xy^2z - 5x^3
199
+ p f.lt #=&gt; 7x^2z^2
200
+ end</pre>
201
+ <p><a href="#label-17">::set_ord</a> も参照してください。</p></dd>
202
+ <dt><a name="label-22" id="label-22"><code>::monomial(<var>ind</var>[, <var>c</var>])</code></a></dt><!-- RDLabel: "::monomial" -->
203
+ <dd>
204
+ multi-degree <var>ind</var> で、係数が <var>c</var> の単項式を返します。
205
+ (ただし、<a href="#label-55">Algebra::MPolynomial::Monomial</a> は extend
206
+ されていない。)
207
+ <var>c</var> が省略されれば、単位元とみなされます。</dd>
208
+ </dl>
209
+ <h2><a name="label-23" id="label-23">メソッド:</a></h2><!-- RDLabel: "メソッド:" -->
210
+ <dl>
211
+ <dt><a name="label-24" id="label-24"><code>monomial(<var>ind</var>[, <var>c</var>])</code></a></dt><!-- RDLabel: "monomial" -->
212
+ <dd>
213
+ <a href="#label-22">::monomial</a> と同じ。</dd>
214
+ <dt><a name="label-25" id="label-25"><code>constant?</code></a></dt><!-- RDLabel: "constant?" -->
215
+ <dd>
216
+ 定数(0次式)であるとき、真を返します。</dd>
217
+ <dt><a name="label-26" id="label-26"><code>monomial?</code></a></dt><!-- RDLabel: "monomial?" -->
218
+ <dd>
219
+ 単項式であるとき、真を返します。</dd>
220
+ <dt><a name="label-27" id="label-27"><code>zero?</code></a></dt><!-- RDLabel: "zero?" -->
221
+ <dd>
222
+ 零であるとき、真を返します。 </dd>
223
+ <dt><a name="label-28" id="label-28"><code>zero</code></a></dt><!-- RDLabel: "zero" -->
224
+ <dd>
225
+ 零元を返します。</dd>
226
+ <dt><a name="label-29" id="label-29"><code>unity</code></a></dt><!-- RDLabel: "unity" -->
227
+ <dd>
228
+ 単位元を返します。</dd>
229
+ <dt><a name="label-30" id="label-30"><code>method_cash_clear</code></a></dt><!-- RDLabel: "method_cash_clear" -->
230
+ <dd>
231
+ <p>このライブラリは、同じ計算を繰り返ししないように結果を保存
232
+ していますが、それをクリアします。この操作は単項式順序の変
233
+ 更などを行った後に必要になります。</p>
234
+ <p>結果が保存されているメソッドは、
235
+ <a href="#label-43">lc</a>, <a href="#label-44">lm</a>, <a href="#label-45">lt</a>, <a href="#label-46">rt</a>, <a href="#label-40">multideg</a>
236
+ です。</p>
237
+ <p>例:</p>
238
+ <pre>P = Algebra.MPolynomial(Integer)
239
+ x, y, z = P.vars("xyz")
240
+ f = -5*x**3 + 7*x**2*z**2 + 4*x*y**2*z + 4*z**2
241
+ P.set_ord(:lex)
242
+ p f.lt #=&gt; -5x^3
243
+ P.set_ord(:grlex)
244
+ p f.lt #=&gt; -5x^3
245
+ f.method_cash_clear
246
+ p f.lt #=&gt; 7x^2z^2</pre></dd>
247
+ <dt><a name="label-31" id="label-31"><code>==(<var>other</var>)</code></a></dt><!-- RDLabel: "==" -->
248
+ <dd>
249
+ 等しいとき真を返します。</dd>
250
+ <dt><a name="label-32" id="label-32"><code>&lt;=&gt;(<var>other</var>)</code></a></dt><!-- RDLabel: "<=>" -->
251
+ <dd>
252
+ 大小関係を求めます。</dd>
253
+ <dt><a name="label-33" id="label-33"><code>+(<var>other</var>)</code></a></dt><!-- RDLabel: "+" -->
254
+ <dd>
255
+ 和を計算します。</dd>
256
+ <dt><a name="label-34" id="label-34"><code>-(<var>other</var>)</code></a></dt><!-- RDLabel: "-" -->
257
+ <dd>
258
+ 差を計算します。</dd>
259
+ <dt><a name="label-35" id="label-35"><code>*(<var>other</var>)</code></a></dt><!-- RDLabel: "*" -->
260
+ <dd>
261
+ 積を計算します。</dd>
262
+ <dt><a name="label-36" id="label-36"><code>**(<var>n</var>)</code></a></dt><!-- RDLabel: "**" -->
263
+ <dd>
264
+ <var>n</var> 乗を計算します。</dd>
265
+ <dt><a name="label-37" id="label-37"><code>/(<var>other</var>)</code></a></dt><!-- RDLabel: "/" -->
266
+ <dd>
267
+ <var>other</var> が、定数(0次式)であるとき、商を計算します。</dd>
268
+ <dt><a name="label-38" id="label-38"><code>divmod(<var>f0</var> [, <var>f1</var> [,...]])</code></a></dt><!-- RDLabel: "divmod" -->
269
+ <dd>
270
+ <p>多項式 <code>f0, f1,...</code> による割り算をし、商の配列と剰余を計算します。</p>
271
+ <pre>P = Algebra.MPolynomial(Integer)
272
+ x, y = P.vars("xy")
273
+ f = x**2*y + x*y**2 + y**2
274
+ f0 = x*y - 1
275
+ f1 = y**2 - 1
276
+ p f.divmod(f0, f1) #=&gt; [[x + y, 1], x + y + 1]
277
+ p f % [f0, f1] #=&gt; x + y + 1</pre></dd>
278
+ <dt><a name="label-39" id="label-39"><code>%(<var>others</var>)</code></a></dt><!-- RDLabel: "%" -->
279
+ <dd>
280
+ <var>others</var> を多項式の配列としたとき、それによる割り算の剰余を返します。
281
+ これは <code>divmod(*others)[1]</code> と同じです。</dd>
282
+ <dt><a name="label-40" id="label-40"><code>multideg</code></a></dt><!-- RDLabel: "multideg" -->
283
+ <dd>
284
+ <p>(多重)次数を返します。</p>
285
+ <p>例: (lex オーダーで)</p>
286
+ <pre>P = Algebra.MPolynomial(Integer)
287
+ x, y, z = P.vars("xyz")
288
+ f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
289
+ p f.multideg #=&gt; [3, 1]</pre></dd>
290
+ <dt><a name="label-41" id="label-41"><code>totdeg</code></a></dt><!-- RDLabel: "totdeg" -->
291
+ <dd>
292
+ <p>次数(多重次数の和)を返します。</p>
293
+ <p>例: (lex オーダーで)</p>
294
+ <pre>f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
295
+ p f.totdeg #=&gt; 4</pre></dd>
296
+ <dt><a name="label-42" id="label-42"><code>deg</code></a></dt><!-- RDLabel: "deg" -->
297
+ <dd>
298
+ multideg と同じです。</dd>
299
+ <dt><a name="label-43" id="label-43"><code>lc</code></a></dt><!-- RDLabel: "lc" -->
300
+ <dd>
301
+ <p>先頭係数(leading coeffcient)を返します。</p>
302
+ <p>例: (lex オーダーで)</p>
303
+ <pre>f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
304
+ p f.lc #=&gt; -5</pre></dd>
305
+ <dt><a name="label-44" id="label-44"><code>lm</code></a></dt><!-- RDLabel: "lm" -->
306
+ <dd>
307
+ <p>先頭単項式(leading monomial)を返します。
308
+ この戻り値は<a href="#label-55">Algebra::MPolynomial::Monomial</a>というモジュールが
309
+ extend されます。</p>
310
+ <p>例: (lex オーダーで)</p>
311
+ <pre>f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
312
+ p f.lm #=&gt; x^3y</pre></dd>
313
+ <dt><a name="label-45" id="label-45"><code>lt</code></a></dt><!-- RDLabel: "lt" -->
314
+ <dd>
315
+ <p>先頭項(leading term)を返します。<code>lc * lm</code>と等しい値を持ちます。</p>
316
+ <p>例: (lex オーダーで)</p>
317
+ <pre>f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
318
+ p f.lt #=&gt; -5x^3y</pre></dd>
319
+ <dt><a name="label-46" id="label-46"><code>rt</code></a></dt><!-- RDLabel: "rt" -->
320
+ <dd>
321
+ <p>残余項(rest term)を返します。<code>self - lt</code>と等しい値を持ちます。</p>
322
+ <p>例: (lex オーダーで)</p>
323
+ <pre>f = 4*x*y**2*z + 4*z**2 - 5*x**3*y + 7*x**2*z**2
324
+ p f.rt #=&gt; 4*z**2 - 5*x**3*y + 7*x**2*z**2</pre></dd>
325
+ <dt><a name="label-47" id="label-47"><code>to_s</code></a></dt><!-- RDLabel: "to_s" -->
326
+ <dd>
327
+ <p>文字列表現を得ます。表示形式を変えるには<var>display_type</var>を用います。
328
+ <var>display_type</var>に与えられる値は <var>:norm</var>(デフォルト), <var>:code</var>
329
+ です。</p>
330
+ <p>例:</p>
331
+ <pre>P = Algebra.MPolynomial(Integer)
332
+ x, y, z = P.vars("xyz")
333
+ f = -5*x**3 + 7*x**2*z**2 + 4*x*y**2*z + 4*z**2
334
+ p f #=&gt; -5x^3 + 7x^2z^2 + 4xy^2z + 4z^2
335
+ P.display_type = :code
336
+ p f #=&gt; -5*x**3 + 7*x**2*z**2 + 4*x*y**2*z + 4*z**2</pre></dd>
337
+ <dt><a name="label-48" id="label-48"><code>map_to(<var>ring</var>[, <var>vs</var>]){|<var>c</var>, <var>ind</var>| ... }</code></a></dt><!-- RDLabel: "map_to" -->
338
+ <dd>
339
+ 多項式に含まれる各単項式について、
340
+ multi-degree を <var>ind</var>、係数を <var>c</var> に代入し、
341
+ ... を評価して、<var>ring</var> 上で和を取った値を
342
+ 返します。<var>vs</var> が省略されると <a href="#label-8">::vars</a> の値が用いら
343
+ れます。
344
+ <code>f</code>が<code>P</code>上の多項式なら、
345
+ <code>f.map_to(P) {|c, ind| c * P.monomial(ind)}</code> は <code>f</code>と一致します。</dd>
346
+ <dt><a name="label-49" id="label-49"><code>project(<var>ring</var>[, <var>vs</var>]){|<var>c</var>, <var>ind</var>| ... }</code></a></dt><!-- RDLabel: "project" -->
347
+ <dd>
348
+ <p>多項式に含まれる各単項式について、
349
+ multi-degree を <var>ind</var>、係数を <var>c</var> に代入し、
350
+ ... を評価して<var>ind</var>次の単項式に掛けて、
351
+ <var>ring</var> 上で和を取った値を
352
+ 返します。<var>vs</var> が省略されると <a href="#label-8">::vars</a> の値が用いら
353
+ れます。</p>
354
+ <p><code>f</code>が<code>P</code>上の多項式なら、
355
+ <code>f.map_to(P) {|c, ind| c}</code> は <code>f</code>と一致します。</p>
356
+ <p><code>project(ring){|c, ind| f(c, ind)}</code> は <code>map_to(ring){|c, ind| f(c, ind) * self.class.monomial(ind)}</code>に一致します。</p>
357
+ <p>例:</p>
358
+ <pre>require "m-polynomial"
359
+ require "rational"
360
+ P = Algebra::MPolynomial(Integer, "x", "y", "z")
361
+ x, y, z = P.vars
362
+ f = x**2 + 2*x*y - z**3
363
+ PQ = Algebra::MPolynomial(Rational, "x", "y", "z")
364
+ p f.project(PQ) {|c, ind| Rational(c) / (ind[0] + 1)}
365
+ #=&gt; 1/3x^2 + xy - z^3
366
+ p f.convert_to(PQ) #=&gt; x^2 + 2xy - z^3</pre></dd>
367
+ <dt><a name="label-50" id="label-50"><code>evaluate(<var>obj0</var>[, [<var>obj1</var>, [<var>obj2</var>,..]]])</code></a></dt><!-- RDLabel: "evaluate" -->
368
+ <dd>
369
+ <p>各変数に <var>obj0, obj1, obj2,...</var> を代入した値を返します。
370
+ <a href="#label-49">project</a><code>(ground, [obj0, obj1, obj2,..]){|c, ind| c}</code>
371
+ の値と一致します。</p>
372
+ <p>例:</p>
373
+ <pre>require "m-polynomial"
374
+ P = Algebra::MPolynomial(Integer, "x", "y", "z")
375
+ x, y, z = P.vars
376
+ f = x**2 + 2*x*y - z**3
377
+ p f.evaluate(1, -1, -1) #=&gt; 0 (in Integer)
378
+ p f.evaluate(y, z, x) #=&gt; -x^3 + y^2 + 2yz (in P)</pre></dd>
379
+ <dt><a name="label-51" id="label-51"><code>call(<var>obj0</var>[, [<var>obj1</var>, [<var>obj2</var>,..]]])</code></a></dt><!-- RDLabel: "call" -->
380
+ <dd>
381
+ <a href="#label-50">evaluate</a>と同じです。</dd>
382
+ <dt><a name="label-52" id="label-52"><code>sub(<var>var</var>, <var>value</var>)</code></a></dt><!-- RDLabel: "sub" -->
383
+ <dd>
384
+ <p>変数 <var>var</var> に <var>value</var> を代入した値を返します。</p>
385
+ <p>例:</p>
386
+ <pre>require "m-polynomial"
387
+ P = Algebra::MPolynomial(Integer)
388
+ x, y, z = P.vars("x", "y", "z")
389
+ f = (x - y)*(y - z - 1)
390
+ p f.sub(y, z+1) #=&gt; 0</pre></dd>
391
+ <dt><a name="label-53" id="label-53"><code>convert_to(<var>ring</var>)</code></a></dt><!-- RDLabel: "convert_to" -->
392
+ <dd>
393
+ 各項を<var>ring</var>上で評価します。<a href="#label-49">project</a><code>(ring){|c, ind| c}</code>の
394
+ 値と一致します。</dd>
395
+ <dt><a name="label-54" id="label-54"><code>derivate(<var>var</var>)</code></a></dt><!-- RDLabel: "derivate" -->
396
+ <dd>
397
+ <!-- Reference, RDLabel "var" doesn't exist --><em class="label-not-found">var</em><!-- Reference end -->での偏微分を返します。</dd>
398
+ </dl>
399
+ <h1><a name="label-55" id="label-55">Algebra::MPolynomial::Monomial</a></h1><!-- RDLabel: "Algebra::MPolynomial::Monomial" -->
400
+ <p>(単項式の性質を集めたモジュール)</p>
401
+ <p><a href="#label-45">lt</a>, <a href="#label-44">lm</a> の戻り値である多項式にはこのモジュールがextendされます。</p>
402
+ <h2><a name="label-56" id="label-56">メソッド:</a></h2><!-- RDLabel: "メソッド:" -->
403
+ <dl>
404
+ <dt><a name="label-57" id="label-57"><code>divide?(<var>other</var>)</code></a></dt><!-- RDLabel: "divide?" -->
405
+ <dd>
406
+ 単項式 <var>other</var> で割り切れるとき真を返します。</dd>
407
+ <dt><a name="label-58" id="label-58"><code>/(<var>other</var>)</code></a></dt><!-- RDLabel: "/" -->
408
+ <dd>
409
+ 単項式 <var>other</var> で割り切ります。</dd>
410
+ <dt><a name="label-59" id="label-59"><code>prime_to?(<var>other</var>)</code></a></dt><!-- RDLabel: "prime_to?" -->
411
+ <dd>
412
+ 単項式 <var>other</var> と素なとき真を返します。</dd>
413
+ <dt><a name="label-60" id="label-60"><code>lcm(<var>other</var>)</code></a></dt><!-- RDLabel: "lcm" -->
414
+ <dd>
415
+ 単項式 <var>other</var> との最小公倍数である単項式を返します。</dd>
416
+ <dt><a name="label-61" id="label-61"><code>divide_or?(<var>other0</var>, <var>other1</var>)</code></a></dt><!-- RDLabel: "divide_or?" -->
417
+ <dd>
418
+ <var>divide?(other0.lcm(other1))</var> と同じ値を返します。</dd>
419
+ </dl>
420
+ <h1><a name="label-62" id="label-62">Algebra::MPolynomialFactorization</a></h1><!-- RDLabel: "Algebra::MPolynomialFactorization" -->
421
+ <p><em>(因数分解モジュール)</em></p>
422
+ <p>因数分解をするためのモジュールです。</p>
423
+ <h2><a name="label-63" id="label-63">ファイル名:</a></h2><!-- RDLabel: "ファイル名:" -->
424
+ <p><var>m-polynomial-factor.rb</var></p>
425
+ <h2><a name="label-64" id="label-64">メソッド:</a></h2><!-- RDLabel: "メソッド:" -->
426
+ <dl>
427
+ <dt><a name="label-65" id="label-65"><code>factorize</code></a></dt><!-- RDLabel: "factorize" -->
428
+ <dd>
429
+ <p>因数分解します。</p>
430
+ <p>因数分解可能な係数環は</p>
431
+ <ul>
432
+ <li>Integer</li>
433
+ <li>Rational</li>
434
+ <li>素体</li>
435
+ </ul>
436
+ <p>です。</p></dd>
437
+ </dl>
438
+ <h1><a name="label-66" id="label-66">Algebra::Groebner</a></h1><!-- RDLabel: "Algebra::Groebner" -->
439
+ <p>(グレブナ基底計算モジュール)</p>
440
+ <h2><a name="label-67" id="label-67">ファイル名:</a></h2><!-- RDLabel: "ファイル名:" -->
441
+ <ul>
442
+ <li><var>groebner-basis.rb</var></li>
443
+ <li><var>groebner-basis-coeff.rb</var></li>
444
+ </ul>
445
+ <h2><a name="label-68" id="label-68">クラスメソッド:</a></h2><!-- RDLabel: "クラスメソッド:" -->
446
+ <dl>
447
+ <dt><a name="label-69" id="label-69"><code>Groebner.basis(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.basis" -->
448
+ <dd>
449
+ <p>基底の配列 <var>f</var> から簡約グレブナ基底を作り、配列として返します。
450
+ <!-- Reference, RDLabel "Groebner.basis(Groebner.minimal_basis(Groebner.basis_159A(f)))" doesn't exist --><em class="label-not-found">Groebner.basis(Groebner.minimal_basis(Groebner.basis_159A(f)))</em><!-- Reference end -->
451
+ と同等です。</p>
452
+ <p>例:</p>
453
+ <pre>require "m-polynomial"
454
+ require "rational"
455
+ P = Algebra.MPolynomial(Rational)
456
+ P.set_ord :grevlex
457
+ x, y, z = P.vars("xyz")
458
+ f1 = x**2 + y**2 + z**2 -1
459
+ f2 = x**2 + z**2 - y
460
+ f3 = x - z
461
+ b = Groebner.basis([f1, f2, f3])
462
+ p b #=&gt; [y^2 + y - 1, z^2 - 1/2y, x - z]</pre></dd>
463
+ <dt><a name="label-70" id="label-70"><code>Groebner.basis_159A(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.basis_159A" -->
464
+ <dd>
465
+ 基底の配列 <var>f</var> からグレブナ基底を作り配列として返します。</dd>
466
+ <dt><a name="label-71" id="label-71"><code>Groebner.minimal_basis(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.minimal_basis" -->
467
+ <dd>
468
+ グレブナ基底の配列 <var>f</var> から極小グレブナ基底の配列を作り返します。</dd>
469
+ <dt><a name="label-72" id="label-72"><code>Groebner.reduced_basis(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.reduced_basis" -->
470
+ <dd>
471
+ 極小グレブナ基底の配列 <var>f</var> から簡約グレブナ基底の配列を作り返します。</dd>
472
+ <dt><a name="label-73" id="label-73"><code>Groebner.basis_coeff(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.basis_coeff" -->
473
+ <dd>
474
+ <p>基底の配列 <var>f</var> から簡約グレブナ基底の配列と、各基底を生成
475
+ するための係数を返します。</p>
476
+ <p>例:</p>
477
+ <pre>require "m-polynomial"
478
+ require "rational"
479
+ P = Algebra.MPolynomial(Rational)
480
+ P.set_ord :grevlex
481
+ x, y, z = P.vars("xyz")
482
+ f1 = x**2 + y**2 + z**2 -1
483
+ f2 = x**2 + z**2 - y
484
+ f3 = x - z
485
+ fs = [f1, f2, f3]
486
+ c, b = Groebner.basis_coeff(fs)
487
+ p b #=&gt; [y^2 + y - 1, z^2 - 1/2y, x - z]
488
+ p c #=&gt; [[1, -1, 0], [0, 1/2, -1/2x - 1/2z], [0, 0, 1]]
489
+ for i in 0..2
490
+ p c[i].inner_product(fs) == b[i] #=&gt; true
491
+ end</pre></dd>
492
+ <dt><a name="label-74" id="label-74"><code>Groebner.basis?(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.basis?" -->
493
+ <dd>
494
+ <var>f</var> がグレブナ基底の配列か否かを返します。</dd>
495
+ <dt><a name="label-75" id="label-75"><code>Groebner.minimal_basis?(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.minimal_basis?" -->
496
+ <dd>
497
+ <var>f</var> が極小グレブナ基底の配列か否かを返します。</dd>
498
+ <dt><a name="label-76" id="label-76"><code>Groebner.reduced_basis?(<var>f</var>)</code></a></dt><!-- RDLabel: "Groebner.reduced_basis?" -->
499
+ <dd>
500
+ <var>f</var> が極小グレブナ基底の配列か否かを返します。</dd>
501
+ </dl>
502
+ <h2><a name="label-77" id="label-77">メソッド:</a></h2><!-- RDLabel: "メソッド:" -->
503
+ <dl>
504
+ <dt><a name="label-78" id="label-78"><code>S_pair(<var>other</var>)</code></a></dt><!-- RDLabel: "S_pair" -->
505
+ <dd>
506
+ <p><var>other</var> との S-pair を取ります。</p>
507
+ <p>例:</p>
508
+ <pre>(x**2*y + y**2 + z**2 -1).S_pair(x**2*z + z**2 - y)
509
+ #=&gt; y^2z + y^2 - yz^2 + z^3 - z</pre></dd>
510
+ <dt><a name="label-79" id="label-79"><code>divmod_s(<var>f1</var>[, <var>f2</var>[, <var>f3</var>...]])</code></a></dt><!-- RDLabel: "divmod_s" -->
511
+ <dd>
512
+ <p>基底 <code>f1, f2, f3, ...</code> で割った商(各基底の係数の配列)
513
+ と余り <code>[[q1, q2, q3, ...], r]</code> を返します。</p>
514
+ <p>一度 <code>f1, f2, f3, ...</code> をグレブナ基底に変換してから
515
+ 割り算を行うので、<code>divmod(f1, f2, ...).last == 0</code> と <var>self</var> が
516
+ イデアル <code>(f1, f2, ...)</code> に属することは同値です。</p>
517
+ <p>例:</p>
518
+ <pre>require "m-polynomial"
519
+ require "rational"
520
+ P = Algebra.MPolynomial(Rational)
521
+ P.set_ord :grevlex
522
+ x, y, z = P.vars("xyz")
523
+ f1 = x**2 + y**2 + z**2 -1
524
+ f2 = x**2 + z**2 - y
525
+ f3 = x - z
526
+ fs = [f1, f2, f3]
527
+ f = x**3 + y**3 + z**3
528
+ c, r = f.divmod_s(*fs)
529
+ p r #=&gt; yz + 2y - 1
530
+ p c #=&gt; [y - 1, -y + z + 1, x^2]
531
+ p f == c.inner_product(fs) + r #=&gt; true</pre></dd>
532
+ <dt><a name="label-80" id="label-80"><code>div_cg(<var>f</var>, <var>cg</var>)</code></a></dt><!-- RDLabel: "div_cg" -->
533
+ <dd>
534
+ 基底の配列 <var>f</var> から <a href="#label-73">Groebner.basis_coeff</a>(f)
535
+ で求めた値 <var>cg</var> を用いて<var>self</var> を基底 <var>f</var> で
536
+ 割った商(各基底の係数の配列)と余り <code>[q, r]</code> を返します。
537
+ <a href="#label-79">divmod_s</a>(f) は
538
+ <code>div_cg(f, Groebner.basis_coeff(f))</code> を返しています。</dd>
539
+ </dl>
540
+
541
+ </body>
542
+ </html>