In Files

  • matrix/eigenvalue_decomposition.rb

Matrix::EigenvalueDecomposition

Eigenvalues and eigenvectors of a real matrix.

Computes the eigenvalues and eigenvectors of a matrix A.

If A is diagonalizable, this provides matrices V and D such that A = V*D*V.inv, where D is the diagonal matrix with entries equal to the eigenvalues and V is formed by the eigenvectors.

If A is symmetric, then V is orthogonal and thus A = V*D*V.t

Public Class Methods

new(a) click to toggle source

Constructs the eigenvalue decomposition for a square matrix A

 
               # File matrix/eigenvalue_decomposition.rb, line 18
def initialize(a)
  # @d, @e: Arrays for internal storage of eigenvalues.
  # @v: Array for internal storage of eigenvectors.
  # @h: Array for internal storage of nonsymmetric Hessenberg form.
  raise TypeError, "Expected Matrix but got #{a.class}" unless a.is_a?(Matrix)
  @size = a.row_count
  @d = Array.new(@size, 0)
  @e = Array.new(@size, 0)

  if (@symmetric = a.symmetric?)
    @v = a.to_a
    tridiagonalize
    diagonalize
  else
    @v = Array.new(@size) { Array.new(@size, 0) }
    @h = a.to_a
    @ort = Array.new(@size, 0)
    reduce_to_hessenberg
    hessenberg_to_real_schur
  end
end
            

Public Instance Methods

d() click to toggle source
Alias for: eigenvalue_matrix
eigenvalue_matrix() click to toggle source

Returns the block diagonal eigenvalue matrix D

 
               # File matrix/eigenvalue_decomposition.rb, line 72
def eigenvalue_matrix
  Matrix.diagonal(*eigenvalues)
end
            
Also aliased as: d
eigenvalues() click to toggle source

Returns the eigenvalues in an array

 
               # File matrix/eigenvalue_decomposition.rb, line 58
def eigenvalues
  values = @d.dup
  @e.each_with_index{|imag, i| values[i] = Complex(values[i], imag) unless imag == 0}
  values
end
            
eigenvector_matrix() click to toggle source

Returns the eigenvector matrix V

 
               # File matrix/eigenvalue_decomposition.rb, line 42
def eigenvector_matrix
  Matrix.send :new, build_eigenvectors.transpose
end
            
Also aliased as: v
eigenvector_matrix_inv() click to toggle source

Returns the inverse of the eigenvector matrix V

 
               # File matrix/eigenvalue_decomposition.rb, line 49
def eigenvector_matrix_inv
  r = Matrix.send :new, build_eigenvectors
  r = r.transpose.inverse unless @symmetric
  r
end
            
Also aliased as: v_inv
eigenvectors() click to toggle source

Returns an array of the eigenvectors

 
               # File matrix/eigenvalue_decomposition.rb, line 66
def eigenvectors
  build_eigenvectors.map{|ev| Vector.send :new, ev}
end
            
to_a() click to toggle source
Alias for: to_ary
to_ary() click to toggle source

Returns [eigenvector_matrix, #eigenvalue_matrix, #eigenvector_matrix_inv]

 
               # File matrix/eigenvalue_decomposition.rb, line 79
def to_ary
  [v, d, v_inv]
end
            
Also aliased as: to_a
v() click to toggle source
Alias for: eigenvector_matrix
v_inv() click to toggle source

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus