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_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