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