eig

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

Синтаксис

e = eig(A)
[V,D] = eig(A)
[V,D,W] = eig(A)
e = eig(A,B)
[V,D] = eig(A,B)
[V,D,W] = eig(A,B)
[___] = eig(A,balanceOption)
[___] = eig(A,B,algorithm)
[___] = eig(___,eigvalOption)

Описание

пример

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

пример

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

пример

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

Задача о собственных значениях должна определить решение уравнения Av = λv, где A является n-by-n матрица, v является вектором - столбцом длины n, и λ является скаляром. Значения λ, которые удовлетворяют уравнению, являются собственными значениями. Соответствующие значения v, которые удовлетворяют уравнению, являются правыми собственными векторами. Левые собственные вектора, w, удовлетворяют уравнению w’A = λ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.

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

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

Примеры

свернуть все

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

A = gallery('lehmer',4)
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 = eig(A)
e = 4×1

    0.2078
    0.4078
    0.8482
    2.5362

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

D = eig(A,'matrix')
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 = gallery('circul',3)
A = 3×3

     1     2     3
     3     1     2
     2     3     1

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

[V,D] = eig(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.

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 = magic(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,D] = eig(A)
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,ind] = sort(diag(D))
d = 5×1

  -21.2768
  -13.1263
   13.1263
   21.2768
   65.0000

ind = 5×1

     2
     3
     5
     4
     1

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

Ds = D(ind,ind)
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 = V(:,ind)
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)
e = 9.7444e-16

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

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

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

[V,D,W] = eig(A)
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'.

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,D] = eig(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 является дефектным.

A*V - V*D
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
ans = 2×2

     0     0
     0     0

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

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

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

     1.000000000000000e-16                         0
                         0     1.000000000000000e-15

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

[V1,D1] = eig(A,A)
V1 = 2×2

     1.000000000000000e+08                         0
                         0     3.162277660168380e+07

D1 = 2×2

     9.999999999999999e-01                         0
                         0     1.000000000000000e+00

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

[V2,D2] = eig(A,A,'qz')
V2 = 2×2

     1     0
     0     1

D2 = 2×2

     1     0
     0     1

Проверьте, как хорошо результат '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.

A*V2 - A*V2*D2
ans = 2×2

     0     0
     0     0

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

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

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

Попытайтесь вычислить обобщенные собственные значения матрицы.

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

Предупреждение: Матрица сингулярна к рабочей точности.

Error using eig

Input to EIG must not contain NaN or Inf.

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

[V,D] = eig(A,B)
V = 2×2

   -0.7500   -1.0000
   -1.0000    0.5000

D = 2×2

    0.0909         0
         0       Inf

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

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

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, как это делает в этом случае.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

Собственные значения, возвращенные как вектор - столбец, содержащий собственные значения (или обобщенные собственные значения пары) с кратностью.

Когда A действителен и симметричен или комплексный Эрмитов, значения e, которые удовлетворяют Av = λ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.

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

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

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

Левые собственные вектора, возвращенные как квадратная матрица, столбцы которой являются левыми собственными векторами 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.

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

Советы

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

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

Смотрите также

| | | | |

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

Была ли эта тема полезной?