class Vector

Public Class Methods

concat(*args) click to toggle source

Returns a concatenated Vector

Vector.concat(Vector[1,2,3], Vector[4,5,6])
=> Vector[1, 2, 3, 4, 5, 6]
# File lib/extendmatrix.rb, line 61
def concat(*args)
  Vector.elements(args.inject([]){|ac,v| ac+v.to_a}, false)
end
gram_schmidt(*vectors) click to toggle source

Stabilized Gram-Schmidt process (en.wikipedia.org/wiki/Gram-Schmidt_process#Algorithm)

# File lib/extendmatrix.rb, line 200
def self.gram_schmidt(*vectors)
  v = vectors.clone
  for j in 0...v.size
    for i in 0..j-1
      v[j] -= v[i] * v[j].inner_product(v[i])
    end
    v[j] /= v[j].norm
  end
  v
end

Public Instance Methods

/(c) click to toggle source

Return the vector divided by a scalar

# File lib/extendmatrix.rb, line 143
def / (c)
  map {|e| e.quo(c)}
end
Also aliased as: quo
[](i) click to toggle source
Returns the value of an index vector or
a Vector with the values of a range

v = Vector[1, 2, 3, 4]

v[0] => 1
v[0..2] => Vector[1, 2, 3]
# File lib/extendmatrix.rb, line 22
def [](i)
  case i
  when Range
    Vector[*to_a.slice(i)]
  else
    index(i)
  end
end
Also aliased as: index
[]=(i, v) click to toggle source

Sets a vector value/(range of values) with a new value/(values from a vector) v = Vector[1, 2, 3] v = 9 => Vector[1, 2, 9] v = Vector[9, 9, 9, 9, 9] => v: Vector[1, 9, 9]

# File lib/extendmatrix.rb, line 43
def []=(i, v)
  case i
  when Range
    (self.size..i.begin - 1).each{|e| self[e] = 0} # self.size must be in the first place because the size of self can be modified
    [v.size, i.entries.size].min.times {|e| self[e + i.begin] = v[e]}
    (v.size + i.begin .. i.end).each {|e| self[e] = 0}
  else
    @elements[i]=v
  end
end
collect!() { |v| ... } click to toggle source

Changes the elements of vector and returns a Vector

# File lib/extendmatrix.rb, line 69
def collect!
  els = @elements.collect! {|v| yield(v)}
  Vector.elements(els, false)
end
each() { |self| ... } click to toggle source

Iterates the elements of a vector

# File lib/extendmatrix.rb, line 77
def each
  (0...size).each {|i| yield(self[i])}
  nil
end
house() click to toggle source

Computes the Householder vector (MC, Golub, p. 210, algorithm 5.1.1)

# File lib/extendmatrix.rb, line 159
def house
  s = self[1..length-1]
  sigma = s.inner_product(s)
  v = clone; v[0] = 1
  if sigma == 0
    beta = 0
  else
    mu = Math.sqrt(self[0] ** 2 + sigma)
    if self[0] <= 0
      v[0] = self[0] - mu
    else
      v[0] = - sigma.quo(self[0] + mu)
    end
    v2 = v[0] ** 2
    beta = 2 * v2.quo(sigma + v2)
    v /= v[0]
  end
  return v, beta
end
index(i)
Alias for: []
magnitude() click to toggle source

Magnitude or length of the vector Equal to sqrt(sum(x_i^2))

# File lib/extendmatrix.rb, line 33
def magnitude
  Math::sqrt(to_a.inject(0) {|ac, v| ac+(v**2)})
end
max() click to toggle source

Returns the maximum element of a vector

# File lib/extendmatrix.rb, line 85
def max
  to_a.max
end
min() click to toggle source

Returns the minimum element of a vector

# File lib/extendmatrix.rb, line 92
def min
  to_a.min
end
norm(p = 2) click to toggle source

Returns the p-norm of a vector

# File lib/extendmatrix.rb, line 104
def norm(p = 2)
  Norm.sqnorm(self, p) ** (1.quo(p))
end
norm_inf() click to toggle source

Returns the infinite-norm

# File lib/extendmatrix.rb, line 111
def norm_inf
  [min.abs, max.abs].max
end
normalize() click to toggle source

Return the vector normalized

# File lib/extendmatrix.rb, line 192
def normalize
  self.quo(self.norm)
end
proj(v) click to toggle source

Projection operator (en.wikipedia.org/wiki/Gram-Schmidt_process#The_Gram.E2.80.93Schmidt_process)

# File lib/extendmatrix.rb, line 183
def proj(v)
  vp = v.inner_product(self)
  vp = Float vp if vp.is_a?(Integer)
  self * (vp / inner_product(self))
end
quo(c)
Alias for: /
slice(*args) click to toggle source

Returns a slice of vector

# File lib/extendmatrix.rb, line 118
def slice(*args)
  Vector[*to_a.slice(*args)]
end
slice=(args) click to toggle source

Sets a slice of vector

# File lib/extendmatrix.rb, line 131
def slice=(args)
  case args[1]
  when Range
    slice_set(args[0], args[1].begin, args[1].last)
  else
    slice_set(args[0], args[1], args[2])
  end
end
slice_set(v, b, e) click to toggle source
# File lib/extendmatrix.rb, line 122
def slice_set(v, b, e)
  for i in b..e
    self[i] = v[i-b]
  end
end
sum() click to toggle source

Returns the sum of values of the vector

# File lib/extendmatrix.rb, line 98
def sum
  to_a.inject(&:+)
end
t()
Alias for: transpose
transpose() click to toggle source

Return the matrix column coresponding to the vector transpose

# File lib/extendmatrix.rb, line 150
def transpose
  Matrix[self.to_a]
end
Also aliased as: t