Class: Matrix::EigenvalueDecomposition
- Inherits:
 - 
      Object
      
        
- Object
 - Matrix::EigenvalueDecomposition
 
 
- Defined in:
 - lib/matrix/eigenvalue_decomposition.rb
 
Overview
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
Instance Method Summary collapse
- 
  
    
      #eigenvalue_matrix  ⇒ Object 
    
    
      (also: #d)
    
  
  
  
  
  
  
  
  
  
    
Returns the block diagonal eigenvalue matrix
D. - 
  
    
      #eigenvalues  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Returns the eigenvalues in an array.
 - 
  
    
      #eigenvector_matrix  ⇒ Object 
    
    
      (also: #v)
    
  
  
  
  
  
  
  
  
  
    
Returns the eigenvector matrix
V. - 
  
    
      #eigenvector_matrix_inv  ⇒ Object 
    
    
      (also: #v_inv)
    
  
  
  
  
  
  
  
  
  
    
Returns the inverse of the eigenvector matrix
V. - 
  
    
      #eigenvectors  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Returns an array of the eigenvectors.
 - 
  
    
      #initialize(a)  ⇒ EigenvalueDecomposition 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Constructs the eigenvalue decomposition for a square matrix
A. - 
  
    
      #to_ary  ⇒ Object 
    
    
      (also: #to_a)
    
  
  
  
  
  
  
  
  
  
    
Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv].
 
Constructor Details
#initialize(a) ⇒ EigenvalueDecomposition
Constructs the eigenvalue decomposition for a square matrix A
      18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
    
      # File 'lib/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  | 
  
Instance Method Details
#eigenvalue_matrix ⇒ Object Also known as: d
Returns the block diagonal eigenvalue matrix D
      72 73 74  | 
    
      # File 'lib/matrix/eigenvalue_decomposition.rb', line 72 def eigenvalue_matrix Matrix.diagonal(*eigenvalues) end  | 
  
#eigenvalues ⇒ Object
Returns the eigenvalues in an array
      58 59 60 61 62  | 
    
      # File 'lib/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 ⇒ Object Also known as: v
Returns the eigenvector matrix V
      42 43 44  | 
    
      # File 'lib/matrix/eigenvalue_decomposition.rb', line 42 def eigenvector_matrix Matrix.send :new, build_eigenvectors.transpose end  | 
  
#eigenvector_matrix_inv ⇒ Object Also known as: v_inv
Returns the inverse of the eigenvector matrix V
      49 50 51 52 53  | 
    
      # File 'lib/matrix/eigenvalue_decomposition.rb', line 49 def eigenvector_matrix_inv r = Matrix.send :new, build_eigenvectors r = r.transpose.inverse unless @symmetric r end  | 
  
#eigenvectors ⇒ Object
Returns an array of the eigenvectors
      66 67 68  | 
    
      # File 'lib/matrix/eigenvalue_decomposition.rb', line 66 def eigenvectors build_eigenvectors.map{|ev| Vector.send :new, ev} end  | 
  
#to_ary ⇒ Object Also known as: to_a
Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv]
      79 80 81  | 
    
      # File 'lib/matrix/eigenvalue_decomposition.rb', line 79 def to_ary [v, d, v_inv] end  |