Class: GSL::Matrix

Inherits:
Object show all
Defined in:
lib/statsample/matrix.rb

Instance Method Summary collapse

Instance Method Details

#column_sizeObject



105
106
107
# File 'lib/statsample/matrix.rb', line 105

def column_size
  size2
end

#determinantObject



109
110
111
# File 'lib/statsample/matrix.rb', line 109

def determinant
  det
end

#eigenpairsObject



138
139
140
141
142
143
144
# File 'lib/statsample/matrix.rb', line 138

def eigenpairs
  eigval, eigvec= GSL::Eigen.symmv(self)
  GSL::Eigen::symmv_sort(eigval, eigvec, GSL::Eigen::SORT_VAL_DESC)
  @eigenpairs=eigval.size.times.map {|i|
    [eigval[i],eigvec.get_col(i)]
  }
end

#eigenvaluesObject



117
118
119
# File 'lib/statsample/matrix.rb', line 117

def eigenvalues
  eigenpairs.collect {|v| v[0]}
end

#eigenvectorsObject



121
122
123
# File 'lib/statsample/matrix.rb', line 121

def eigenvectors
  eigenpairs.collect {|v| v[1]}
end

#eigenvectors_matrixObject



132
133
134
135
136
# File 'lib/statsample/matrix.rb', line 132

def eigenvectors_matrix
  eigval, eigvec= GSL::Eigen.symmv(self)
  GSL::Eigen::symmv_sort(eigval, eigvec, GSL::Eigen::SORT_VAL_DESC)
  eigvec
end

#inverseObject



113
114
115
# File 'lib/statsample/matrix.rb', line 113

def inverse
  GSL::Linalg::LU.invert(self)
end

#mssqObject

Matrix sum of squares



126
127
128
129
130
# File 'lib/statsample/matrix.rb', line 126

def mssq
  sum=0
  to_v.each {|i| sum+=i**2}
  sum
end

#row_sizeObject



101
102
103
# File 'lib/statsample/matrix.rb', line 101

def row_size
  size1
end

#square?Boolean

def eigenpairs_ruby

self.to_matrix.eigenpairs_ruby

end

Returns:

  • (Boolean)


149
150
151
# File 'lib/statsample/matrix.rb', line 149

def square?
  size1==size2
end

#to_datasetObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/statsample/matrix.rb', line 86

def to_dataset
  f = (self.respond_to? :fields_y) ? fields_y : column_size.times.map {|i| _("VAR_%d") % (i+1) }
  ds=Statsample::Dataset.new(f)
  f.each do |ff|
    ds[ff].type=:numeric
    ds[ff].name=ff
  end
  row_size.times {|i|
    ds.add_case_array(self.row(i).to_a)
  }
  ds.update_valid_data
  ds.name=self.name if self.respond_to? :name
  ds
end

#to_gslObject



82
83
84
# File 'lib/statsample/matrix.rb', line 82

def to_gsl
  self
end

#to_matrixObject



153
154
155
156
157
158
# File 'lib/statsample/matrix.rb', line 153

def to_matrix
  rows=self.size1
  cols=self.size2
  out=(0...rows).collect{|i| (0...cols).collect {|j| self[i,j]} }
  ::Matrix.rows(out)
end

#total_sumObject



160
161
162
163
164
165
166
167
168
# File 'lib/statsample/matrix.rb', line 160

def total_sum
  sum=0
  size1.times {|i|
    size2.times {|j|
      sum+=self[i,j]
    }
  }
  sum
end