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
D
E
N
T
V
Class Public methods
new(a)

Constructs the eigenvalue decomposition for a square matrix `A`

```# File lib/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 Public methods
d()
Alias for: eigenvalue_matrix
eigenvalue_matrix()

Returns the block diagonal eigenvalue matrix `D`

Also aliased as: d
```# File lib/matrix/eigenvalue_decomposition.rb, line 73
def eigenvalue_matrix
Matrix.diagonal(*eigenvalues)
end```
eigenvalues()

Returns the eigenvalues in an array

```# File lib/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()

Returns the eigenvector matrix `V`

Also aliased as: v
```# File lib/matrix/eigenvalue_decomposition.rb, line 43
def eigenvector_matrix
Matrix.send(:new, build_eigenvectors.transpose)
end```
eigenvector_matrix_inv()

Returns the inverse of the eigenvector matrix `V`

Also aliased as: v_inv
```# File lib/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()

Returns an array of the eigenvectors

```# File lib/matrix/eigenvalue_decomposition.rb, line 67
def eigenvectors
build_eigenvectors.map{|ev| Vector.send(:new, ev)}
end```
to_a()
Alias for: to_ary
to_ary()

Returns [eigenvector_matrix, #eigenvalue_matrix, #eigenvector_matrix_inv]

Also aliased as: to_a
```# File lib/matrix/eigenvalue_decomposition.rb, line 80
def to_ary
[v, d, v_inv]
end```
v()
Alias for: eigenvector_matrix
v_inv()