### In Files

• matrix/eigenvalue_decomposition.rb

Quicksearch

# Matrix::EigenvalueDecomposition

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

### Public Class Methods

new(a) click to toggle source

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_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
```

### Public Instance Methods

d() click to toggle source
Alias for: eigenvalue_matrix
eigenvalue_matrix() click to toggle source

Returns the block diagonal eigenvalue matrix `D`

```
# File matrix/eigenvalue_decomposition.rb, line 72
def eigenvalue_matrix
Matrix.diagonal(*eigenvalues)
end
```
Also aliased as: d
eigenvalues() click to toggle source

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
```
eigenvector_matrix() click to toggle source

Returns the eigenvector matrix `V`

```
# File matrix/eigenvalue_decomposition.rb, line 42
def eigenvector_matrix
Matrix.send :new, build_eigenvectors.transpose
end
```
Also aliased as: v
eigenvector_matrix_inv() click to toggle source

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
```
Also aliased as: v_inv
eigenvectors() click to toggle source

Returns an array of the eigenvectors

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

Returns [eigenvector_matrix, #eigenvalue_matrix, #eigenvector_matrix_inv]

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

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.