eig

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

Описание

пример

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 является n- n матрица, 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 является n- n матрицы, 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(___,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 = 1.8933e-29

Создайте 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];

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

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

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

свернуть все

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

Типы данных: 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') возвращает диагональную матрицу собственных значений с одним выходом.

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

свернуть все

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

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

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

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

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

Советы

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

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

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

| | | | | |

Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте