Как найти собственные значения матрицы матлаб

Eigenvalues and eigenvectors

Syntax

Description

example

e = eig(A) returns
a column vector containing the eigenvalues of square matrix A.

example

[V,D] =
eig(A)
returns diagonal matrix D of
eigenvalues and matrix V whose columns are the
corresponding right eigenvectors, so that A*V = V*D.

example

[V,D,W]
= eig(A)
also returns full matrix W whose
columns are the corresponding left eigenvectors, so that W'*A
= D*W'
.

The eigenvalue problem is to determine the solution to the equation Av = λv,
where A is an n-by-n matrix, v is
a column vector of length n, and λ is
a scalar. The values of λ that satisfy the
equation are the eigenvalues. The corresponding values of v that
satisfy the equation are the right eigenvectors. The left eigenvectors, w,
satisfy the equation wA = λw’.

example

e = eig(A,B) returns
a column vector containing the generalized eigenvalues of square matrices A and B.

example

[V,D] =
eig(A,B)
returns
diagonal matrix D of generalized eigenvalues and
full matrix V whose columns are the corresponding
right eigenvectors, so that A*V = B*V*D.

[V,D,W]
= eig(A,B)
also
returns full matrix W whose columns are the corresponding
left eigenvectors, so that W'*A = D*W'*B.

The generalized eigenvalue problem is to determine the solution
to the equation Av = λBv,
where A and B are n-by-n matrices, v is
a column vector of length n, and λ is
a scalar. The values of λ that satisfy the
equation are the generalized eigenvalues. The corresponding values
of v are the generalized right eigenvectors. The
left eigenvectors, w, satisfy the equation wA = λwB.

[___] = eig(A,balanceOption),
where balanceOption is 'nobalance',
disables the preliminary balancing step in the algorithm. The default for
balanceOption is 'balance', which
enables balancing. The eig function can return any of the
output arguments in previous syntaxes.

example

[___] = eig(A,B,algorithm),
where algorithm is 'chol', uses
the Cholesky factorization of B to compute the
generalized eigenvalues. The default for algorithm depends
on the properties of A and B,
but is generally 'qz', which uses the QZ algorithm.

If A is Hermitian and B is
Hermitian positive definite, then the default for algorithm is 'chol'.

example

[___] = eig(___,outputForm)
returns the eigenvalues in the form specified by outputForm
using any of the input or output arguments in previous syntaxes. Specify
outputForm as 'vector' to return the
eigenvalues in a column vector or as 'matrix' to return the
eigenvalues in a diagonal matrix.

Examples

collapse all

Eigenvalues of Matrix

Use gallery to create a symmetric positive definite matrix.

A = 4×4

    1.0000    0.5000    0.3333    0.2500
    0.5000    1.0000    0.6667    0.5000
    0.3333    0.6667    1.0000    0.7500
    0.2500    0.5000    0.7500    1.0000

Calculate the eigenvalues of A. The result is a column vector.

e = 4×1

    0.2078
    0.4078
    0.8482
    2.5362

Alternatively, use outputForm to return the eigenvalues in a diagonal matrix.

D = 4×4

    0.2078         0         0         0
         0    0.4078         0         0
         0         0    0.8482         0
         0         0         0    2.5362

Eigenvalues and Eigenvectors of Matrix

Use gallery to create a circulant matrix.

A = 3×3

     1     2     3
     3     1     2
     2     3     1

Calculate the eigenvalues and right eigenvectors of A.

V = 3×3 complex

  -0.5774 + 0.0000i   0.2887 - 0.5000i   0.2887 + 0.5000i
  -0.5774 + 0.0000i  -0.5774 + 0.0000i  -0.5774 + 0.0000i
  -0.5774 + 0.0000i   0.2887 + 0.5000i   0.2887 - 0.5000i

D = 3×3 complex

   6.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -1.5000 + 0.8660i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i  -1.5000 - 0.8660i

Verify that the results satisfy A*V = V*D.

ans = 3×3 complex
10-14 ×

  -0.2665 + 0.0000i  -0.0444 + 0.0222i  -0.0444 - 0.0222i
   0.0888 + 0.0000i   0.0111 + 0.0777i   0.0111 - 0.0777i
  -0.0444 + 0.0000i  -0.0111 + 0.0833i  -0.0111 - 0.0833i

Ideally, the eigenvalue decomposition satisfies the relationship. Since eig performs the decomposition using floating-point computations, then A*V can, at best, approach V*D. In other words, A*V - V*D is close to, but not exactly, 0.

Sorted Eigenvalues and Eigenvectors

By default eig does not always return the eigenvalues and eigenvectors in sorted order. Use the sort function to put the eigenvalues in ascending order and reorder the corresponding eigenvectors.

Calculate the eigenvalues and eigenvectors of a 5-by-5 magic square matrix.

A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

V = 5×5

   -0.4472    0.0976   -0.6330    0.6780   -0.2619
   -0.4472    0.3525    0.5895    0.3223   -0.1732
   -0.4472    0.5501   -0.3915   -0.5501    0.3915
   -0.4472   -0.3223    0.1732   -0.3525   -0.5895
   -0.4472   -0.6780    0.2619   -0.0976    0.6330

D = 5×5

   65.0000         0         0         0         0
         0  -21.2768         0         0         0
         0         0  -13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   13.1263

The eigenvalues of A are on the diagonal of D. However, the eigenvalues are unsorted.

Extract the eigenvalues from the diagonal of D using diag(D), then sort the resulting vector in ascending order. The second output from sort returns a permutation vector of indices.

d = 5×1

  -21.2768
  -13.1263
   13.1263
   21.2768
   65.0000

Use ind to reorder the diagonal elements of D. Since the eigenvalues in D correspond to the eigenvectors in the columns of V, you must also reorder the columns of V using the same indices.

Ds = 5×5

  -21.2768         0         0         0         0
         0  -13.1263         0         0         0
         0         0   13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   65.0000

Vs = 5×5

    0.0976   -0.6330   -0.2619    0.6780   -0.4472
    0.3525    0.5895   -0.1732    0.3223   -0.4472
    0.5501   -0.3915    0.3915   -0.5501   -0.4472
   -0.3223    0.1732   -0.5895   -0.3525   -0.4472
   -0.6780    0.2619    0.6330   -0.0976   -0.4472

Both (V,D) and (Vs,Ds) produce the eigenvalue decomposition of A. The results of A*V-V*D and A*Vs-Vs*Ds agree, up to round-off error.

e1 = norm(A*V-V*D);
e2 = norm(A*Vs-Vs*Ds);
e = abs(e1 - e2)

Left Eigenvectors

Create a 3-by-3 matrix.

 A = [1 7 3; 2 9 12; 5 22 7];

Calculate the right eigenvectors, V, the eigenvalues, D, and the left eigenvectors, W.

V = 3×3

   -0.2610   -0.9734    0.1891
   -0.5870    0.2281   -0.5816
   -0.7663   -0.0198    0.7912

D = 3×3

   25.5548         0         0
         0   -0.5789         0
         0         0   -7.9759

W = 3×3

   -0.1791   -0.9587   -0.1881
   -0.8127    0.0649   -0.7477
   -0.5545    0.2768    0.6368

Verify that the results satisfy W'*A = D*W'.

ans = 3×3
10-13 ×

   -0.0444   -0.1066   -0.0888
   -0.0011    0.0442    0.0333
         0    0.0266    0.0178

Ideally, the eigenvalue decomposition satisfies the relationship. Since eig performs the decomposition using floating-point computations, then W'*A can, at best, approach D*W'. In other words, W'*A - D*W' is close to, but not exactly, 0.

Eigenvalues of Nondiagonalizable (Defective) Matrix

Create a 3-by-3 matrix.

A = [3 1 0; 0 3 1; 0 0 3];

Calculate the eigenvalues and right eigenvectors of A.

V = 3×3

    1.0000   -1.0000    1.0000
         0    0.0000   -0.0000
         0         0    0.0000

