class Math::SparseMatrix

Clase que permite representar un vector de vectores dispersos, es decir, una matriz dispersa

Attributes

matrix[R]

Public Class Methods

new(h = {}) click to toggle source
# File lib/matrix_disp.rb, line 173
def initialize(h = {})
  @matrix = Hash.new({})
  for k in h.keys do 
    @matrix[k] = if h[k].is_a? SparseVector
                   h[k]
                 else 
                   @matrix[k] = SparseVector.new(h[k])
                 end
  end
end

Public Instance Methods

+(other) click to toggle source

método que permite la suma de matrices dispersas

# File lib/matrix_disp.rb, line 210
def +(other)
  resultado = SparseMatrix.new
  for i in other.matrix.keys do
    resultado.matrix[i] = other[i]
  end
  for i in @matrix.keys do
    for j in @matrix[i].keys do
            if other.matrix[i][j] == nil
              resultado.matrix[i] = @matrix[i]
            else
              resultado.matrix[i][j] = @matrix[i][j]+other.matrix[i][j]
            end
    end
  end
  resultado
end
-(other) click to toggle source

método que permite la resta de matrices dispersas

# File lib/matrix_disp.rb, line 227
def -(other)
    resultado = SparseMatrix.new
    for i in other.matrix.keys do
      resultado.matrix[i] = other[i]
    end
    for i in @matrix.keys do
      for j in @matrix[i].keys do
            if other.matrix[i][j] == nil
              resultado.matrix[i] = @matrix[i]
            else
              resultado.matrix[i][j] = @matrix[i][j]-other.matrix[i][j]
            end
      end
    end
    resultado
end
[](i) click to toggle source

método que permite la indexación de elementos de la matriz por columnas

# File lib/matrix_disp.rb, line 184
def [](i)
  @matrix[i]
end
[]=(i,other) click to toggle source

método que permite la asignación de elementos de la matriz por columnas

# File lib/matrix_disp.rb, line 188
def []=(i,other)
  for y in other.keys do
    puts "---- other[#{y}] #{other[y]}"
    @matrix[i][y] = other[y]
    puts "---- matrix[#{i}][#{y}] #{@matrix[i][y]}"
  end
end
col(j) click to toggle source

método que muestra por pantalla una columna de la matriz

# File lib/matrix_disp.rb, line 202
def col(j)
  c = {}
  for r in @matrix.keys do
    c[r] = @matrix[r].vector[j] if @matrix[r].vector.keys.include? j
  end
  SparseVector.new c
end
imp() click to toggle source

método que muestra por pantalla la matriz dispersa

# File lib/matrix_disp.rb, line 196
def imp
  for i in @matrix.keys do
    puts "#{i} ---- #{@matrix[i].to_s}" 
  end
end
max() click to toggle source

método que permite calcular el elemento máximo de una matriz dispersa

# File lib/matrix_disp.rb, line 262
def max
  max = 0
  for i in @matrix.keys do
    for j in @matrix[i].keys do
      if @matrix[i][j].is_a? Fraccion
            tmp = Fraccion.new(max,1)
            if @matrix[i][j] > tmp
              max = @matrix[i][j].to_f
            end
            else
            if @matrix[i][j] > max
              max = @matrix[i][j]
            end
      end
    end
  end
  max
end
min() click to toggle source

método que permite calcular el elemento mínimo de una matriz dispersa

# File lib/matrix_disp.rb, line 281
def min
  min = 9999999999999999999
  for i in @matrix.keys do
    for j in @matrix[i].keys do
      if @matrix[i][j].is_a? Fraccion
            tmp = Fraccion.new(min,1)
            if @matrix[i][j] < tmp
              min = @matrix[i][j].to_f
            end
            else
            if @matrix[i][j] < min
              min = @matrix[i][j]
            end
      end
    end
  end
  min
end
traspuesta() click to toggle source

método que permite calcular la traspuesta de una matriz dispersa

# File lib/matrix_disp.rb, line 244
def traspuesta
  resultado = SparseMatrix.new
  for i in @matrix.keys do
    for j in @matrix[i].keys do
            tmp = SparseVector.new
            for x in @matrix.keys do
              for y in @matrix[x].keys do
                if j == y
                  tmp[i] = @matrix[x][y]
                end
              end
            end
            resultado.matrix[j] = tmp
    end
  end
  resultado
end