Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Object
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
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_size @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
Returns the block diagonal eigenvalue matrix D
# File matrix/eigenvalue_decomposition.rb, line 72 def eigenvalue_matrix Matrix.diagonal(*eigenvalues) end
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
Returns the eigenvector matrix V
# File matrix/eigenvalue_decomposition.rb, line 42 def eigenvector_matrix Matrix.send :new, build_eigenvectors.transpose end
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
Returns an array of the eigenvectors
# File matrix/eigenvalue_decomposition.rb, line 66 def eigenvectors build_eigenvectors.map{|ev| Vector.send :new, ev} end
Returns [eigenvector_matrix, #eigenvalue_matrix, #eigenvector_matrix_inv]
# File matrix/eigenvalue_decomposition.rb, line 79 def to_ary [v, d, v_inv] end
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.