D = 3×3

     3     0     0
     0     3     0
     0     0     3

A has repeated eigenvalues and the eigenvectors are not independent. This means that A is not diagonalizable and is, therefore, defective.

Verify that V and D satisfy the equation, A*V = V*D, even though A is defective.

ans = 3×3
10-15 ×

         0    0.8882   -0.8882
         0         0    0.0000
         0         0         0

Ideally, the eigenvalue decomposition satisfies the relationship. Since eig performs the decomposition using floating-point computations, then A*V can, at best, approach V*D. In other words, A*V - V*D is close to, but not exactly, 0.

Generalized Eigenvalues

Create two matrices, A and B, then solve the generalized eigenvalue problem for the eigenvalues and right eigenvectors of the pair (A,B).

A = [1/sqrt(2) 0; 0 1];
B = [0 1; -1/sqrt(2) 0];
[V,D]=eig(A,B)
V = 2×2 complex

   1.0000 + 0.0000i   1.0000 + 0.0000i
   0.0000 - 0.7071i   0.0000 + 0.7071i

D = 2×2 complex

   0.0000 + 1.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 - 1.0000i

Verify that the results satisfy A*V = B*V*D.

The residual error A*V - B*V*D is exactly zero.

Generalized Eigenvalues Using QZ Algorithm for Badly Conditioned Matrices

Create a badly conditioned symmetric matrix containing values close to machine precision.

format long e
A = diag([10^-16, 10^-15])
A = 2×2

     1.000000000000000e-16                         0
                         0     1.000000000000000e-15

Calculate the generalized eigenvalues and a set of right eigenvectors using the default algorithm. In this case, the default algorithm is 'chol'.

V1 = 2×2

     1.000000000000000e+08                         0
                         0     3.162277660168380e+07

D1 = 2×2

     9.999999999999999e-01                         0
                         0     1.000000000000000e+00

Now, calculate the generalized eigenvalues and a set of right eigenvectors using the 'qz' algorithm.

Check how well the 'chol' result satisfies A*V1 = A*V1*D1.

format short
A*V1 - A*V1*D1
ans = 2×2
10-23 ×

    0.1654         0
         0   -0.6617

Now, check how well the 'qz' result satisfies A*V2 = A*V2*D2.

When both matrices are symmetric, eig uses the 'chol' algorithm by default. In this case, the QZ algorithm returns more accurate results.

Generalized Eigenvalues Where One Matrix Is Singular

Create a 2-by-2 identity matrix, A, and a singular matrix, B.

A = eye(2);
B = [3 6; 4 8];

If you attempt to calculate the generalized eigenvalues of the matrix B-1A with the command [V,D] = eig(BA), then MATLAB® returns an error because BA produces Inf values.

Instead, calculate the generalized eigenvalues and right eigenvectors by passing both matrices to the eig function.

V = 2×2

   -0.7500   -1.0000
   -1.0000    0.5000

It is better to pass both matrices separately, and let eig choose the best algorithm to solve the problem. In this case, eig(A,B) returns a set of eigenvectors and at least one real eigenvalue, even though B is not invertible.

Verify Av=λBv for the first eigenvalue and the first eigenvector.

eigval = D(1,1);
eigvec = V(:,1);
A*eigvec - eigval*B*eigvec
ans = 2×1
10-15 ×

    0.1110
    0.2220

Ideally, the eigenvalue decomposition satisfies the relationship. Since the decomposition is performed using floating-point computations, then A*eigvec can, at best, approach eigval*B*eigvec, as it does in this case.

Input Arguments

collapse all

AInput matrix
square matrix

Input matrix, specified as a real or complex square matrix.

Data Types: double | single
Complex Number Support: Yes

BGeneralized eigenvalue problem input matrix
square matrix

Generalized eigenvalue problem input matrix, specified as a
square matrix of real or complex values. B must
be the same size as A.

Data Types: double | single
Complex Number Support: Yes

balanceOptionBalance option
'balance' (default) | 'nobalance'

Balance option, specified as: 'balance',
which enables a preliminary balancing step, or 'nobalance' which
disables it. In most cases, the balancing step improves the conditioning
of A to produce more accurate results. However,
there are cases in which balancing produces incorrect results. Specify 'nobalance' when A contains
values whose scale differs dramatically. For example, if A contains
nonzero integers, as well as very small (near zero) values, then the
balancing step might scale the small values to make them as significant
as the integers and produce inaccurate results.

'balance' is the default behavior. For more
information about balancing, see balance.

algorithmGeneralized eigenvalue algorithm
'chol' | 'qz'

Generalized eigenvalue algorithm, specified as 'chol' or 'qz',
which selects the algorithm to use for calculating the generalized
eigenvalues of a pair.

algorithm Description
'chol' Computes the generalized eigenvalues of A and B using
the Cholesky factorization of B.
'qz' Uses the QZ algorithm, also known as the generalized Schur
decomposition. This algorithm ignores the symmetry of A and B.

In general, the two algorithms return the same result. The QZ
algorithm can be more stable for certain problems, such as those involving
badly conditioned matrices.

When you omit the algorithm argument, the eig function
selects an algorithm based on the properties of A and B.
It uses the 'chol' algorithm for symmetric (Hermitian) A and
symmetric (Hermitian) positive definite B. Otherwise,
it uses the 'qz' algorithm.

Regardless of the algorithm you specify, the eig function
always uses the QZ algorithm when A or B are
not symmetric.

outputFormOutput format of eigenvalues
'vector' | 'matrix'

Output format of eigenvalues, specified as 'vector' or
'matrix'. This option allows you to specify whether
the eigenvalues are returned in a column vector or a diagonal matrix. The
default behavior varies according to the number of outputs specified:

  • If you specify one output, such as e = eig(A),
    then the eigenvalues are returned as a column vector by
    default.

  • If you specify two or three outputs, such as [V,D] =
    eig(A)
    , then the eigenvalues are returned as a
    diagonal matrix, D, by default.

Example: D = eig(A,'matrix') returns a diagonal matrix
of eigenvalues with the one output syntax.

Output Arguments

collapse all

e — Eigenvalues (returned as vector)
column vector

Eigenvalues, returned as a column vector containing the eigenvalues (or generalized
eigenvalues of a pair) with multiplicity. Each eigenvalue
e(k) corresponds with the right eigenvector
V(:,k) and the left eigenvector
W(:,k).

  • When A is real symmetric or
    complex Hermitian, the
    values of e that satisfy
    Av =
    λv are real.

  • When A is real skew-symmetric or complex skew-Hermitian, the values of e that
    satisfy Av =
    λv are imaginary.

V — Right eigenvectors
square matrix

Right eigenvectors, returned as a square matrix whose columns
are the right eigenvectors of A or generalized
right eigenvectors of the pair, (A,B). The form
and normalization of V depends on the combination
of input arguments:

  • [V,D] = eig(A) returns matrix V,
    whose columns are the right eigenvectors of A such
    that A*V = V*D. The eigenvectors in V are
    normalized so that the 2-norm of each is 1.

    If A is real symmetric, Hermitian,
    or skew-Hermitian, then the right eigenvectors
    V are orthonormal.

  • [V,D] = eig(A,'nobalance') also
    returns matrix V. However, the 2-norm of each eigenvector
    is not necessarily 1.

  • [V,D] = eig(A,B) and [V,D] =
    eig(A,B,algorithm)
    return V as
    a matrix whose columns are the generalized right eigenvectors
    that satisfy A*V = B*V*D. The 2-norm of each
    eigenvector is not necessarily 1. In this case,
    D contains the generalized eigenvalues of
    the pair, (A,B), along the main
    diagonal.

    When eig uses the
    'chol' algorithm with symmetric
    (Hermitian) A and symmetric (Hermitian)
    positive definite B, it normalizes the
    eigenvectors in V so that the
    B-norm of each is 1.

