Sei sulla pagina 1di 4

eig (MATLAB Functions)

1 of 4

http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/eig.html

MATLAB Function Reference

eig
Find eigenvalues and eigenvectors

Syntax
d = eig(A)
d = eig(A,B)
[V,D] = eig(A)
[V,D] = eig(A,'nobalance')
[V,D] = eig(A,B)
[V,D] = eig(A,B,flag)

Description
d = eig(A)

returns a vector of the eigenvalues of matrix A.

d = eig(A,B)

returns a vector containing the generalized eigenvalues, if A and B are square matrices.

Note If S is sparse and symmetric, you can use d = eig(S) to returns the eigenvalues of S. To
request eigenvectors, and in all other cases, use eigs to find the eigenvalues or eigenvectors of
sparse matrices.
produces matrices of eigenvalues (D) and eigenvectors (V) of matrix A, so that
A*V = V*D. Matrix D is the canonical form of A--a diagonal matrix with A's eigenvalues on the main
diagonal. Matrix V is the modal matrix--its columns are the eigenvectors of A.
[V,D] = eig(A)

If W is a matrix such that W'*A = D*W', the columns of W are the left eigenvectors of A . Use
[W,D] = eig(A.'); W = conj(W) to compute the left eigenvectors.
finds eigenvalues and eigenvectors without a preliminary balancing step.
Ordinarily, balancing improves the conditioning of the input matrix, enabling more accurate computation
of the eigenvectors and eigenvalues. However, if a matrix contains small elements that are really due to
roundoff error, balancing may scale them up to make them as significant as the other elements of the
original matrix, leading to incorrect eigenvectors. Use the nobalance option in this event. See the
balance function for more details.
[V,D] = eig(A,'nobalance')

produces a diagonal matrix D of generalized eigenvalues and a full matrix V whose


columns are the corresponding eigenvectors so that A*V = B*V*D.
[V,D] = eig(A,B)

[V,D] = eig(A,B,flag)

specifies the algorithm used to compute eigenvalues and eigenvectors. flag

can be:
'chol'

Computes the generalized eigenvalues of A and B using the Cholesky factorization of B. This is
the default for symmetric (Hermitian) A and symmetric (Hermitian) positive definite B.

'qz'

Ignores the symmetry, if any, and uses the QZ algorithm as it would for nonsymmetric
(non-Hermitian) A and B.

Note For eig(A), the eigenvectors are scaled so that the norm of each is 1.0. For eig(A,B),
eig(A,'nobalance'), and eig(A,B,flag), the eigenvectors are not normalized.

26-10-2015 12:59

eig (MATLAB Functions)

2 of 4

http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/eig.html

Remarks
The eigenvalue problem is to determine the nontrivial solutions of the equation

where

is an n-by-n matrix,

is a length n column vector, and

is a scalar. The n values of

satisfy the equation are the eigenvalues, and the corresponding values of
MATLAB, the function eig solves for the eigenvalues

that

are the right eigenvectors. In

, and optionally the eigenvectors

The generalized eigenvalue problem is to determine the nontrivial solutions of the equation

where both

and

are n-by-n matrices and

is a scalar. The values of

the generalized eigenvalues and the corresponding values of


If

that satisfy the equation are

are the generalized right eigenvectors.

is nonsingular, the problem could be solved by reducing it to a standard eigenvalue problem

Because

can be singular, an alternative algorithm, called the QZ method, is necessary.

When a matrix has no repeated eigenvalues, the eigenvectors are always independent and the eigenvector
matrix V diagonalizes the original matrix A if applied as a similarity transformation. However, if a matrix
has repeated eigenvalues, it is not similar to a diagonal matrix unless it has a full (independent) set of
eigenvectors. If the eigenvectors are not independent then the original matrix is said to be defective. Even
if a matrix is defective, the solution from eig satisfies A*X = X*D.

Examples
The matrix
B = [ 3
-2
-2
4
-eps/4 eps/2
-.5
-.5

-.9
1
-1
.1

2*eps
-eps
0
1
];

has elements on the order of roundoff error. It is an example for which the nobalance option is necessary
to compute the eigenvectors correctly. Try the statements
[VB,DB] = eig(B)
B*VB - VB*DB
[VN,DN] = eig(B,'nobalance')
B*VN - VN*DN

Algorithm
MATLAB uses LAPACK routines to compute eigenvalues and eigenvectors:
Case

Routine

26-10-2015 12:59

eig (MATLAB Functions)

3 of 4

Real symmetric A

http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/eig.html

DSYEV

Real nonsymmetric A:
With preliminary balance step

DGEEV

d = eig(A,'nobalance')

DGEHRD, DHSEQR

[V,D] = eig(A,'nobalance')

DGEHRD, DORGHR, DHSEQR, DTREVC

Hermitian A

(with SCLFAC = 2 instead of 8 in DGEBAL)

ZHEEV

Non-Hermitian A:
With preliminary balance step

ZGEEV

d = eig(A,'nobalance')

ZGEHRD, ZHSEQR

[V,D] = eig(A,'nobalance')

ZGEHRD, ZUNGHR, ZHSEQR, ZTREVC

Real symmetric A,
symmetric positive definite B.
Special case:
for real A, B
(same as real nonsymmetric A, real
general B)
eig(A,B,'qz')

DSYGV

DGGEV

Real nonsymmetric A, real general B

DGGEV

Complex Hermitian A,
Hermitian positive definite B.

ZHEGV

Special case:
for complex A or B
(same as complex non-Hermitian A,
complex B)
eig(A,B,'qz')

(with SCLFAC = 2 instead of 8 in ZGEBAL)

ZGGEV

Complex non-Hermitian A, complex B ZGGEV

See Also
balance, condeig, eigs, hess, qz, schur

References
[1] Anderson, E., Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum,
S. Hammarling, A. McKenney, and D. Sorensen, LAPACK User's Guide (http://www.netlib.org
/lapack/lug/ lapack_lug.html), Third Edition, SIAM, Philadelphia, 1999.

edit

eigs

26-10-2015 12:59

eig (MATLAB Functions)

4 of 4

http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/eig.html

26-10-2015 12:59