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,274 @@
1
+ #!/usr/local/bin/ruby
2
+ #
3
+ # TEST SCRIPT FOR groebner-basis.rb
4
+ #
5
+ # 2001.04.08 Version 1.05
6
+
7
+ $totS, $totK = 0, 0
8
+
9
+ #$lp = "~/ruby/poly"
10
+ #$lp = "~/ruby/poly-2001-0202"
11
+ #$lp = "~/ruby/poly-2001-0326"
12
+
13
+ if $lp
14
+ $LOAD_PATH.unshift $lp
15
+ require "algebra/polynomialm"
16
+ require "algebra/gbasem"
17
+ end
18
+ $LOAD_PATH.push File.dirname($0)
19
+
20
+ require "algebra"
21
+ #require "algebra/m-polynomial"
22
+ require "algebra/algebraic-parser"
23
+ require "time-trial"
24
+ include Algebra
25
+
26
+ def gb(k, f, ord = :lex, sw = false)
27
+ f0 = f.first
28
+ print "Basis of: "
29
+ sw ? puts('', *f.to_s) : puts(f.map { |v| v.to_s }.join(', '))
30
+ gbase = b = nil
31
+ $stot.start {
32
+ a = Time.now
33
+ k.with_ord(:lex, nil, f) do
34
+ gbase = Groebner.basis(f)
35
+ end
36
+ b = Time.now - a
37
+ }
38
+ print "Is: "
39
+ sw ? puts('', *gbase.to_s) : puts(gbase.map { |v| v.to_s }.join(", "))
40
+ puts "(#{b} seconds.)"
41
+ true
42
+ end
43
+
44
+ def mkarray(s, mod = 0, ord = :lex)
45
+ if mod < 0
46
+ require "mathn"
47
+ require "algebra/rational"
48
+ puts 'require "mathn"'
49
+ fp = Rational
50
+ elsif mod > 0
51
+ puts "modulo #{mod}"
52
+ require "algebra/residue-class-ring"
53
+ fp = ResidueClassRing(Integer, mod)
54
+ else
55
+ puts "modulo #{mod}"
56
+ require "algebra/rational"
57
+ fp = Rational
58
+ end
59
+ k = MPolynomial(fp)
60
+ if $variables
61
+ k.variables = $variables
62
+ $variables = nil
63
+ end
64
+ strs = s.collect{|str| str.split(/\s*,\s*/)}.flatten
65
+ sf = strs.collect{|x| AlgebraicParser.eval(x, k)}
66
+ kf = strs.collect{|x| PolynomialM(x)} if $lp
67
+ $lp ? [k, kf, sf, fp] : [k, sf, fp]
68
+ end
69
+
70
+ def gb_ks(s, mod = 0, ord = :lex)
71
+ k, kf, sf, fp = mkarray(s, mod, ord)
72
+
73
+ stime = sg = ktime = kg = nil
74
+
75
+ $stot.start {
76
+ stime = Time.now
77
+ k.with_ord(ord, nil, sf) do
78
+ sg = Groebner.basis(sf)
79
+ end
80
+ stime = Time.now - stime
81
+ }
82
+
83
+ $ktot.start {
84
+ ktime = Time.now
85
+ kg = mod > 0 ? GBase.getGBaseZp(kf, mod) : GBase.getGBase(kf)
86
+ ktime = Time.now - ktime
87
+ }
88
+
89
+ sg.rsort!
90
+ puts(*sg)
91
+
92
+ skg = kg.collect{|t| AlgebraicParser.eval(t.to_s, k)}
93
+
94
+ skg.rsort!
95
+ if skg == sg
96
+ puts "Coinside. (#{stime}, #{ktime}) =-=-=-=-=-=-=-=-=-=-=-=-"
97
+ true
98
+ else
99
+ puts "Defferent. (#{stime}, #{ktime}) !!!!!!!!!!!!!!!!!!!!"
100
+ puts kg
101
+ false
102
+ end
103
+ end
104
+
105
+ def gbks(s, mod = 0, ord = :lex)
106
+ print s.inspect + " => "
107
+ if $lp
108
+ gb_ks(s, mod, ord)
109
+ else
110
+ k, sf, fp = mkarray(s, mod, ord)
111
+ gb(k, sf, ord, true)
112
+ # gb(sf)
113
+ end
114
+ end
115
+
116
+
117
+ def test_gb(n, m)
118
+ case n
119
+ when 0
120
+ gbks(["x + y - 1", "x - y - 1"], m)
121
+ when 1
122
+ gbks(["3x^2*y+7y", "4x*y^2-5x"], m)
123
+ when 2
124
+ # MPolynomial.set_ord(:grlex)
125
+ Monomial.setTermOrder("deglex") if $lp
126
+ # "lex"(default), "deglex", "degrevlex"
127
+ gbks(["x**3 - 2*x*y", "x**2*y - 2*y**2 + x", "-x**2",
128
+ "-2*x*y", "-2*y**2 + x"], m, :grlex)
129
+ when 3
130
+ puts "It takes 8 minuites"
131
+ # MPolynomial.set_ord(:lex)
132
+ Monomial.setTermOrder("lex") if $lp
133
+ gbks(["x**3 * y**2 - x**2 * y**3 + x", "3 * x**4 * y + y**2"], m, :lex)
134
+ when 4
135
+ gbks(["x**2 + y**2 + z**2 -1, x**2 + z**2 - y, x - z"], m)
136
+ when 5
137
+ $variables=["t","x","y","z"]
138
+ Monomial.setVarOrder(["t","x","y","z"]) if $lp
139
+ gbks(["t**4 - x, t**3 - y, t**2 - z"], m)
140
+ when 6 #p145
141
+ puts "It takes 3 minuites"
142
+ $variables=["t","u","x","y","z"]
143
+ # MPolynomial.set_ord(:lex)
144
+ Monomial.setVarOrder(["t","u","x","y","z"]) if $lp
145
+ Monomial.setTermOrder("lex") if $lp
146
+ gbks(["x - (t+u), y - (t**2 + 2*t*u), z - (t**3 + 3 * t**2 * u)"], m, :lex)
147
+ when 7 #p136
148
+ $variables=["x","y","z", "w"]
149
+ # MPolynomial.set_ord(:lex)
150
+ Monomial.setVarOrder(["x","y","z","w"]) if $lp
151
+ Monomial.setTermOrder("lex") if $lp
152
+ gbks(["3*x-6*y-2*z, 2*x-4*y+4*w, x-2*y-z-w"], m, :lex)
153
+ when 8
154
+ $variables=["x","y","z", "w"]
155
+ # MPolynomial.set_ord(:lex)
156
+ Monomial.setVarOrder(["x","y","z","w"]) if $lp
157
+ Monomial.setTermOrder("lex") if $lp
158
+ gbks(["3x^2*y+7y","4x*y^2-5x"], m, :lex)
159
+ when 9
160
+ puts "It takes long time"
161
+ # MPolynomial.set_ord(:lex)
162
+ Monomial.setTermOrder("lex") if $lp
163
+ gbks(["x**3 * y**2 - x**2 * y**3 + x", "3 * x**4 * y + y**2"], m, :lex)
164
+ when 10 #p141
165
+ puts "It takes very long time"
166
+ $variables=["w", "x", "y", "z"]
167
+ # MPolynomial.set_ord(:lex)
168
+ Monomial.setVarOrder(["w", "x", "y", "z"]) if $lp
169
+ Monomial.setTermOrder("lex") if $lp
170
+ gbks(["3x**2 + 2yz - 2xw","2xz - 2yw","2xy - 2z - 2zw", "x**2 + y**2 + z**2 - 1"], m, :lex)
171
+ when 11
172
+ gbks(["x**2 + y**2 + z**2 -1, x**2 + z**2 - y, x - z"], m)
173
+ when 12
174
+ #
175
+ gbks(["2x+3y+3","x+5y+2"], m)
176
+ when 13
177
+ puts "raise error!"
178
+ gbks(["2x+3y+3","x+5y+2","x*y-1"], m)
179
+ when 14
180
+ gbks(["3x^2*y+7y","4x*y^2-5x"], m)
181
+ when 15
182
+ $variables=(["y","x"])
183
+ # MPolynomial.set_ord(:lex)
184
+ Monomial.setVarOrder(["y","x"]) if $lp
185
+ Monomial.setTermOrder("lex") if $lp
186
+
187
+ gbks(["2x*y-x,3y-x^2"], m, :lex)
188
+ when 16
189
+ Monomial.setTermOrder("deglex") if $lp
190
+ # MPolynomial.set_ord(:grlex)
191
+
192
+ gbks(["3x^2y-3y*z+y", "5x^2z-8z^2"], m, :grlex)
193
+ when 17
194
+ Monomial.setTermOrder("lex") if $lp
195
+ # MPolynomial.set_ord(:lex)
196
+
197
+ gbks(["6x^2+y^2", "10x^2y+2x*y"], m, :lex)
198
+ else
199
+ puts "All tests succeed."
200
+ puts
201
+ nil
202
+ end
203
+ end
204
+
205
+ $stot, $ktot = TimeTrial["stot, ktot"]
206
+
207
+ if false
208
+ $atime, $btime = TimeTrial["atime, btime"]
209
+
210
+ $sbas, $smin, $sred, $sdiv, $sspa, $slt, $smul, $llc =
211
+ TimeTrial["sbas, smin, sred, sdiv, sspa, slt, smul, llc"]
212
+
213
+ $kbas, $kmin, $kred, $kdiv, $kspa, $klt, $kmul =
214
+ TimeTrial["kbas, kmin, kred, kdiv, kspa, klt, ksml"]
215
+ end
216
+
217
+ m = ARGV.shift
218
+ m = Integer(m) if m
219
+
220
+ if m
221
+ m = Integer(m)
222
+ if m < 0
223
+ m = -1
224
+ end
225
+ else
226
+ m = 0
227
+ end
228
+
229
+ k = ARGV.shift
230
+ k = Integer(k) if k
231
+
232
+ if k
233
+ test_gb(k, m)
234
+ else
235
+ n = -1
236
+ loop do
237
+ n += 1
238
+ puts "======================= test #{n} ======================"
239
+ case n
240
+ when 10
241
+ puts "takes very long time. skip."
242
+ next# if $lp
243
+ when 9, 3
244
+ puts "takes long time. skip."
245
+ next
246
+ when 13
247
+ puts "error. skip."
248
+ next
249
+ end
250
+ k = nil if k && k < 0
251
+ r = test_gb(n, m)
252
+ break unless r
253
+ end
254
+ end
255
+
256
+ unless k
257
+ puts "<< This is a test script for groebner-basis calculators. >>"
258
+ puts "USAGE: #$0 [modulo [num]]"
259
+ puts " mod ... modulo (= -1, 0, 2, 3, 5... (-1 means 'by mathn')"
260
+ puts " num ... No. of test (if omitted, test all)"
261
+ puts
262
+ puts "S : K =\n#$stot\n#$ktot"
263
+ end
264
+
265
+ if false
266
+ puts $atime, $btime
267
+ puts $sbas, $kbas
268
+ puts $smin, $kmin
269
+ puts $sred, $kred
270
+ puts $sdiv, $kdiv
271
+ puts $sspa, $kspa
272
+ puts $slt, $klt
273
+ puts $smul, $llc
274
+ end
@@ -0,0 +1,89 @@
1
+ ########################################################
2
+ # #
3
+ # This is test script for 'polynomial-factor-alg.rb' #
4
+ # #
5
+ ########################################################
6
+ require "algebra/rational"
7
+ require "algebra/polynomial-factor-alg.rb"
8
+ include Algebra
9
+
10
+ def test(f, s = "")
11
+ print "#{f}#{s}\n"
12
+ a = f.factorize
13
+ sw = (f == a.pi)
14
+ puts "#{a.inspect}, #{sw}"
15
+ raise unless sw
16
+ end
17
+
18
+ require "algebra/polynomial"
19
+ require "algebra/polynomial-factor"
20
+ require "algebra/rational"
21
+ require "algebra/residue-class-ring"
22
+
23
+ n, i, j, k = ARGV.collect{|v| v.to_i}
24
+ fss = [
25
+ "x**4 + 1",#0
26
+ "x**2 + x + 1",#1
27
+ "x**4 + 1 + a",#2
28
+ "(x**4 + 1)*(x**2 + x + 1)",#3
29
+ "x**4 + 4",#4
30
+ "x**2 + 4*x + 1",#5
31
+ "x**2 + 1",#6
32
+ "x**3 - 1",#7
33
+ "x**3 - 2",#8
34
+ ]
35
+ fs = fss[n||0]
36
+ ass = [
37
+ "a**2 + 1",#0
38
+ "a**2 - 2",#1
39
+ "a**3 - 2",#2
40
+ "a**2 - 3",#3
41
+ ]
42
+ bss = [
43
+ "b**2 - 2",#0
44
+ "b**3 - 2",#1
45
+ "b**2 + b + 1",#2
46
+ "b**2 + 1",#3
47
+ "b**2 - 3",#4
48
+ ]
49
+ css = [
50
+ "c**3 - 2",#0
51
+ "c**2 - 3",#1
52
+ ]
53
+
54
+ as = ass[i||0]
55
+ bs = bss[j||0]
56
+ cs = css[k||0]
57
+
58
+ unless i
59
+ [fss, ass, bss, css].each do |xs|
60
+ puts "-----------"
61
+ xs.each_with_index do |f, i|
62
+ puts "#{i}: #{f}"
63
+ end
64
+ end
65
+ else
66
+ ka = AlgebraicExtensionField(Rational, "a") {|a| eval as }
67
+ a = ka.var
68
+ unless j
69
+ pka = Polynomial(ka, "x")
70
+ x = pka.var
71
+ f = eval fs
72
+ test(f, ", in Q[a, x]/(#{as})")
73
+ else
74
+ kab = AlgebraicExtensionField(ka, "b") { |b| eval bs}
75
+
76
+ unless k
77
+ pkab = Polynomial(kab, "x")
78
+ x = pkab.var
79
+ f = eval fs
80
+ test(f, ", in Q[a, b, x]/(#{as}, #{bs})")
81
+ else
82
+ kabc = AlgebraicExtensionField(kab, "c") { |c| eval cs}
83
+ pkabc = Polynomial(kabc, "x")
84
+ x = pkabc.var
85
+ f = eval fs
86
+ test(f, ", in Q[a, b, c, x]/(#{as}, #{bs}, #{cs})")
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,4 @@
1
+ test-00-cayley-hamilton.rb 3
2
+ test-00-groebner-basis.rb -1
3
+ test-00-groebner-basis.rb 0
4
+ test-00-polynomial-factor-alg.rb 0 0 0
@@ -0,0 +1,65 @@
1
+ # Time Trial
2
+ #
3
+ # by Shin-ichiro Hara
4
+ #
5
+ # Version 1.0 (2001.04.01)
6
+
7
+ class TimeTrial
8
+ def initialize(name = type.name)
9
+ @name = name
10
+ @time = 0
11
+ @ntime = 0
12
+ @open = false
13
+ end
14
+
15
+ def start
16
+ begin
17
+ open
18
+ yield @ntime
19
+ ensure
20
+ close
21
+ end
22
+ end
23
+
24
+ def open
25
+ @ntime += 1
26
+ if @open
27
+ $stderr.puts "TimeTrial: warning (duplicate open)"
28
+ end
29
+ @open = true
30
+ @stime = Time.now
31
+ end
32
+
33
+ def close
34
+ @time += Time.now - @stime
35
+ unless @open
36
+ $stderr.puts "TimeTrial: warning (duplicate close)"
37
+ end
38
+ @open = nil
39
+ end
40
+
41
+ def to_s
42
+ "#{@name}: #{@time} sec. (#{@ntime} times)"
43
+ end
44
+
45
+ def self.[](s)
46
+ s.split("\s*,\s*").collect{ |name| new(name) }
47
+ end
48
+
49
+ alias inspect to_s
50
+ end
51
+
52
+ if __FILE__ == $0
53
+ $a, $b = TimeTrial["addition, multiplication"]
54
+ x = 0
55
+ y = 1
56
+ 0.upto 10000 do |i|
57
+ $a.start{
58
+ x += i
59
+ }
60
+ $b.start{
61
+ y *= i
62
+ }
63
+ end
64
+ puts $a, $b
65
+ end
metadata ADDED
@@ -0,0 +1,373 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: algebra
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Takeo Kunishima
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-08-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: This is a library for mathematical computations. Our purpose is to express
56
+ the mathematical object naturally in Ruby. Though it is not operated fast, we can
57
+ see the algorithm of the mathematical processing not in black box but in scripts. This
58
+ library is in development stage.
59
+ email:
60
+ - t.kunishi@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - ".gitignore"
66
+ - ".travis.yml"
67
+ - CODE_OF_CONDUCT.md
68
+ - Gemfile
69
+ - Gemfile.lock
70
+ - LICENSE.txt
71
+ - README-ja.txt
72
+ - README.md
73
+ - Rakefile
74
+ - algebra.gemspec
75
+ - bin/console
76
+ - bin/setup
77
+ - doc-ja/README-ja.html
78
+ - doc-ja/README-ja.rd
79
+ - doc-ja/README.html
80
+ - doc-ja/README.rd
81
+ - doc-ja/algebra-ja.html
82
+ - doc-ja/algebra-ja.rd
83
+ - doc-ja/algebraic-equation-ja.html
84
+ - doc-ja/algebraic-equation-ja.rd
85
+ - doc-ja/algebraic-extension-field-ja.html
86
+ - doc-ja/algebraic-extension-field-ja.rd
87
+ - doc-ja/algebraic-parser-ja.html
88
+ - doc-ja/algebraic-parser-ja.rd
89
+ - doc-ja/changes.html
90
+ - doc-ja/changes.rd
91
+ - doc-ja/elementary-divisor-ja.html
92
+ - doc-ja/elementary-divisor-ja.rd
93
+ - doc-ja/euclidian-ring-ja.html
94
+ - doc-ja/euclidian-ring-ja.rd
95
+ - doc-ja/finite-group-ja.html
96
+ - doc-ja/finite-group-ja.rd
97
+ - doc-ja/finite-map-ja.html
98
+ - doc-ja/finite-map-ja.rd
99
+ - doc-ja/finite-set-ja.html
100
+ - doc-ja/finite-set-ja.rd
101
+ - doc-ja/index-ja.html
102
+ - doc-ja/index-ja.rd
103
+ - doc-ja/jordan-form-ja.html
104
+ - doc-ja/jordan-form-ja.rd
105
+ - doc-ja/localized-ring-ja.html
106
+ - doc-ja/localized-ring-ja.rd
107
+ - doc-ja/m-polynomial-ja.html
108
+ - doc-ja/m-polynomial-ja.rd
109
+ - doc-ja/matrix-algebra-ja.html
110
+ - doc-ja/matrix-algebra-ja.rd
111
+ - doc-ja/matrix-algebra-triplet-ja.html
112
+ - doc-ja/matrix-algebra-triplet-ja.rd
113
+ - doc-ja/permutation-group-ja.html
114
+ - doc-ja/permutation-group-ja.rd
115
+ - doc-ja/polynomial-converter-ja.html
116
+ - doc-ja/polynomial-converter-ja.rd
117
+ - doc-ja/polynomial-ja.html
118
+ - doc-ja/polynomial-ja.rd
119
+ - doc-ja/residue-class-ring-ja.html
120
+ - doc-ja/residue-class-ring-ja.rd
121
+ - doc-ja/sample-algebraic-equation01.rb.v.rd
122
+ - doc-ja/sample-algebraic-equation02.rb.v.rd
123
+ - doc-ja/sample-algebraic-root01.rb.v.rd
124
+ - doc-ja/sample-algebraicfield01.rb.v.rd
125
+ - doc-ja/sample-algebraicfield02.rb.v.rd
126
+ - doc-ja/sample-cayleyhamilton01.rb.v.rd
127
+ - doc-ja/sample-diagonalization01.rb.v.rd
128
+ - doc-ja/sample-divmod01.rb.v.rd
129
+ - doc-ja/sample-elementary-divisor01.rb.v.rd
130
+ - doc-ja/sample-factorize01.rb.v.rd
131
+ - doc-ja/sample-factorize02.rb.v.rd
132
+ - doc-ja/sample-factorize03.rb.v.rd
133
+ - doc-ja/sample-factorize04.rb.v.rd
134
+ - doc-ja/sample-factorize05.rb.v.rd
135
+ - doc-ja/sample-galois-group01.rb.v.rd
136
+ - doc-ja/sample-gaussian-elimination01.rb.v.rd
137
+ - doc-ja/sample-geometry01.rb.v.rd
138
+ - doc-ja/sample-geometry02.rb.v.rd
139
+ - doc-ja/sample-geometry03.rb.v.rd
140
+ - doc-ja/sample-geometry04.rb.v.rd
141
+ - doc-ja/sample-geometry07.rb.v.rd
142
+ - doc-ja/sample-groebner01.rb.v.rd
143
+ - doc-ja/sample-groebner02.rb.v.rd
144
+ - doc-ja/sample-groebner03.rb.v.rd
145
+ - doc-ja/sample-group01.rb.v.rd
146
+ - doc-ja/sample-jordan-form01.rb.v.rd
147
+ - doc-ja/sample-jordanform01.rb.v.rd
148
+ - doc-ja/sample-lagrange-multiplier01.rb.v.rd
149
+ - doc-ja/sample-m-factorize01.rb.v.rd
150
+ - doc-ja/sample-m-factorize02.rb.v.rd
151
+ - doc-ja/sample-m-polynomial01.rb.v.rd
152
+ - doc-ja/sample-map01.rb.v.rd
153
+ - doc-ja/sample-polynomial01.rb.v.rd
154
+ - doc-ja/sample-polynomial02.rb.v.rd
155
+ - doc-ja/sample-primefield01.rb.v.rd
156
+ - doc-ja/sample-quotientfield01.rb.v.rd
157
+ - doc-ja/sample-quotientfield02.rb.v.rd
158
+ - doc-ja/sample-quotientfield03.rb.v.rd
159
+ - doc-ja/sample-quotientfield04.rb.v.rd
160
+ - doc-ja/sample-set01.rb.v.rd
161
+ - doc-ja/sample-splitting-field01.rb.v.rd
162
+ - doc-ja/samples-ja.html
163
+ - doc-ja/samples-ja.rd
164
+ - doc-ja/style.css
165
+ - doc-ja/todo.html
166
+ - doc-ja/todo.rd
167
+ - doc/README.html
168
+ - doc/README.rd
169
+ - doc/algebra.html
170
+ - doc/algebra.rd
171
+ - doc/algebraic-equation.html
172
+ - doc/algebraic-equation.rd
173
+ - doc/algebraic-extension-field.html
174
+ - doc/algebraic-extension-field.rd
175
+ - doc/algebraic-parser.html
176
+ - doc/algebraic-parser.rd
177
+ - doc/changes.html
178
+ - doc/changes.rd
179
+ - doc/elementary-divisor.html
180
+ - doc/elementary-divisor.rd
181
+ - doc/euclidian-ring.html
182
+ - doc/euclidian-ring.rd
183
+ - doc/finite-group.html
184
+ - doc/finite-group.rd
185
+ - doc/finite-map.html
186
+ - doc/finite-map.rd
187
+ - doc/finite-set.html
188
+ - doc/finite-set.rd
189
+ - doc/index.html
190
+ - doc/index.rd
191
+ - doc/jordan-form.html
192
+ - doc/jordan-form.rd
193
+ - doc/localized-ring.html
194
+ - doc/localized-ring.rd
195
+ - doc/m-polynomial.html
196
+ - doc/m-polynomial.rd
197
+ - doc/matrix-algebra-triplet.html
198
+ - doc/matrix-algebra-triplet.rd
199
+ - doc/matrix-algebra.html
200
+ - doc/matrix-algebra.rd
201
+ - doc/permutation-group.html
202
+ - doc/permutation-group.rd
203
+ - doc/polynomial-converter.html
204
+ - doc/polynomial-converter.rd
205
+ - doc/polynomial.html
206
+ - doc/polynomial.rd
207
+ - doc/residue-class-ring.html
208
+ - doc/residue-class-ring.rd
209
+ - doc/sample-algebraic-equation01.rb.v.rd
210
+ - doc/sample-algebraic-equation02.rb.v.rd
211
+ - doc/sample-algebraic-root01.rb.v.rd
212
+ - doc/sample-algebraicfield01.rb.v.rd
213
+ - doc/sample-algebraicfield02.rb.v.rd
214
+ - doc/sample-cayleyhamilton01.rb.v.rd
215
+ - doc/sample-diagonalization01.rb.v.rd
216
+ - doc/sample-divmod01.rb.v.rd
217
+ - doc/sample-elementary-divisor01.rb.v.rd
218
+ - doc/sample-factorize01.rb.v.rd
219
+ - doc/sample-factorize02.rb.v.rd
220
+ - doc/sample-factorize03.rb.v.rd
221
+ - doc/sample-factorize04.rb.v.rd
222
+ - doc/sample-factorize05.rb.v.rd
223
+ - doc/sample-galois-group01.rb.v.rd
224
+ - doc/sample-gaussian-elimination01.rb.v.rd
225
+ - doc/sample-geometry01.rb.v.rd
226
+ - doc/sample-geometry02.rb.v.rd
227
+ - doc/sample-geometry03.rb.v.rd
228
+ - doc/sample-geometry04.rb.v.rd
229
+ - doc/sample-geometry07.rb.v.rd
230
+ - doc/sample-groebner01.rb.v.rd
231
+ - doc/sample-groebner02.rb.v.rd
232
+ - doc/sample-groebner03.rb.v.rd
233
+ - doc/sample-group01.rb.v.rd
234
+ - doc/sample-jordan-form01.rb.v.rd
235
+ - doc/sample-lagrange-multiplier01.rb.v.rd
236
+ - doc/sample-m-factorize01.rb.v.rd
237
+ - doc/sample-m-factorize02.rb.v.rd
238
+ - doc/sample-m-polynomial01.rb.v.rd
239
+ - doc/sample-map01.rb.v.rd
240
+ - doc/sample-polynomial01.rb.v.rd
241
+ - doc/sample-polynomial02.rb.v.rd
242
+ - doc/sample-primefield01.rb.v.rd
243
+ - doc/sample-quotientfield01.rb.v.rd
244
+ - doc/sample-quotientfield02.rb.v.rd
245
+ - doc/sample-quotientfield03.rb.v.rd
246
+ - doc/sample-quotientfield04.rb.v.rd
247
+ - doc/sample-set01.rb.v.rd
248
+ - doc/sample-splitting-field01.rb.v.rd
249
+ - doc/samples.html
250
+ - doc/samples.rd
251
+ - doc/style.css
252
+ - doc/todo.html
253
+ - doc/todo.rd
254
+ - lib/algebra.rb
255
+ - lib/algebra/algebraic-equation.rb
256
+ - lib/algebra/algebraic-extension-field.rb
257
+ - lib/algebra/algebraic-parser.rb
258
+ - lib/algebra/algebraic-system.rb
259
+ - lib/algebra/annihilate.rb
260
+ - lib/algebra/array-supplement.rb
261
+ - lib/algebra/auto-require.rb
262
+ - lib/algebra/chinese-rem-th.rb
263
+ - lib/algebra/combinatorial.rb
264
+ - lib/algebra/elementary-divisor.rb
265
+ - lib/algebra/euclidian-ring.rb
266
+ - lib/algebra/factors.rb
267
+ - lib/algebra/finite-group.rb
268
+ - lib/algebra/finite-map.rb
269
+ - lib/algebra/finite-set.rb
270
+ - lib/algebra/galois-group.rb
271
+ - lib/algebra/gaussian-elimination.rb
272
+ - lib/algebra/groebner-basis-coeff.rb
273
+ - lib/algebra/groebner-basis.rb
274
+ - lib/algebra/import-module-single-thread.rb
275
+ - lib/algebra/import-module.rb
276
+ - lib/algebra/jordan-form.rb
277
+ - lib/algebra/linear-algebra.rb
278
+ - lib/algebra/localized-ring.rb
279
+ - lib/algebra/m-index.rb
280
+ - lib/algebra/m-polynomial-factor-int.rb
281
+ - lib/algebra/m-polynomial-factor-zp.rb
282
+ - lib/algebra/m-polynomial-factor.rb
283
+ - lib/algebra/m-polynomial-gcd.rb
284
+ - lib/algebra/m-polynomial.rb
285
+ - lib/algebra/matrix-algebra-triplet.rb
286
+ - lib/algebra/matrix-algebra.rb
287
+ - lib/algebra/numeric-supplement.rb
288
+ - lib/algebra/permutation-group.rb
289
+ - lib/algebra/polynomial-converter.rb
290
+ - lib/algebra/polynomial-factor-alg.rb
291
+ - lib/algebra/polynomial-factor-int.rb
292
+ - lib/algebra/polynomial-factor-zp.rb
293
+ - lib/algebra/polynomial-factor.rb
294
+ - lib/algebra/polynomial.rb
295
+ - lib/algebra/powers.rb
296
+ - lib/algebra/prime-gen.rb
297
+ - lib/algebra/rational.rb
298
+ - lib/algebra/residue-class-ring.rb
299
+ - lib/algebra/sets-system.rb
300
+ - lib/algebra/splitting-field.rb
301
+ - lib/algebra/version.rb
302
+ - sample/Makefile
303
+ - sample/do-testscripts.rb
304
+ - sample/sample-algebraic-equation01.rb
305
+ - sample/sample-algebraic-equation02.rb
306
+ - sample/sample-algebraic-root01.rb
307
+ - sample/sample-algebraicfield01.rb
308
+ - sample/sample-algebraicfield02.rb
309
+ - sample/sample-cayleyhamilton01.rb
310
+ - sample/sample-diagonalization01.rb
311
+ - sample/sample-divmod01.rb
312
+ - sample/sample-elementary-divisor01.rb
313
+ - sample/sample-factorize01.rb
314
+ - sample/sample-factorize02.rb
315
+ - sample/sample-factorize03.rb
316
+ - sample/sample-factorize04.rb
317
+ - sample/sample-factorize05.rb
318
+ - sample/sample-galois-group01.rb
319
+ - sample/sample-gaussian-elimination01.rb
320
+ - sample/sample-geometry01.rb
321
+ - sample/sample-geometry02.rb
322
+ - sample/sample-geometry03.rb
323
+ - sample/sample-geometry04.rb
324
+ - sample/sample-geometry07.rb
325
+ - sample/sample-groebner01.rb
326
+ - sample/sample-groebner02.rb
327
+ - sample/sample-groebner03.rb
328
+ - sample/sample-group01.rb
329
+ - sample/sample-jordan-form01.rb
330
+ - sample/sample-lagrange-multiplier01.rb
331
+ - sample/sample-m-factorize01.rb
332
+ - sample/sample-m-factorize02.rb
333
+ - sample/sample-m-polynomial01.rb
334
+ - sample/sample-map01.rb
335
+ - sample/sample-polynomial01.rb
336
+ - sample/sample-polynomial02.rb
337
+ - sample/sample-primefield01.rb
338
+ - sample/sample-quotientfield01.rb
339
+ - sample/sample-quotientfield02.rb
340
+ - sample/sample-quotientfield03.rb
341
+ - sample/sample-quotientfield04.rb
342
+ - sample/sample-set01.rb
343
+ - sample/sample-splitting-field01.rb
344
+ - sample/test-00-cayley-hamilton.rb
345
+ - sample/test-00-groebner-basis.rb
346
+ - sample/test-00-polynomial-factor-alg.rb
347
+ - sample/test-00.list
348
+ - sample/time-trial.rb
349
+ homepage: https://github.com/kunishi/algebra-ruby2
350
+ licenses:
351
+ - MIT
352
+ metadata: {}
353
+ post_install_message:
354
+ rdoc_options: []
355
+ require_paths:
356
+ - lib
357
+ required_ruby_version: !ruby/object:Gem::Requirement
358
+ requirements:
359
+ - - ">="
360
+ - !ruby/object:Gem::Version
361
+ version: '0'
362
+ required_rubygems_version: !ruby/object:Gem::Requirement
363
+ requirements:
364
+ - - ">="
365
+ - !ruby/object:Gem::Version
366
+ version: '0'
367
+ requirements: []
368
+ rubyforge_project:
369
+ rubygems_version: 2.5.1
370
+ signing_key:
371
+ specification_version: 4
372
+ summary: a library for mathematical computations.
373
+ test_files: []