Different machines and releases of MATLAB® can produce different eigenvectors that are still numerically accurate:

  • For real eigenvectors, the sign of the eigenvectors can change.

  • For complex eigenvectors, the eigenvectors can be multiplied by any complex number
    of magnitude 1.

  • For a multiple eigenvalue, its eigenvectors can be recombined through linear
    combinations. For example, if Ax =
    λx
    and Ay =
    λy
    , then A(x+y) =
    λ(x+y)
    , so x+y also is an eigenvector of A.

D — Eigenvalues (returned as matrix)
diagonal matrix

Eigenvalues, returned as a diagonal matrix with the eigenvalues of A on the
main diagonal or the eigenvalues of the pair, (A,B), with
multiplicity, on the main diagonal. Each eigenvalue
D(k,k) corresponds with the right eigenvector
V(:,k) and the left eigenvector
W(:,k).

  • When A is real symmetric or
    complex Hermitian, the
    values of D that satisfy
    Av =
    λv are real.

  • When A is real skew-symmetric or complex skew-Hermitian, the values of D that
    satisfy Av =
    λv are imaginary.

W — Left eigenvectors
square matrix

Left eigenvectors, returned as a square matrix whose columns
are the left eigenvectors of A or generalized left
eigenvectors of the pair, (A,B). The form and normalization
of W depends on the combination of input arguments:

  • [V,D,W] = eig(A) returns matrix
    W, whose columns are the left eigenvectors of
    A such that W'*A = D*W'.
    The eigenvectors in W are normalized so that the
    2-norm of each is 1. If A is symmetric,
    then W is the same as
    V.

  • [V,D,W] = eig(A,'nobalance') also
    returns matrix W. However, the 2-norm of each eigenvector
    is not necessarily 1.

  • [V,D,W] = eig(A,B) and [V,D,W]
    = eig(A,B,algorithm)
    returns W as a matrix
    whose columns are the generalized left eigenvectors that satisfy W'*A
    = D*W'*B
    . The 2-norm of each eigenvector is not necessarily
    1. In this case, D contains the generalized eigenvalues
    of the pair, (A,B), along the main diagonal.

    If A and B are symmetric,
    then W is the same as
    V.

Different machines and releases of MATLAB can produce different eigenvectors that are still numerically accurate:

  • For real eigenvectors, the sign of the eigenvectors can change.

  • For complex eigenvectors, the eigenvectors can be multiplied by any complex number
    of magnitude 1.

  • For a multiple eigenvalue, its eigenvectors can be recombined through linear
    combinations. For example, if Ax =
    λx
    and Ay =
    λy
    , then A(x+y) =
    λ(x+y)
    , so x+y also is an eigenvector of A.

More About

collapse all

Symmetric Matrix

  • A square matrix, A, is symmetric if it is equal to its nonconjugate transpose, A = A.'.

    In terms of the matrix elements, this means that

  • Since real matrices are unaffected by complex conjugation, a real matrix that is symmetric is also Hermitian. For example, the matrix

    is both symmetric and Hermitian.

Skew-Symmetric Matrix

  • A square matrix, A, is skew-symmetric if it is equal to the negation of its nonconjugate transpose, A = -A.'.

    In terms of the matrix elements, this means that

  • Since real matrices are unaffected by complex conjugation, a real matrix that is skew-symmetric is also skew-Hermitian. For example, the matrix

    is both skew-symmetric and skew-Hermitian.

Hermitian Matrix

  • A square matrix, A, is Hermitian if it is equal to its complex conjugate transpose, A = A'.

    In terms of the matrix elements, this means that

  • The entries on the diagonal of a Hermitian matrix are always real. Since real matrices are unaffected by complex conjugation, a real matrix that is symmetric is also Hermitian. For example, the matrix

    is both symmetric and Hermitian.

  • The eigenvalues of a Hermitian matrix are real.

Skew-Hermitian Matrix

  • A square matrix, A, is skew-Hermitian if it is equal to the negation of its complex conjugate transpose, A = -A'.

    In terms of the matrix elements, this means that

  • The entries on the diagonal of a skew-Hermitian matrix are always pure imaginary or zero. Since real matrices are unaffected by complex conjugation, a real matrix that is skew-symmetric is also skew-Hermitian. For example, the matrix

    is both skew-Hermitian and skew-symmetric.

  • The eigenvalues of a skew-Hermitian matrix are purely imaginary or zero.

Tips

  • The eig function can calculate
    the eigenvalues of sparse matrices that are real and symmetric. To
    calculate the eigenvectors of a sparse matrix, or to calculate the
    eigenvalues of a sparse matrix that is not real and symmetric, use
    the eigs function.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

  • V might represent a different basis of eigenvectors. This representation
    means that the eigenvector calculated by the generated code might be
    different in C and C++ code than in MATLAB. The eigenvalues in D might not be in the
    same order as in MATLAB. You can verify the V and
    D values by using the eigenvalue problem equation
    A*V = V*D.

  • If you specify the LAPACK library callback class, then the code generator supports these options:

    • The computation of left eigenvectors.

  • Outputs are complex.

  • Code generation does not support sparse matrix inputs for this
    function.

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

This function fully supports thread-based environments. For
more information, see Run MATLAB Functions in Thread-Based Environment.

GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

The eig function
partially supports GPU arrays. Some syntaxes of the function run on a GPU when you specify the
input data as a gpuArray (Parallel Computing Toolbox). Usage notes and limitations:

  • For the generalized case, eig(A,B),
    A and B must be real symmetric or
    complex Hermitian. Additionally, B must be positive
    definite.

  • The QZ algorithm, eig(A,B,'qz'), is not
    supported.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

Usage notes and limitations:

  • For the generalized case, eig(A,B),
    A and B must be real symmetric or
    complex Hermitian. Additionally, B must be positive
    definite.

  • These syntaxes are not supported for full distributed arrays:

    [__] = eig(A,B,'qz')

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

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

Version History

Introduced before R2006a

expand all

R2021b: eig returns NaN for nonfinite inputs

eig returns NaN values when the input
contains nonfinite values (Inf or NaN).
Previously, eig threw an error when the input contained
nonfinite values.

R2021a: Improved algorithm for skew-Hermitian matrices

The algorithm for input matrices that are skew-Hermitian was improved. With the
function call [V,D] = eig(A), where A is
skew-Hermitian, eig now guarantees that the matrix of
eigenvectors V is unitary and the diagonal matrix of eigenvalues
D is purely imaginary.

Собственные значения и собственные вектора

Синтаксис

Описание

пример

e = eig(A) возвращает вектор-столбец, содержащий собственные значения квадратной матрицы A.

пример

[V,D] =
eig(A)
возвращает диагональный матричный D из собственных значений и матричного V чьи столбцы являются соответствующими правыми собственными векторами, так, чтобы A*V = V*D.

пример

[V,D,W]
= eig(A)
также возвращает полный матричный W чьи столбцы являются соответствующими левыми собственными векторами, так, чтобы W'*A = D*W'.

Задача о собственных значениях должна определить решение уравнения A v = λ v, где A является nn матрица, v является вектор-столбцом длины n, и λ является скаляром. Значения λ, которые удовлетворяют уравнению, являются собственными значениями. Соответствующие значения v, которые удовлетворяют уравнению, являются правыми собственными векторами. Левые собственные вектора, w, удовлетворяют уравнению wA = λ w’.

пример

e = eig(A,B) возвращает вектор-столбец, содержащий обобщенные собственные значения квадратных матриц A и B.

пример

[V,D] =
eig(A,B)
возвращает диагональный матричный D из обобщенных собственных значений и полного матричного V чьи столбцы являются соответствующими правыми собственными векторами, так, чтобы A*V = B*V*D.

[V,D,W]
= eig(A,B)
также возвращает полный матричный W чьи столбцы являются соответствующими левыми собственными векторами, так, чтобы W'*A = D*W'*B.

