Class: Matrix::EigenvalueDecomposition
- Defined in:
- opal/stdlib/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+
| 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 19 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+
| 73 74 75 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 73 def eigenvalue_matrix Matrix.diagonal(*eigenvalues) end | 
#eigenvalues ⇒ Object
Returns the eigenvalues in an array
| 59 60 61 62 63 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 59 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+
| 43 44 45 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 43 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+
| 50 51 52 53 54 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 50 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
| 67 68 69 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 67 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]
| 80 81 82 | # File 'opal/stdlib/matrix/eigenvalue_decomposition.rb', line 80 def to_ary [v, d, v_inv] end |