class Algebra::MatrixAlgebraTriplet

Attributes

body[R]
ground[R]
left[R]
right[R]

Public Class Methods

new(matrix, left = nil, right = nil) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 26
def initialize(matrix, left = nil, right = nil)
  @body = matrix
  @type = @body.class
  @ground = @type.ground
  @left_type = Algebra.SquareMatrix(@type.ground, @type.rsize)
  @right_type = Algebra.SquareMatrix(@type.ground, @type.csize)
  @left = left ? left : @left_type.unity
  @right = right ? right : @right_type.unity
end

Public Instance Methods

[](i, j) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 65
def [](i, j)
  @body[i, j]
end
csize() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 73
def csize
  @body.csize
end
display() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 55
def display
  puts '============= begin'
  @left.display
  puts
  @body.display
  puts
  @right.display
  puts '============= end'
end
divide_c!(j, c) click to toggle source

def divide_r(i, c)

dup.divide_r!(i, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 145
def divide_c!(j, c)
  @body.divide_c!(j, c)
  @right.divide_c!(j, c)
end
divide_r!(i, c) click to toggle source

def multiply_c(j, c)

dup.multiply_c!(j, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 136
def divide_r!(i, c)
  @left.divide_r!(i, c)
  @body.divide_r!(i, c)
end
dup() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 42
def dup
  self.class.new(body.dup, left.dup, right.dup)
end
each_i(&block) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 77
def each_i(&block)
  @body.each_i(&block)
end
each_j(&block) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 81
def each_j(&block)
  @body.each_j(&block)
end
left_eliminate!() click to toggle source

def mix_c(i, j, c = nil)

dup.mix_c!(i, j, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 174
def left_eliminate!
  #    inv = Algebra.SquareMatrix(ground, rsize).unity
  k = ground.unity
  pi = 0
  each_j do |j|
    next unless i = (pi...rsize).find { |i1| !self[i1, j].zero? }
    if i != pi
      swap_r!(pi, i) # ; inv.swap_r!(pi, i)
      k = -k
    end
    c = ground.unity / self[pi, j] # this lets the entries be in ground
    multiply_r!(pi, c) # ; inv.multiply_r!(pi, c)
    k *= c
    each_i do |i0|
      next if i0 == pi
      d = self[i0, j] # / self[pi, j]
      mix_r!(i0, pi, -d) # ; inv.mix_r!(i0, pi, -d)
    end
    pi += 1
  end
  [left, k]
end
mix_c!(i, j, c = nil) click to toggle source

def mix_r(i, j, c = nil)

dup.mix_r!(i, j, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 164
def mix_c!(i, j, c = nil)
  @body.mix_c!(i, j, c)
  @right.mix_c!(i, j, c)
  self
end
mix_r!(i, j, c = nil) click to toggle source

def divide_c(j, c)

dup.divide_c!(j, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 154
def mix_r!(i, j, c = nil)
  @left.mix_r!(i, j, c)
  @body.mix_r!(i, j, c)
  self
end
multiply_c!(j, c) click to toggle source

def multiply_r(i, c)

dup.multiply_r!(i, c)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 126
def multiply_c!(j, c)
  @body.multiply_c!(j, c)
  @right.multiply_c!(j, c)
  self
end
multiply_r!(i, c) click to toggle source

def swap_c(i, j)

dup.swap_c!(i, j)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 116
def multiply_r!(i, c)
  @left.multiply_r!(i, c)
  @body.multiply_r!(i, c)
  self
end
replace(other) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 50
def replace(other)
  initialize(other.body, other.left, other.right)
  self
end
row!(i) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 85
def row!(i)
  @body.row!(i)
end
rsize() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 69
def rsize
  @body.rsize
end
sswap_r!(i, j) click to toggle source

ElementaryOpeartion

# File lib/algebra/matrix-algebra-triplet.rb, line 90
def sswap_r!(i, j)
  @left.sswap_r!(i, j)
  @body.sswap_r!(i, j)
  self
end
swap_c!(i, j) click to toggle source

def swap_r(i, j)

dup.swap_r!(i, j)

end

# File lib/algebra/matrix-algebra-triplet.rb, line 106
def swap_c!(i, j)
  @body.swap_c!(i, j)
  @right.swap_c!(i, j)
  self
end
swap_r!(i, j) click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 96
def swap_r!(i, j)
  @left.swap_r!(i, j)
  @body.swap_r!(i, j)
  self
end
to_a()
Alias for: to_ary
to_ary() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 36
def to_ary
  [body, left, right]
end
Also aliased as: to_a
transpose() click to toggle source
# File lib/algebra/matrix-algebra-triplet.rb, line 46
def transpose
  self.class.new(body.transpose, right.transpose, left.transpose)
end