Обобщенная задача о собственных значениях должна определить решение уравнения A v = λ B v, где A и B является nn матрицы, v является вектор-столбцом длины n, и λ является скаляром. Значения λ, которые удовлетворяют уравнению, являются обобщенными собственными значениями. Соответствующие значения v являются обобщенными правыми собственными векторами. Левые собственные вектора, w, удовлетворяют уравнению wA = λ wB.

[___] = eig(A,balanceOption), где balanceOption 'nobalance', отключает предварительный шаг балансировки в алгоритме. Значение по умолчанию для balanceOption 'balance', который позволяет балансироваться. eig функция может возвратить любой из выходных аргументов в предыдущих синтаксисах.

пример

[___] = eig(A,B,algorithm), где algorithm 'chol', использует факторизацию Холесского B вычислить обобщенные собственные значения. Значение по умолчанию для algorithm зависит от свойств A и B, но обычно 'qz', который использует алгоритм QZ.

Если A является Эрмитовым и B Эрмитов положительный определенный, затем значение по умолчанию для algorithm 'chol'.

пример

[___] = eig(___,outputForm) возвращает собственные значения в форме, заданной outputForm использование любого из аргументов ввода или вывода в предыдущих синтаксисах. Задайте outputForm как 'vector' возвратить собственные значения в вектор-столбце или как 'matrix' возвратить собственные значения в диагональной матрице.

Примеры

свернуть все

Собственные значения матрицы

Используйте gallery создать симметричную положительную определенную матрицу.

A = 4×4

    1.0000    0.5000    0.3333    0.2500
    0.5000    1.0000    0.6667    0.5000
    0.3333    0.6667    1.0000    0.7500
    0.2500    0.5000    0.7500    1.0000

Вычислите собственные значения A. Результатом является вектор-столбец.

e = 4×1

    0.2078
    0.4078
    0.8482
    2.5362

В качестве альтернативы используйте outputForm возвратить собственные значения в диагональной матрице.

D = 4×4

    0.2078         0         0         0
         0    0.4078         0         0
         0         0    0.8482         0
         0         0         0    2.5362

Собственные значения и собственные вектора матрицы

Используйте gallery создать циркулянтную матрицу.

A = 3×3

     1     2     3
     3     1     2
     2     3     1

Вычислите собственные значения и правые собственные вектора A.

V = 3×3 complex

  -0.5774 + 0.0000i   0.2887 - 0.5000i   0.2887 + 0.5000i
  -0.5774 + 0.0000i  -0.5774 + 0.0000i  -0.5774 + 0.0000i
  -0.5774 + 0.0000i   0.2887 + 0.5000i   0.2887 - 0.5000i

D = 3×3 complex

   6.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i  -1.5000 + 0.8660i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i  -1.5000 - 0.8660i

Проверьте, что результаты удовлетворяют A*V = V*D.

ans = 3×3 complex
10-14 ×

  -0.2665 + 0.0000i  -0.0333 + 0.1110i  -0.0333 - 0.1110i
   0.0888 + 0.0000i   0.0000 + 0.1221i   0.0000 - 0.1221i
  -0.0444 + 0.0000i  -0.0111 + 0.1221i  -0.0111 - 0.1221i

Идеально, разложение собственного значения удовлетворяет отношению. Начиная с eig выполняет разложение с помощью расчетов с плавающей точкой, затем A*V может, в лучшем случае приблизиться к V*D. Другими словами, A*V - V*D близко к, но не точно, 0.

Отсортированные собственные значения и собственные вектора

eig по умолчанию не всегда возвращает собственные значения и собственные вектора в отсортированном порядке. Используйте sort функционируйте, чтобы поместить собственные значения в порядке возрастания и переупорядочить соответствующие собственные вектора.

Вычислите собственные значения и собственные вектора матрицы магического квадрата 5 на 5.

A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

V = 5×5

   -0.4472    0.0976   -0.6330    0.6780   -0.2619
   -0.4472    0.3525    0.5895    0.3223   -0.1732
   -0.4472    0.5501   -0.3915   -0.5501    0.3915
   -0.4472   -0.3223    0.1732   -0.3525   -0.5895
   -0.4472   -0.6780    0.2619   -0.0976    0.6330

D = 5×5

   65.0000         0         0         0         0
         0  -21.2768         0         0         0
         0         0  -13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   13.1263

Собственные значения A находятся на диагонали D. Однако собственные значения не отсортированы.

Извлеките собственные значения из диагонали D использование diag(D), затем отсортируйте итоговый вектор в порядке возрастания. Второй выход от sort возвращает вектор сочетания из индексов.

d = 5×1

  -21.2768
  -13.1263
   13.1263
   21.2768
   65.0000

Используйте ind переупорядочить диагональные элементы D. Начиная с собственных значений в D соответствуйте собственным векторам в столбцах V, необходимо также переупорядочить столбцы V использование тех же индексов.

Ds = 5×5

  -21.2768         0         0         0         0
         0  -13.1263         0         0         0
         0         0   13.1263         0         0
         0         0         0   21.2768         0
         0         0         0         0   65.0000

Vs = 5×5

    0.0976   -0.6330   -0.2619    0.6780   -0.4472
    0.3525    0.5895   -0.1732    0.3223   -0.4472
    0.5501   -0.3915    0.3915   -0.5501   -0.4472
   -0.3223    0.1732   -0.5895   -0.3525   -0.4472
   -0.6780    0.2619    0.6330   -0.0976   -0.4472

Оба (V,D) и (Vs,Ds) произведите разложение собственного значения A. Результаты A*V-V*D и A*Vs-Vs*Ds согласитесь до ошибки округления.

e1 = norm(A*V-V*D);
e2 = norm(A*Vs-Vs*Ds);
e = abs(e1 - e2)

Левые собственные вектора

Создайте 3х3 матрицу.

 A = [1 7 3; 2 9 12; 5 22 7];

Вычислите правые собственные вектора, V, собственные значения, D, и левые собственные вектора, W.

V = 3×3

   -0.2610   -0.9734    0.1891
   -0.5870    0.2281   -0.5816
   -0.7663   -0.0198    0.7912

D = 3×3

   25.5548         0         0
         0   -0.5789         0
         0         0   -7.9759

W = 3×3

   -0.1791   -0.9587   -0.1881
   -0.8127    0.0649   -0.7477
   -0.5545    0.2768    0.6368

Проверьте, что результаты удовлетворяют W'*A = D*W'.

ans = 3×3
10-13 ×

    0.1155   -0.0711   -0.0711
   -0.0033   -0.0215   -0.0408
    0.0022    0.0266    0.0178

Идеально, разложение собственного значения удовлетворяет отношению. Начиная с eig выполняет разложение с помощью расчетов с плавающей точкой, затем W'*A может, в лучшем случае приблизиться к D*W'. Другими словами, W'*A - D*W' близко к, но не точно, 0.

Собственные значения недиагонализируемой (дефектной) матрицы

Создайте 3х3 матрицу.

A = [3 1 0; 0 3 1; 0 0 3];

Вычислите собственные значения и правые собственные вектора A.

V = 3×3

    1.0000   -1.0000    1.0000
         0    0.0000   -0.0000
         0         0    0.0000

D = 3×3

     3     0     0
     0     3     0
     0     0     3

A повторил собственные значения, и собственные вектора весьма зависимы. Это означает тот A не является диагонализируемым и является, поэтому, дефектным.

Проверьте тот V и D удовлетворите уравнению, A*V = V*D, даже при том, что A является дефектным.

ans = 3×3
10-15 ×

         0    0.8882   -0.8882
         0         0    0.0000
         0         0         0

Идеально, разложение собственного значения удовлетворяет отношению. Начиная с eig выполняет разложение с помощью расчетов с плавающей точкой, затем A*V может, в лучшем случае приблизиться к V*D. Другими словами, A*V - V*D близко к, но не точно, 0.

Обобщенные собственные значения

Создайте две матрицы, A и B, затем решите обобщенную задачу о собственных значениях для собственных значений и правых собственных векторов парного (A,B).

