Module: Algebra

Defined in:
lib/algebra/factors.rb,
lib/algebra.rb,
lib/algebra/powers.rb,
lib/algebra/m-index.rb,
lib/algebra/version.rb,
lib/algebra/annihilate.rb,
lib/algebra/finite-map.rb,
lib/algebra/finite-set.rb,
lib/algebra/polynomial.rb,
lib/algebra/jordan-form.rb,
lib/algebra/finite-group.rb,
lib/algebra/galois-group.rb,
lib/algebra/m-polynomial.rb,
lib/algebra/chinese-rem-th.rb,
lib/algebra/euclidian-ring.rb,
lib/algebra/groebner-basis.rb,
lib/algebra/linear-algebra.rb,
lib/algebra/localized-ring.rb,
lib/algebra/matrix-algebra.rb,
lib/algebra/splitting-field.rb,
lib/algebra/algebraic-parser.rb,
lib/algebra/algebraic-system.rb,
lib/algebra/m-polynomial-gcd.rb,
lib/algebra/permutation-group.rb,
lib/algebra/polynomial-factor.rb,
lib/algebra/algebraic-equation.rb,
lib/algebra/elementary-divisor.rb,
lib/algebra/residue-class-ring.rb,
lib/algebra/m-polynomial-factor.rb,
lib/algebra/gaussian-elimination.rb,
lib/algebra/groebner-basis-coeff.rb,
lib/algebra/polynomial-converter.rb,
lib/algebra/polynomial-factor-zp.rb,
lib/algebra/polynomial-factor-alg.rb,
lib/algebra/polynomial-factor-int.rb,
lib/algebra/m-polynomial-factor-zp.rb,
lib/algebra/matrix-algebra-triplet.rb,
lib/algebra/m-polynomial-factor-int.rb,
lib/algebra/algebraic-extension-field.rb

Overview

require “algebra/combinatorial”

Defined Under Namespace

Modules: AlgebraBase, AlgebraCreator, AlgebraicEquation, ChineseRemainderTheorem, ElementaryDivisor, EuclidianRing, Galois, GaussianElimination, Groebner, InnerProductSpace, MPolynomialConvertTo, MPolynomialConverter, MPolynomialFactorization, OperatorDomain, Orthogonalization, PolynomialConvertTo, PolynomialConverter, PolynomialFactorization, Powers, SplittingField Classes: AlgebraicExtensionField, AlgebraicParser, Covector, Factors, Group, JordanForm, LocalizedRing, MIndex, MPolynomial, Map, MatrixAlgebra, MatrixAlgebraQuint, MatrixAlgebraTriplet, Permutation, PermutationGroup, Polynomial, QuotientGroup, ResidueClassRing, Scalar, Set, SquareMatrix, Vector

Constant Summary collapse

VERSION =
"0.2.3"

Class Method Summary collapse

Class Method Details

.AlgebraicExtensionField(field, var = 'x', &b) ⇒ Object



12
13
14
# File 'lib/algebra/algebraic-extension-field.rb', line 12

def AlgebraicExtensionField(field, var = 'x', &b)
  AlgebraicExtensionField.create(field, var, &b)
end

.Covector(ground, size) ⇒ Object



41
42
43
# File 'lib/algebra/matrix-algebra.rb', line 41

def Covector(ground, size)
  Covector.create(ground, size)
end

.LocalizedRing(ring) ⇒ Object



11
12
13
# File 'lib/algebra/localized-ring.rb', line 11

def LocalizedRing(ring)
  LocalizedRing.create(ring)
end

.MatrixAlgebra(ground, rsize, csize) ⇒ Object



29
30
31
# File 'lib/algebra/matrix-algebra.rb', line 29

def MatrixAlgebra(ground, rsize, csize)
  MatrixAlgebra.create(ground, rsize, csize)
end

.MinimalDecompositionField(f, *a) ⇒ Object

for backward compatibility



99
100
101
# File 'lib/algebra/splitting-field.rb', line 99

