# File lib/sparse_matrix.rb, line 77 def initialize(*args) @n,@m=args[0],args[1] datos = args[2] @MAT = Array.new() for i in 0...@n for j in 0...@m if datos[i][j] != 0 @MAT[i]=SparseVector.new(i,j,datos[i][j]) end end end @max=max() @min=min() end
# File lib/sparse_matrix.rb, line 164 def *(b) #metodo para multiplicar matrices, dispersa como densas if b.instance_of? SparseMatrix c = DenseMatrix.new(2,2,[[0.0,0.0],[0.0,0.0]]) 0.upto @MAT.size-1 do |i| 0.upto @MAT.size-1 do |j| c.mat[i][j]=0 0.upto @MAT.size-1 do |k| c.mat[i][j] += self.valor(i,k)*b.valor(k,j) end end end c else c = DenseMatrix.new(2,2,[[0.0,0.0],[0.0,0.0]]) 0.upto @MAT.size-1 do |i| 0.upto @MAT.size-1 do |j| c.mat[i][j]=0 0.upto @MAT.size-1 do |k| c.mat[i][j] += self.valor(i,k)*b.mat[k][j] end end end c end end
# File lib/sparse_matrix.rb, line 144 def +(other) #metodo para sumar matrices, dispersa como densa if other.instance_of? SparseMatrix o=DenseMatrix.new(@n,@m,Array.new(@n){Array.new(@m)}) 0.upto @MAT.size-1 do |i| 0.upto @MAT.size-1 do |j| o.mat[i][j]=self.valor(i,j)+other.valor(i,j) end end return SparseMatrix.new(@n,@m,o.mat) #SparseMatrix.new(@n,@m,o) else o=DenseMatrix.new(@n,@m,Array.new(@n){Array.new(@m)}) 0.upto @n-1 do |i| 0.upto @m-1 do |j| o.mat[i][j]=self.valor(i,j)+other.mat[i][j] end end return o end end
# File lib/sparse_matrix.rb, line 93 def insert(vector) @MAT<<vector end
# File lib/sparse_matrix.rb, line 124 def max #elemento maximo de la matrix maximo=@MAT[0].value for i in 0...@m do if maximo < @MAT[i].value maximo=@MAT[i].value end end return maximo end
# File lib/sparse_matrix.rb, line 134 def min #elemento minimo de la matrix minimo=@MAT[0].value for i in (0...@m) do if minimo > @MAT[i].value minimo=@MAT[i].value end end return minimo end
# File lib/sparse_matrix.rb, line 97 def to_s #devuelve una cadena string cadena="" for i in 0...@n cadena+="[" for j in 0...@m cadena+=self.valor(i,j).to_s if j < @m-1 cadena+=", " end end cadena+="]" end return cadena end
# File lib/sparse_matrix.rb, line 113 def valor(k,j) #para buscar un valor especifico dev=0 for i in 0...@MAT.size if(@MAT[i].i==k) && (@MAT[i].j==j) return @MAT[i].value end end dev end