A = [1/sqrt(2) 0; 0 1];
B = [0 1; -1/sqrt(2) 0];
[V,D]=eig(A,B)
V = 2×2 complex

   1.0000 + 0.0000i   1.0000 + 0.0000i
   0.0000 - 0.7071i   0.0000 + 0.7071i

D = 2×2 complex

   0.0000 + 1.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 - 1.0000i

Проверьте, что результаты удовлетворяют A*V = B*V*D.

Остаточная ошибка A*V - B*V*D ниже нуля.

Обобщенные собственные значения Используя алгоритм QZ для плохо обусловленных матриц

Создайте плохо обусловленную симметрическую матрицу, содержащую значения близко к точности машины.

format long e
A = diag([10^-16, 10^-15])
A = 2×2

    0.1000         0
         0    1.0000

Вычислите обобщенные собственные значения и набор правых собственных векторов с помощью алгоритма по умолчанию. В этом случае алгоритмом по умолчанию является 'chol'.

V1 = 2×2

    1.0000         0
         0    0.3162

D1 = 2×2

    1.0000         0
         0    1.0000

Теперь вычислите обобщенные собственные значения и набор правых собственных векторов с помощью 'qz' алгоритм.

Проверяйте как хорошо 'chol' результат удовлетворяет A*V1 = A*V1*D1.

format short
A*V1 - A*V1*D1
ans = 2×2
10-23 ×

    0.1654         0
         0   -0.6617

Теперь проверяйте как хорошо 'qz' результат удовлетворяет A*V2 = A*V2*D2.

Когда обе матрицы симметричны, eig использует 'chol' алгоритм по умолчанию. В этом случае алгоритм QZ возвращает более точные результаты.

Обобщенные Собственные значения, Где Одна Матрица Сингулярна

Создайте единичную матрицу 2 на 2, A, и сингулярная матрица, B.

A = eye(2);
B = [3 6; 4 8];

При попытке вычислить обобщенные собственные значения матрицы B-1A с командой [V,D] = eig(BA), затем MATLAB® возвращает ошибку потому что BA производит Inf значения.

Вместо этого вычислите обобщенные собственные значения и правые собственные вектора путем передачи обеих матриц eig функция.

V = 2×2

   -0.7500   -1.0000
   -1.0000    0.5000

Лучше передать обе матрицы отдельно и позволить eig выберите лучший алгоритм, чтобы решить задачу. В этом случае, eig(A,B) возвращает набор собственных векторов и по крайней мере одного действительного собственного значения, даже при том, что B не является обратимым.

Проверить Av=λBv для первого собственного значения и первого собственного вектора.

eigval = D(1,1);
eigvec = V(:,1);
A*eigvec - eigval*B*eigvec
ans = 2×1
10-15 ×

    0.1110
    0.2220

Идеально, разложение собственного значения удовлетворяет отношению. Поскольку разложение выполняется с помощью расчетов с плавающей точкой, затем A*eigvec может, в лучшем случае приблизиться к eigval*B*eigvec, когда это делает в этом случае.

Входные параметры

свернуть все

AВведите матрицу
квадратная матрица

Введите матрицу в виде действительной или комплексной квадратной матрицы.

Типы данных: double | single
Поддержка комплексного числа: Да

BОбобщенная входная матрица задачи о собственных значениях
квадратная матрица

Обобщенная входная матрица задачи о собственных значениях в виде квадратной матрицы действительных или комплексных чисел. B должен быть одного размера с A.

Типы данных: double | single
Поддержка комплексного числа: Да

balanceOption balanceOption
'balance' (значение по умолчанию) | 'nobalance'

Сбалансируйте опцию в виде: 'balance', который включает предварительный шаг балансировки или 'nobalance' который отключает его. В большинстве случаев балансирующийся шаг улучшает создание условий A приводить к более точным результатам. Однако существуют случаи, в которых балансировка приводит к неправильным результатам. Задайте 'nobalance' когда A содержит значения, шкала которых отличается существенно. Например, если A содержит ненулевые целые числа, а также очень маленький (около нуля) значения, затем балансирующийся шаг может масштабировать маленькие значения, чтобы сделать их столь же значительными как целые числа и привести к неточным результатам.

'balance' поведение по умолчанию. Для получения дополнительной информации о балансировке, смотрите balance.

algorithmОбобщенный алгоритм собственного значения
'chol' | 'qz'

Обобщенный алгоритм собственного значения в виде 'chol' или 'qz', который выбирает алгоритм, чтобы использовать для вычисления обобщенных собственных значений пары.

алгоритм Описание
'chol' Вычисляет обобщенные собственные значения A и B использование факторизации Холесского B.
'qz' Использует алгоритм QZ, также известный как обобщенное разложение Шура. Этот алгоритм игнорирует симметрию A и B.

В общем случае эти два алгоритма возвращают тот же результат. Алгоритм QZ может быть более устойчивым для определенных проблем, таким как те, которые включают плохо обусловленные матрицы.

Когда вы не используете algorithm аргумент, eig функция выбирает алгоритм на основе свойств A и B. Это использует 'chol' алгоритм для симметричного (Эрмитового) A и симметричный (Эрмитов) положительный определенный B. В противном случае это использует 'qz' алгоритм.

Независимо от алгоритма вы задаете, eig функционируйте всегда использует алгоритм QZ когда A или B не симметричны.

outputFormВыходной формат собственных значений
'vector' | 'matrix'

Выходной формат собственных значений в виде 'vector' или 'matrix'. Эта опция позволяет вам задавать, возвращены ли собственные значения в вектор-столбце или диагональной матрице. Поведение по умолчанию варьируется согласно количеству заданных выходных параметров:

  • Если вы задаете тот выход, такой как e = eig(A), затем собственные значения возвращены как вектор-столбец по умолчанию.

  • Если вы задаете два или три выходных параметров, такие как [V,D] = eig(A), затем собственные значения возвращены как диагональная матрица, D, по умолчанию.

Пример: D = eig(A,'matrix') возвращает диагональную матрицу собственных значений с одним выходом.

Выходные аргументы

свернуть все

e — Собственные значения (возвратился как вектор),
вектор-столбец

Собственные значения, возвращенные как вектор-столбец, содержащий собственные значения (или обобщенные собственные значения пары) с кратностью. Каждое собственное значение e(k) соответствует правому собственному вектору V(:,k) и левый собственный вектор W(:,k).

  • Когда A действителен симметричный или комплексный Эрмитов, значения e это удовлетворяет A v =, λ v действителен.

  • Когда A действителен скошено-симметричный или комплексный скошено-эрмитов, значения e это удовлетворяет A v =, λ v является мнимым.

V — Правые собственные вектора
квадратная матрица

Правые собственные вектора, возвращенные как квадратная матрица, столбцы которой являются правыми собственными векторами A или обобщенные правые собственные вектора пары, (A,B). Форма и нормализация V зависит от комбинации входных параметров:

  • [V,D] = eig(A) возвращает матричный V, чьи столбцы являются правыми собственными векторами A таким образом, что A*V = V*D. Собственные вектора в V нормированы так, чтобы 2-норма каждого равнялась 1.

    Если A действителен симметричный, Эрмитов, или скошено-эрмитов, затем правые собственные вектора V ортонормированы.

  • [V,D] = eig(A,'nobalance') также возвращает матричный V. Однако 2-норма каждого собственного вектора не обязательно 1.

  • [V,D] = eig(A,B) и [V,D] = eig(A,B,algorithm) возвратите V как матрица, столбцы которой являются обобщенными правыми собственными векторами, которые удовлетворяют A*V = B*V*D. 2-норма каждого собственного вектора не обязательно 1. В этом случае, D содержит обобщенные собственные значения пары, (A,B), по основной диагонали.

    Когда eig использует 'chol' алгоритм с симметричным (Эрмитовым) A и симметричный (Эрмитов) положительный определенный B, это нормирует собственные вектора в V так, чтобы B– норма каждого равняется 1.