def MinimalDecompositionField(f, *a)
  f.decompose(*a)
end

.MPolynomial(ground, *vars) ⇒ Object



12
13
14
# File 'lib/algebra/m-polynomial.rb', line 12

def MPolynomial(ground, *vars)
  Algebra::MPolynomial.create(ground, *vars)
end

.MRationalFunctionField(field, *objs) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/algebra/localized-ring.rb', line 28

def MRationalFunctionField(field, *objs)
  require 'algebra/m-polynomial'
  k = LocalizedRing(MPolynomial(field, *objs))
  def k.vars(*vs)
    ground.vars(*vs).map { |v| self[v] }
  end

  def k.to_ary
    [self, *vars]
  end
  k.reducible = false
  k
end

.Polynomial(ground = Integer, *variables) ⇒ Object



11
12
13
# File 'lib/algebra/polynomial.rb', line 11

def Polynomial(ground = Integer, *variables)
  Polynomial.create(ground, *variables)
end

.QuadraticExtensionField(field, var_obj = nil) ⇒ Object

experimental ###################



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/algebra/algebraic-extension-field.rb', line 66

def QuadraticExtensionField(field, var_obj = nil)
  poly_ring = Algebra.Polynomial(field, 'x')
  modulus = yield(poly_ring.var)
  unless modulus.deg == 2
    raise 'give deg 2 polynomial to QuadraticicExtensionField.'
  end

  fact = modulus.factorize
  if o = fact.find { |x| x[0].deg == 1 }
    b = o[0][0]
    a = o[0][1]
    c = b / a
    return [field, - c, c]
  end

  c = modulus[0]
  b = modulus[1]
  a = modulus[2]
  a2 = a * 2
  b0 = a2.zero? ? b : (b / a2)
  c1 = c / a - b0**2
  cs = (-c1).to_s
  r = 'r'
  var_obj ||= r + (/^\d+$/ !~ cs ? '(' + cs + ')' : cs)

  klass, v = AlgebraicExtensionField(field, var_obj) { |x| x**2 + c1 }

  r1 = v - b0
  r2 = - v - b0
  [klass, r1, r2]
end

.RationalFunctionField(field, obj) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/algebra/localized-ring.rb', line 15

def RationalFunctionField(field, obj)
  require 'algebra/polynomial'
  k = LocalizedRing(Polynomial(field, obj))
  def k.var
    self[ground.var]
  end

  def k.to_ary
    [self, var]
  end
  k
end

.ResidueClassRing(klass, mod) ⇒ Object



12
13
14
# File 'lib/algebra/residue-class-ring.rb', line 12

def ResidueClassRing(klass, mod)
  ResidueClassRing.create(klass, mod)
end

.Root(field, a = nil, deg = 2, cs = nil, &b) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/algebra/algebraic-extension-field.rb', line 105

def Root(field, a = nil, deg = 2, cs = nil, &b)
  r, x = Polynomial(field)
  if b
    f = yield(x)
    as = a ? a.to_s : f.to_s
  else
    f = x**deg - a
    as = a.to_s
  end

  r = deg == 2 ? 'r' : "r[#{deg}]"
  cs ||= r + (/^\d+$/ !~ as ? '(' + as + ')' : as)
  k = f.splitting_field(nil, cs)
  [k.field, *k.roots]
end

.Sqrt(field, a, _name = nil) ⇒ Object



99
100
101
# File 'lib/algebra/algebraic-extension-field.rb', line 99

def Sqrt(field, a, _name = nil)
  QuadraticExtensionField(field, nil) { |x| x**2 - a }
end

.SquareMatrix(ground, size) ⇒ Object



33
34
35
# File 'lib/algebra/matrix-algebra.rb', line 33

def SquareMatrix(ground, size)
  SquareMatrix.create(ground, size)
end

.Vector(ground, size) ⇒ Object



37
38
39
# File 'lib/algebra/matrix-algebra.rb', line 37

def Vector(ground, size)
  Vector.create(ground, size)
end