Class Matrix::EigenvalueDecomposition
In: lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb
Parent: 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

Methods

Public Class methods

Constructs the eigenvalue decomposition for a square matrix A

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 18
18:     def initialize(a)
19:       # @d, @e: Arrays for internal storage of eigenvalues.
20:       # @v: Array for internal storage of eigenvectors.
21:       # @h: Array for internal storage of nonsymmetric Hessenberg form.
22:       raise TypeError, "Expected Matrix but got #{a.class}" unless a.is_a?(Matrix)
23:       @size = a.row_size
24:       @d = Array.new(@size, 0)
25:       @e = Array.new(@size, 0)
26: 
27:       if (@symmetric = a.symmetric?)
28:         @v = a.to_a
29:         tridiagonalize
30:         diagonalize
31:       else
32:         @v = Array.new(@size) { Array.new(@size, 0) }
33:         @h = a.to_a
34:         @ort = Array.new(@size, 0)
35:         reduce_to_hessenberg
36:         hessenberg_to_real_schur
37:       end
38:     end

Public Instance methods

d()

Alias for eigenvalue_matrix

Returns the block diagonal eigenvalue matrix D

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 72
72:     def eigenvalue_matrix
73:       Matrix.diagonal(*eigenvalues)
74:     end

Returns the eigenvalues in an array

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 58
58:     def eigenvalues
59:       values = @d.dup
60:       @e.each_with_index{|imag, i| values[i] = Complex(values[i], imag) unless imag == 0}
61:       values
62:     end

Returns the eigenvector matrix V

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 42
42:     def eigenvector_matrix
43:       Matrix.send :new, build_eigenvectors.transpose
44:     end

Returns the inverse of the eigenvector matrix V

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 49
49:     def eigenvector_matrix_inv
50:       r = Matrix.send :new, build_eigenvectors
51:       r = r.transpose.inverse unless @symmetric
52:       r
53:     end

Returns an array of the eigenvectors

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 66
66:     def eigenvectors
67:       build_eigenvectors.map{|ev| Vector.send :new, ev}
68:     end
to_a()

Alias for to_ary

Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv]

[Source]

    # File lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb, line 79
79:     def to_ary
80:       [v, d, v_inv]
81:     end
v()

Alias for eigenvector_matrix

v_inv()

[Validate]