Различные машины и релизы MATLAB® может произвести различные собственные вектора, которые все еще численно точны:

  • Для действительных собственных векторов может измениться знак собственных векторов.

  • Для комплексных собственных векторов собственные вектора могут быть умножены на любое комплексное число величины 1.

  • Для собственного значения кратного его собственные вектора могут быть повторно объединены через линейные комбинации. Например, если A x = λ x и A y = λ y, то A (x +y) = λ (x +y), таким образом, x +y также является собственным вектором A.

D — Собственные значения (возвратился как матрица),
диагональная матрица

Собственные значения, возвращенные как диагональная матрица с собственными значениями A на основной диагонали или собственных значениях пары, (A,B), с кратностью, на основной диагонали. Каждое собственное значение D(k,k) соответствует правому собственному вектору V(:,k) и левый собственный вектор W(:,k).

  • Когда A действителен симметричный или комплексный Эрмитов, значения D это удовлетворяет A v =, λ v действителен.

  • Когда A действителен скошено-симметричный или комплексный скошено-эрмитов, значения D это удовлетворяет A v =, λ v является мнимым.

W Левые собственные вектора
квадратная матрица

Левые собственные вектора, возвращенные как квадратная матрица, столбцы которой являются левыми собственными векторами A или обобщенные левые собственные вектора пары, (A,B). Форма и нормализация W зависит от комбинации входных параметров:

  • [V,D,W] = eig(A) возвращает матричный W, чьи столбцы являются левыми собственными векторами A таким образом, что W'*A = D*W'. Собственные вектора в W нормированы так, чтобы 2-норма каждого равнялась 1. Если A симметрично, затем W совпадает с V.

  • [V,D,W] = eig(A,'nobalance') также возвращает матричный W. Однако 2-норма каждого собственного вектора не обязательно 1.

  • [V,D,W] = eig(A,B) и [V,D,W] = eig(A,B,algorithm) возвращает W как матрица, столбцы которой являются обобщенными левыми собственными векторами, которые удовлетворяют W'*A = D*W'*B. 2-норма каждого собственного вектора не обязательно 1. В этом случае, D содержит обобщенные собственные значения пары, (A,B), по основной диагонали.

    Если A и B симметричны, затем W совпадает с V.

Различные машины и релизы MATLAB могут произвести различные собственные вектора, которые все еще численно точны:

  • Для действительных собственных векторов может измениться знак собственных векторов.

  • Для комплексных собственных векторов собственные вектора могут быть умножены на любое комплексное число величины 1.

  • Для собственного значения кратного его собственные вектора могут быть повторно объединены через линейные комбинации. Например, если A x = λ x и A y = λ y, то A (x +y) = λ (x +y), таким образом, x +y также является собственным вектором A.

Больше о

свернуть все

Симметрическая матрица

  • Квадратная матрица, A, симметрично, если это равно своему несопряженному, транспонируют, A = A.'.

    В терминах элементов матрицы это означает это

  • Поскольку действительные матрицы незатронуты комплексным спряжением, действительная матрица, которая симметрична, является также Эрмитовой. Например, матрица

    является и симметричным и Эрмитовым.

Кососимметрическая матрица

  • Квадратная матрица, A, скошено-симметрично, если это равно отрицанию своего несопряженного, транспонируют, A = -A.'.

    В терминах элементов матрицы это означает это

  • Поскольку действительные матрицы незатронуты комплексным спряжением, действительная матрица, которая скошено-симметрична, является также скошено-эрмитовой. Например, матрица

    является и скошено-симметричным и скошено-эрмитовым.

Эрмитова матрица

  • Квадратная матрица, A, является Эрмитовым, если это равно своему комплексному сопряженному транспонированию, A = A'.

    В терминах элементов матрицы это означает это

  • Записи на диагонали Эрмитовой матрицы всегда действительны. Поскольку действительные матрицы незатронуты комплексным спряжением, действительная матрица, которая симметрична, является также Эрмитовой. Например, матрица

    является и симметричным и Эрмитовым.

  • Собственные значения Эрмитовой матрицы действительны.

Скошенная эрмитова матрица

  • Квадратная матрица, A, является скошено-эрмитовым, если это равно отрицанию своего комплексного сопряженного транспонирования, A = -A'.

    В терминах элементов матрицы это означает это

  • Записи на диагонали скошенной Эрмитовой матрицы всегда чисты мнимый или нуль. Поскольку действительные матрицы незатронуты комплексным спряжением, действительная матрица, которая скошено-симметрична, является также скошено-эрмитовой. Например, матрица

    является и скошено-эрмитовым и скошено-симметричным.

  • Собственные значения скошенной Эрмитовой матрицы являются чисто мнимыми или нуль.

Советы

  • eig функция может вычислить собственные значения разреженных матриц, которые действительны и симметричны. Вычислить собственные вектора разреженной матрицы или вычислить собственные значения разреженной матрицы, которая не действительна и симметрична, использование eigs функция.

Вопросы совместимости

развернуть все

eig возвращает NaN для неличных входных параметров

Поведение изменяется в R2021b

eig возвращает NaN значения, когда вход содержит неличные значения (Inf или NaN). Ранее eig выдал ошибку, когда вход содержал неличные значения.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • V может представлять различный базис собственных векторов. Это представление означает, что собственный вектор, вычисленный сгенерированным кодом, может отличаться в C и Коде С++, чем в MATLAB. Собственные значения в D не может быть в том же порядке как в MATLAB. Можно проверить V и D значения при помощи уравнения A*V = V*D задачи о собственных значениях.

    • Для стандартной задачи о собственных значениях, [V,D] = eig(A), когда A является Эрмитовым или скошено-эрмитовым, использование генерации кода schur вычислить V и D. В противном случае, результаты [V,D] = eig(A) похожи на результаты, полученные при помощи [V,D] = eig(A,eye(size(A)),'qz') в MATLAB, за исключением того, что столбцы V нормированы.

  • Если вы задаете класс коллбэка библиотеки LAPACK, то генератор кода поддерживает эти опции:

    • 'balance' и 'nobalance' опции для стандартной задачи о собственных значениях.

    • Расчет левых собственных векторов.

  • Выходные параметры являются комплексными.

  • Когда входная матрица содержит неличное значение, сгенерированный код не выдает ошибку. Вместо этого выход содержит NaN значения.

  • Генерация кода не поддерживает входные параметры разреженной матрицы для этой функции.

Основанная на потоке среда
Запустите код в фоновом режиме с помощью MATLAB® backgroundPool или ускорьте код с Parallel Computing Toolbox™ ThreadPool.

Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • Только эти синтаксисы одно входного параметра поддерживаются:

    • e = eig(A)

    • [V,D] = eig(A)

  • Если входная матрица A содержит NaN или Inf, затем функция возвращает ошибку.

Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).

Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • Для несимметричного полного матричного A, необходимо использовать eig(A,'nobalance') синтаксис.

  • Для обобщенного случая, eig(A,B)A и B должен быть действителен симметричный или комплексный Эрмитов. Кроме того, B должен быть положителен определенный.

  • Эти синтаксисы не поддерживаются для полных распределенных массивов:

    [__] = eig(A,'balance') для несимметричного A.

    [__] = eig(A,B,'qz')

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

Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).

Представлено до R2006a

Важной задачей
линейной алгебры является задача на
собственные значения.

Собственные
числа

(значения)
λi
и собственные
векторы

(ui

0
)
квадратной матрицы А
удовлетворяют равенствам

Aui
=
λiui.

Собственные
значения λ
квадратной матрицы А
являются корнями ее характеристического
уравнения│A
λE
=
0
,
где E
– единичная матрица того же порядка n,
что и А.
Многочлен │A
λE│называется
характеристическим полиномом матрицы
А.
В общем случае имеется n
различных комплексных или вещественных
корней характеристического уравнения.
Их количество будет меньше в случае
кратных корней.

Пример:

Дана квадратная
матрица второго порядка

