class Matrixlpp::Matriz
Esta clase contendrá el número de filas y columnas de la matriz.
Attributes
Número de columnas.
Número de filas.
Vector que contendrá los datos de la matriz.
Public Class Methods
Constructor de la matriz. Crea una matriz de tamaño N*M sin contenido, inicializando sólo N
y M
.
-
Argumentos :
-
n
: Número de filas. Debe ser mayor que 0. -
m
: Número de columnas. Debe ser mayor que 0.
-
# File lib/matrixlpp/matriz.rb, line 17 def initialize(n, m) raise ArgumentError, 'Indice no valido' unless n.is_a? Fixnum and n > 0 and m.is_a? Fixnum and m > 0 @N, @M = n, m end
Public Instance Methods
Permite multiplicar un elemento a una matriz.
# File lib/matrixlpp/matriz_operaciones.rb, line 56 def *(other) raise ArgumentError , 'Parametro invalido' unless other.is_a? Numeric or other.is_a? Matriz if(other.is_a? Numeric) # Matriz * numero c = Matriz_Densa.new(@N, @M) (@N).times do |i| (@M).times do |j| c.set(i, j, get(i,j)*other) end end else # Matriz * Matriz raise ArgumentError , 'Matriz no compatible (A.N == B.M)' unless @M == other.N c = Matriz_Densa.new(@N, other.M) (@N).times do |i| (other.M).times do |j| buffer = (0...@M).inject(0) { |acc, k| get(i, k) * other.get(k,j) + acc } c.set(i, j, buffer) #(@M).times do |k| # Esto NO es programación funcional... # c.set(i, j, get(i, k) * other.get(k,j) + c.get(i,j)) #end end end end if (c.null_percent > 0.6) return Matrixlpp::Matriz_Dispersa.copy(c) else return c end end
Permite sumar matrices (dispersas o densas) de iguales dimensiones.
-
Argumentos :
-
other
:Matriz
densa o dispersa. Debe ser de igual tamaño que la actual.
-
-
Devuelve :
-
Matriz
de tamaño N*M resultado de la suma de la matriz actual conother
. Si el porcentaje de valores nulos es mayor al 60%, se devuelve una matriz dispersa. Si no, se devuelve una matriz densa.
-
# File lib/matrixlpp/matriz_operaciones.rb, line 12 def +(other) raise ArgumentError , 'Tipo invalido' unless other.is_a? Matriz raise ArgumentError , 'Matriz no compatible' unless @N == other.N and @M == other.M c = Matriz_Densa.new(@N, @M) #(0...@N).each do |i| #(0...@M).each do |j| (@N).times do |i| (@M).times do |j| c.set(i, j, get(i,j) + other.get(i,j)) end end if (c.null_percent > 0.6) return Matrixlpp::Matriz_Dispersa.copy(c) else return c end end
Permite restar matrices (dispersas o densas) de iguales dimensiones.
-
Argumentos :
-
other
:Matriz
densa o dispersa. Debe ser de igual tamaño que la actual.
-
-
Devuelve :
-
Matriz
de tamaño N*M resultado de la resta de la matriz actual conother
. Si el porcentaje de valores nulos es mayor al 60%, se devuelve una matriz dispersa. Si no, se devuelve una matriz densa.
-
# File lib/matrixlpp/matriz_operaciones.rb, line 37 def -(other) raise ArgumentError , 'Tipo invalido' unless other.is_a? Matriz raise ArgumentError , 'Matriz no compatible' unless @N == other.N and @M == other.M c = Matriz_Densa.new(@N, @M) (@N).times do |i| (@M).times do |j| c.set(i, j, get(i,j) - other.get(i,j)) end end if (c.null_percent > 0.6) return Matrixlpp::Matriz_Dispersa.copy(c) else return c end end
Método que permite acceder a un elemento de la matriz. Devuelve nil. Redefinido en clases hijas.
# File lib/matrixlpp/matriz.rb, line 24 def get(i, j) nil end
Método que permite almacenar un elemento en la matriz. Devuelve nil. Redefinido en clases hijas.
# File lib/matrixlpp/matriz.rb, line 28 def set(i, j, val) nil end