class Digiproc::Strategies::GramSchmidtOrthonormalize
Class to orthonormalize a set of numbers
Attributes
original_matrix[R]
orthonormalized_matrix[R]
Public Class Methods
new(matrix)
click to toggle source
Input Args¶ ↑
- matrix
-
2D array, each row is a set of numbers that should be orthogonalized
# File lib/strategies/orthogonalize/gram_schmidt.rb, line 10 def initialize(matrix) @original_vectors = matrix # if matrix.is_a? Array # matrix = Vector.elements(matrix) # end vector_matrix = matrix.map { |vector| vector.is_a?(Array) ? Vector.elements(vector) : vector } @orthonormalized_matrix = gram_schmidt(vector_matrix) end
Public Instance Methods
output()
click to toggle source
No input arguments Output is a 2D array of Orthonormalized sets of numbers corresponding to the input set of numbers
# File lib/strategies/orthogonalize/gram_schmidt.rb, line 22 def output @orthonormalized_matrix.map{|vector| vector.to_a } end
Private Instance Methods
gram_schmidt(matrix)
click to toggle source
# File lib/strategies/orthogonalize/gram_schmidt.rb, line 28 def gram_schmidt(matrix) u = [] u << normalize_vector(matrix.first) for i in 1...matrix.length do u << matrix[i] for j in 0...i u[i] = u[i] - u[i].project_onto(u[j]) # puts u.last.to_s if i == matrix.length - 1 end u[i] = normalize_vector(u[i]) end return u end
normalize_vector(vector)
click to toggle source
# File lib/strategies/orthogonalize/gram_schmidt.rb, line 42 def normalize_vector(vector) begin vector.normalize rescue Vector::ZeroVectorError vector end end