A
=

Решить
задачу на собственные значения вручную
и средствами MATLAB.

Решение:

Находим
характеристический полином матрицы A.

E
=
,
A
λE
= = (3
λ)(2
λ)
– 20 =
λ2
– 5
λ
– 14
.

В
MATLAB
массив коэффициентов характеристического
полинома матрицы А
возвращает команда poly:

>>
poly(A)

ans
=

1
-5 -14

Характеристическим
уравненим является квадратное уравнение

λ2
– 5
λ
– 14 = 0
.

Вычисляем корни
этого уравнения.

λ1,2
= = = = =
.

Корни
уравнения λ1
= -2

и λ2
= 7

являются собственными значениями
матрицы А.

Найдем теперь
собственные векторы, соответствующие
этим собственным значениям. Собственный
вектор

U
= ,

соответствующий
собственному значению λ1
= -2
,
определяется уравнениями

т.
е. 5u1
+
4
u2
= 0
.
Из этого равенства следует, что собственный
вектор U
определяется с точностью до числового
множителя, поэтому одну из координат
собственного вектора можно зафиксировать.
Полагая u1
= -4
,
найдем u2
= 5

и получим

U
= .

Аналогично,
собственный вектор

V
= ,

соответствующий
собственному значению λ2
= 7
,
определяется уравнениями

т.
е. v1
– v
2
= 0
.
Полагая v1
= 1
,
найдем v2
= 1

и получим

V
= .

Следовательно,
собственным значениям λ1
= -2
и
λ2
= 7

соответствуют собственные векторы

U
= и V
= .

На рассмотренном
примере мы убедились, что задача на
собственные значения оказалась достаточно
сложной и трудоемкой даже для матрицы
минимального (второго) порядка.

В
MATLAB
собственные значения матрицы A
вычисляет
команда eig(A):

>>
A=[3 4;5 2];

>>
Lambda=eig(A)

Lambda
=

7

-2

Команда
[R,Lam]=eig(A)
вычисляет как собственные значения,
так и собственные векторы:

>> [R,Lam]=eig(A)

R
=

0.7071 -0.6247

0.7071 0.7809

Lam
=

7
0

0 -2

Собственные
значения являются диагональными
элементами диагональной матрицы Lam,
а столбцы матрицы R
являются собственными векторами. Итак,
собственным значениям λ1
= -2
и
λ2
= 7

соответствуют собственные векторы

R1
= и R2
= .

Как
указывалось выше, собственные векторы
определяются с точностью до числового
множителя. Команда eig
вычисляет единичные
или нормированными
по евклидовой норме

собственные векторы.

Существуют
различные типы векторных норм. Норма
||R||p
вектора R
длины
n
определяется следующим образом:

||R||p
= (p = 1, 2, …)
.

Если
p=2
– норма называется евклидовой.

В
MATLAB
норму ||R||p
вектора R
вычисляет команда norm(R,p).
Команда norm(R)
вычисляет евклидову норму вектора R
по умолчанию. Если norm(R)
= 1
,
вектор R
называется единичным
или нормированным.

Вектор
R
нормируется следующим образом:

Rnorm
=
.

Пронормируем
найденные вручную собственные векторы

U
= и
V
= :

>> U=[-4;5];V=[1;1];

>> disp(U/norm(U))

-0.6247

0.7809

>> disp(V/norm(V))

0.7071

0.7071

Результы
совпали с собственными векторами R1
и R2,
вычисленными командой eig.

Для получения
вычисленных в символьной форме пар
собственных значений и собственных
векторов, введем следующую команду:

>>
[R,Lam]=eig(sym(A))

R
=

[ 1, 1]

[ 1, -5/4]

Lam
=

[ 7, 0]

[ 0, -2]

Некоторые
команды линейной алгебры MATLAB
мы рассматривали ранее. К ним относятся,
в частности, команды вычисления
определителя и обратной матрицы det
и inv.(см.
разд. 1.10).

В
MATLAB
cуществует
и другие команды решения типовых задач
линейной алгебры.

Так,
команда norm
вычисляет различные виды норм векторов
и матриц. Справку по этой команде можно
получить, набрав в командной строке doc
norm.

Команда rank(B)возвращает ранг прямоугольной матрицыB.

Ранг
матрицы

B
есть такое число r
=
rB,
что по крайней мере один из определителей
r
– го порядка, получаемый из этой матрицы
при удалении строк и/или столбцов,
отличен от нуля, а все определители
(r+1)
– го порядка равны нулю. Ранг матрицы
равен наибольшему числу линейно
независимых строк (или столбцов).
Квадратная
матрица B порядка
n
является невырожденной в том и только
в тот случае, когда ее ранг

rB
=
n,
т. е. det(B)
≠ 0.

Найдем ранг
рассмотренной выше матрицы

A
=
:

>>
disp(rank(A))

2

Поскольку
ранг и порядок квадратной матрицы А
совпадают, ее определитель должен быть
ненулевым. Проверка:

>>
det(A)

ans
=

-14

Перечислим некоторые
из команд линейной алгебры:

cond
– число обусловленности матрицы;

lu
– разложение
на треугольные матрицы;

svd
– сингулярное разложение матрицы и т.
д.

Справочная информация
по командам линейной алгебры находится
в разделе matfunсправочной системы
MATLAB.

Соседние файлы в папке Методички

  • #
  • #
  • #
  • #

Всегда онлайн

49 / 49 / 10

Регистрация: 13.04.2014

Сообщений: 1,407

1

Как найти собственные значения и собственные векторы матрицы?

17.12.2014, 08:28. Показов 38920. Ответов 9


Студворк — интернет-сервис помощи студентам

Дано матрица вида https://www.cyberforum.ru/cgi-bin/latex.cgi?A=begin{pmatrix} 2 && 1 \  2 && 3 end{pmatrix}

Найти собственные значения и собственные векторы матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?begin{vmatrix}2-lambda  &  1& \  2&  3-lambda & end{vmatrix}

Отсюда
https://www.cyberforum.ru/cgi-bin/latex.cgi?lambda_1=1\lambda_2=4

при https://www.cyberforum.ru/cgi-bin/latex.cgi?lambda_1=1 получим!

https://www.cyberforum.ru/cgi-bin/latex.cgi?left{begin{matrix}x_1 + x_2=0 \ 2x_1+2x_2=0 end{matrix}right.

Отсюда при собственные значения https://www.cyberforum.ru/cgi-bin/latex.cgi?lambda_1=1 получим собственные векторы матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?X=(1,,,, -1)

Теперь, вопрос как найти собственные значения и собственные векторы матрицы на MatLab

тут сказано что, функция eig поможет, но я не знаю как, помогите пожалуйста



0



illi2

19 / 19 / 9

Регистрация: 26.07.2013

Сообщений: 51

17.12.2014, 09:13

2

Всё очень просто…Да, можно использовать функцию eig. Всё в Хэлпе написано.

Matlab M
1
2
A = [2 1; 2 3];
[V,D,W] = eig(A)

Где V – правые собственные вектора; D – собственные значения; W – левые собственные вектора.
Не сходится с Вашим ответом, потому что Matlab нормирует вектор.



0



Maikl2020

Всегда онлайн

49 / 49 / 10

Регистрация: 13.04.2014

Сообщений: 1,407

17.12.2014, 11:18

 [ТС]

3

illi2, Ну не знаю тут функции poly, roots что обозначат, но кажется собственные значения матрица найдено правильно!

Matlab M
1
2
3
4
5
6
7
8
9
10
11
A = [2 1; 2 3]
A =
     2     1
     2     3
>> p=poly(A)
p =
     1    -5     4
>> r=roots(p)
r =
     4
     1

Добавлено через 1 минуту
Но теперь как можно найти собственные векторы матрицы



0



illi2

19 / 19 / 9

Регистрация: 26.07.2013

Сообщений: 51

17.12.2014, 11:47

4

Не понял Вас вообще. Чем не устраивает функция eig()?

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
A = [2 1; 2 3];
[V,D,W] = eig(A)
V =
   -0.7071   -0.4472
    0.7071   -0.8944
 
D =
     1     0
     0     4
 
W =
   -0.8944   -0.7071
    0.4472   -0.7071

V содержит два искомых собственных вектора. Для собственного значения 1 (матрица D – диагональная,содержит все собственные значения расположенные по нарастанию собственного значения) – это первый столбец матрицы V(:,1):
(-0.7071, 0.7071) – просто он нормирован. Это Ваш вектор X(-1;1).



0



Maikl2020

Всегда онлайн

49 / 49 / 10

Регистрация: 13.04.2014

Сообщений: 1,407

17.12.2014, 12:03

 [ТС]

5

illi2, Как найти собственный вектор матрицы, без нормированный вектор. т.е. программа вывел X(-1;1).

Добавлено через 1 минуту
illi2, Еще у меня не работает функция eig(A)

Matlab M
1
2
3
4
 A = [2 1; 2 3];
[V,D,W] = eig(A)
??? Error using ==> eig
Too many output arguments.



0



illi2

19 / 19 / 9

Регистрация: 26.07.2013

Сообщений: 51

17.12.2014, 13:41

6

Лучший ответ Сообщение было отмечено Maikl2020 как решение

Решение

У Вас просто более старая версия Матлаба (я запускал в R2014а).
Нужно писать так (убрать W) (это в R2011а):

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
A = [2 1; 2 3];
[V,D,W] = eig(A)
??? Error using ==> eig
Too many output arguments.
 
>> A = [2 1; 2 3];
>> [V,D] = eig(A)
V =
   -0.7071   -0.4472
    0.7071   -0.8944
D =
     1     0
     0     4

Не нормированный вектор Матлаб скорее всего не выведет (так как это целое множество подобных векторов)…

Можно самому просто переправить как-нить так выходные векторы матрицы V:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
A = [2 1; 2 3];
[V,D] = eig(A)
 
for i=1:size(V,2)
    V(:,i) = V(:,i)/min(abs(V(:,i))); % перенормировываем
end
 
disp('V=')
disp(V)
 
V =
   -0.7071   -0.4472
    0.7071   -0.8944
D =
     1     0
     0     4
V=
    -1    -1
     1    -2

Добавлено через 11 минут
Для красоты можно ещё вот так сделать:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
A = [2 1; 2 3];
[V,D] = eig(A)
 
for i=1:size(V,2)
    V(:,i) = V(:,i)/min(abs(V(:,i)));
end
% Считаем количество отрицательных чисел в матрице и если их много домножаем на (-1), чтобы число %положительных чисел было больше в матрице... (формально просто изменили направление векторов)
V = (length(V(V<0))>floor((size(V,1)*size(V,2))/2))*(-1)*V + (length(V(V<0))<=floor((size(V,1)*size(V,2))/2))*V;
disp('V=')
disp(V)
 
V =
   -0.7071   -0.4472
    0.7071   -0.8944
 
D =
     1     0
     0     4
 
V=
     1     1
    -1     2



1



Всегда онлайн

49 / 49 / 10

Регистрация: 13.04.2014

Сообщений: 1,407

17.12.2014, 14:01

 [ТС]

7

illi2, Спасибо, Извините еще два вопроса у меня пожалуйста.
1) Объясните, пожалуйста

Цитата
Сообщение от illi2
Посмотреть сообщение

i=1:size(V,2)
* * V(:,i) = V(:,i)/min(abs(V(:,i)));

2) Где можно скачать R2014а ?

Добавлено через 9 минут

Цитата
Сообщение от illi2
Посмотреть сообщение

V=
* * *1 * * 1
* * -1 * * 2

собственные векторы матрицы X=(1, -1) какой из них?



0



illi2

19 / 19 / 9

Регистрация: 26.07.2013

Сообщений: 51

17.12.2014, 14:28

8

Лучший ответ Сообщение было отмечено Maikl2020 как решение

Решение

Цитата
Сообщение от Maikl2020
Посмотреть сообщение

1) Объясните, пожалуйста
i=1:size(V,2)
* * V(:,i) = V(:,i)/min(abs(V(:,i)));

Нормируем по столбцам.

Matlab M
1
i=1:size(V,2)

– цикл по всем столбцам. size(V,2) – число столбцов матрицы V.

В матрице V собственные вектора расположены в столбцах этой матрицы. V(:,i) – i-ый столбец матрицы V. Знак ( : ) – обозначает “все элементы”, ( : , i ) – все элементы столбца i.

V(:,i) = V(:,i)/min(abs(V(:,i))); – нормируем каждый столбец по отдельности (равносильно “каждый вектор”) на min(abs(V(:,i))) – минимальный по абсолютному значению элемент данного столбца. Это чтобы в каждом столбце минимальное число получилось равно “1” (или “-1”).

Цитата
Сообщение от Maikl2020
Посмотреть сообщение

собственные векторы матрицы X=(1, -1) какой из них?

Для собственного значения 1 – это вектор (1,-1) – первый столбец в V. Для собственного значения 4 – это вектор (1,2) – 2-ой столбец.

R2014a можно скачать на http://www.mathworks.com/



1



Maikl2020

Всегда онлайн

49 / 49 / 10

Регистрация: 13.04.2014

Сообщений: 1,407

20.12.2014, 20:09

 [ТС]

9

illi2, Здравствуйте, почему MatLab выводит комплексные числи

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 a=[1 0 3; 2 3 2; 0 2 1]
 
a =
 
     1     0     3
     2     3     2
     0     2     1
 
>> eig(a)
 
ans =
 
   4.8491          
   0.0754 + 1.5042i
   0.0754 - 1.5042i

Добавлено через 2 часа 36 минут
illi2, И еще вы думайте это правильно решена

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
A = [1 2 3; 0 0 1; 0 1 0];
[V,D] = eig(A)
for i=1:size(V,3)
    V(:,i) = V(:,i)/min(abs(V(:,i))); % перенормировываем
end
disp('V=')
disp(V)
 
V =
 
    1.0000   -1.0000   -0.3333
         0    0.0000   -0.6667
         0    0.0000    0.6667
 
 
D =
 
     1     0     0
     0     1     0
     0     0    -1
 
V=
       Inf   -1.0000   -0.3333
       NaN    0.0000   -0.6667
       NaN    0.0000    0.6667

Добавлено через 18 минут
illi2, Я думаю что MatLab всегда y берет 1 или -1 да?



0



illi2

19 / 19 / 9

Регистрация: 26.07.2013

Сообщений: 51

22.12.2014, 14:09

10

Лучший ответ Сообщение было отмечено Maikl2020 как решение

Решение

Доброго времени суток.
Касательно Ваших вопросов.
Матлаб считает правильно. А почему он выдает комплексные числа – это вопросы уже про некоторые особенности диагонализации матриц и поиска собственных значений и векторов (помнится такое еще понятие как присоединенные вектора), которые относятся к линейной алгебре. Я, честно скажу, не хочу лезть и поднимать “немного” забытую теорию и объяснять Вам. Думаю, Вы сами это сделаете лучше или спросите кого-нить более компетентного.

Другой вопрос: при решении системы линейных уравнений (на собственные числа или вектора) можно получить такие случаи, когда будет 0=0. То есть удовлетворяет любое значение. Матлаб в этом случае выдаст ответ (1 0 0) или что-то подобное, то есть единичный вектор или базис из единичных векторов.

Цитата
Сообщение от Maikl2020
Посмотреть сообщение

V(:,i) = V(:,i)/min(abs(V(:,i))); % перенормировываем

– Эта строка не работает, когда вектор имеет нулевые элементы, ибо min(abs(V(:,i))) = 0 и получаем деление на 0. Нужно что-то вроде такого:

Matlab M
1
V(:,i) = V(:,i)/min(abs(V(V(:,i)~=0,i)));



1



Добавить комментарий