eigs

Подмножество собственных значений и собственных векторов

Описание

пример

d = eigs(A) возвращает вектор из шести собственных значений наибольшей величины матрицы A. Это наиболее полезно при вычислении всех собственных значений с eig является вычислительно дорогим, например, с большими разреженными матрицами.

пример

d = eigs(A,k) возвращает k наибольшая величина собственных значений.

пример

d = eigs(A,k,sigma) возвращает k собственные значения, основанные на значении sigma. Для примера, eigs(A,k,'smallestabs') возвращает k наименьшие собственные значения.

d = eigs(A,k,sigma,Name,Value) задает дополнительные опции с одним или несколькими аргументами пары "имя-значение". Для примера, eigs(A,k,sigma,'Tolerance',1e-3) настраивает допуск сходимости для алгоритма.

пример

d = eigs(A,k,sigma,opts) задает опции с использованием структуры.

пример

d = eigs(A,B,___) решает обобщенную задачу собственного значения A*V = B*V*D. Можно опционально задать k, sigma, opts, или пары "имя-значение" в качестве дополнительных входных параметров.

d = eigs(Afun,n,___) задает указатель на функцию Afun вместо матрицы. Второй входной n задает размер матрицы A используется в Afun. Можно опционально задать B, k, sigma, opts, или пары "имя-значение" в качестве дополнительных входных параметров.

пример

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

пример

[V,D,flag] = eigs(___) также возвращает флаг сходимости. Если flag является 0, затем все собственные значения сходились.

Примеры

свернуть все

Матрица A = delsq(numgrid('C',15)) - симметричная положительно определенная матрица с собственными значениями, достаточно хорошо распределенными в интервале (0 8). Вычислите шесть собственных значений наибольшей величины.

A = delsq(numgrid('C',15));
d = eigs(A)
d = 6×1

    7.8666
    7.7324
    7.6531
    7.5213
    7.4480
    7.3517

Задайте второй вход, чтобы вычислить определенное число самых больших собственных значений.

d = eigs(A,3)
d = 3×1

    7.8666
    7.7324
    7.6531

Матрица A = delsq(numgrid('C',15)) - симметричная положительно определенная матрица с собственными значениями, достаточно хорошо распределенными в интервале (0 8). Вычислите пять наименьших собственных значений.

A = delsq(numgrid('C',15));  
d = eigs(A,5,'smallestabs')
d = 5×1

    0.1334
    0.2676
    0.3469
    0.4787
    0.5520

Создайте 1500 на 1500 случайную разреженную матрицу с 25% приблизительной плотностью ненулевых элементов.

n = 1500;
A = sprand(n,n,0.25);

Найдите LU-факторизацию матрицы, вернув вектор сочетания p который удовлетворяет A(p,:) = L*U.

[L,U,p] = lu(A,'vector');

Создайте указатель на функцию Afun который принимает входной параметр вектора x и использует результаты LU-разложения, чтобы, по сути, вернуть A\x.

Afun = @(x) U\(L\(x(p)));

Вычислите шесть собственных значений наименьшей величины с помощью eigs с помощью указателя на функцию Afun. Второй вход является размером A.

d = eigs(Afun,1500,6,'smallestabs')
d = 6×1 complex

   0.1423 + 0.0000i
   0.4859 + 0.0000i
  -0.3323 - 0.3881i
  -0.3323 + 0.3881i
   0.1019 - 0.5381i
   0.1019 + 0.5381i

west0479 является действительной 479 на 479 разреженной матрицей с как действительными, так и комплексными парами сопряженных собственных значений.

Загрузите west0479 матрица, затем вычислите и постройте график всех собственных значений с помощью eig. Поскольку собственные значения комплексны, plot автоматически использует действительные детали в качестве координат X, а мнимые детали - в качестве координат Y.

load west0479
A = west0479;
d = eig(full(A));
plot(d,'+')

Figure contains an axes. The axes contains an object of type line.

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

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

figure
plot(d, '+')
hold on
la = eigs(A,6,'largestabs');
plot(la,'ro')
sa = eigs(A,6,'smallestabs');
plot(sa,'go')
hold off
legend('All eigenvalues','Largest magnitude','Smallest magnitude')
xlabel('Real axis')
ylabel('Imaginary axis')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent All eigenvalues, Largest magnitude, Smallest magnitude.

figure
plot(d, '+')
hold on
ber = eigs(A,4,'bothendsreal');
plot(ber,'r^')
bei = eigs(A,4,'bothendsimag');
plot(bei,'g^')
hold off
legend('All eigenvalues','Both ends real','Both ends imaginary')
xlabel('Real axis')
ylabel('Imaginary axis')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent All eigenvalues, Both ends real, Both ends imaginary.

figure
plot(d, '+')
hold on
lr = eigs(A,3,'largestreal');
plot(lr,'ro')
sr = eigs(A,3,'smallestreal');
plot(sr,'go')
li = eigs(A,3,'largestimag','SubspaceDimension',45);
plot(li,'m^')
si = eigs(A,3,'smallestimag','SubspaceDimension',45);
plot(si,'c^')
hold off
legend('All eigenvalues','Largest real','Smallest real','Largest imaginary','Smallest imaginary')
xlabel('Real axis')
ylabel('Imaginary axis')

Figure contains an axes. The axes contains 5 objects of type line. These objects represent All eigenvalues, Largest real, Smallest real, Largest imaginary, Smallest imaginary.

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

A = delsq(numgrid('C', 150));

Вычислите шесть наименьших реальных собственных значений с помощью 'smallestreal', который использует метод Крылова с использованием A.

tic
d = eigs(A, 6, 'smallestreal')
d = 6×1

    0.0013
    0.0025
    0.0033
    0.0045
    0.0052
    0.0063

toc
Elapsed time is 1.301556 seconds.

Вычислите те же собственные значения с помощью 'smallestabs', который использует метод Крылова, используя обратную A.

tic
dsm = eigs(A, 6, 'smallestabs')
dsm = 6×1

    0.0013
    0.0025
    0.0033
    0.0045
    0.0052
    0.0063

toc
Elapsed time is 0.201428 seconds.

Собственные значения кластеризованы около нуля. The 'smallestreal' расчеты борются за сходимость, используя A поскольку зазор между собственными значениями настолько мал. И наоборот, 'smallestabs' опция использует обратную Aи, следовательно, обратные собственные значения A, которые имеют намного большую погрешность и поэтому легче вычислить. Эта улучшенная производительность возникает за счет факторизации A, что не обязательно с 'smallestreal'.

Вычисление собственных значений около числового sigma значение, которое почти равно собственному значению.

Матрица A = delsq(numgrid('C',30)) - симметричная положительно определенная матрица размера 632 с собственными значениями, достаточно хорошо распределенными в интервале (0 8), но с 18 собственными значениями, повторенными в 4.0. Чтобы вычислить некоторые собственные значения около 4.0, разумно попробовать вызов функции eigs(A,20,4.0). Однако этот вызов вычисляет самые большие собственные значения обратного A - 4.0*I, где I является матрицей тождеств. Потому что 4.0 является собственным значением A, эта матрица сингулярна и поэтому не имеет обратной. eigs сбой и выдача сообщения об ошибке. Числовое значение sigma не может быть точно равно собственному значению. Вместо этого необходимо использовать значение sigma это близко, но не равно 4,0, чтобы найти эти собственные значения.

Вычислите все собственные значения с помощью eigи 20 собственных значений, ближайших к 4-1e-6 с использованием eigs для сравнения результатов. Постройте график собственных значений, рассчитанных с каждым методом.

A = delsq(numgrid('C',30)); 
sigma = 4 - 1e-6;
d = eig(A);
D = sort(eigs(A,20,sigma));
plot(d(307:326),'ks')
hold on
plot(D,'k+')
hold off
legend('eig(A)','eigs(A,20,sigma)') 
title('18 Repeated Eigenvalues of A')

Figure contains an axes. The axes with title 18 Repeated Eigenvalues of A contains 2 objects of type line. These objects represent eig(A), eigs(A,20,sigma).

Создайте разреженные случайные матрицы A и B что оба имеют низкие плотности ненулевых элементов.

B = sprandn(1e3,1e3,0.001) + speye(1e3); 
B = B'*B; 
A = sprandn(1e3,1e3,0.005); 
A = A+A';

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

[R,p,s] = chol(B,'vector');
p
p = 0

Начиная с p равен нулю, B - симметричная положительно определенная матрица, которая удовлетворяет B(s,s) = R'*R.

Вычислите шесть собственных значений и собственных векторов наибольшей величины обобщенной задачи собственного значения, включающей A и R. Начиная с R является фактором Холецкого B, задайте 'IsCholesky' как true. Кроме того, с B(s,s) = R'*R и, таким образом R = chol(B(s,s)), используйте вектор сочетания s как значение 'CholeskyPermutation'.

[V,D,flag] = eigs(A,R,6,'largestabs','IsCholesky',true,'CholeskyPermutation',s);
flag
flag = 0

Начиная с flag равен нулю, все собственные значения сходятся.

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

свернуть все

Входная матрица, заданная как квадратная матрица. A обычно, но не всегда, большая и разреженная матрица.

Если A симметрично, тогда eigs использует специализированный алгоритм для этого случая. Если A почти симметрично, затем рассмотрите использование A = (A+A')/2 чтобы сделать A симметрично перед вызовом eigs. Это гарантирует, что eigs вычисляет реальные собственные значения вместо сложных таковых.

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

Входная матрица, заданная как квадратная матрица того же размера, что и A. Когда B задан, eigs решает обобщенную задачу собственного значения A*V = B*V*D.

Если B симметрично положительно определено, тогда eigs использует специализированный алгоритм для этого случая. Если B почти симметрично положительно определено, затем рассмотрите использование B = (B+B')/2 чтобы сделать B симметрично перед вызовом eigs.

Когда A скаляром, можно задать B как пустая матрица eigs(A,[],k) чтобы решить стандартную задачу собственного значения и изменить неоднозначность между B и k.

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

Количество собственных значений для вычисления, заданное как положительное скалярное целое число.

Пример: eigs(A,2) возвращает два крупных собственных значений A.

Тип собственных значений, заданный как одно из значений в таблице.

sigma

Описание

sigma (R2017a и более ранние версии)

скаляр (реальный или комплексный, включая 0)

Собственные значения ближе всего к числу sigma.

Без изменений

'largestabs' (по умолчанию)

Наибольшая величина.

'lm'

'smallestabs'

Наименьшая величина. То же, что и sigma = 0.

'sm'

'largestreal'

Самый большой реал.

'lr', 'la'

'smallestreal'

Наименьший реальный.

'sr', 'sa'

'bothendsreal'

Оба конца, с k/2 значения с самой большой и самой маленькой вещественной частью соответственно (еще один из верхнего конца, если k нечетно).

'be'

Для несимметричных задач, sigma также могут быть:

sigma

Описание

sigma (R2017a и более ранние версии)

'largestimag'

Самая большая мнимая часть.

'li' если A комплексная.

'smallestimag'

Самая маленькая мнимая часть.

'si' если A комплексная.

'bothendsimag'

Оба конца, с k/2 значения с самой большой и самой маленькой воображаемой частью (еще один из верхнего конца, если k нечетно).

'li' если A реально.

Пример: eigs(A,k,1) возвращает k собственные значения, ближайшие к 1.

Пример: eigs(A,k,'smallestabs') возвращает k наименьшие собственные значения.

Типы данных: double | char | string

Структура опций, заданная как структура, содержащая одно или несколько полей в этой таблице.

Примечание

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

Опционное полеОписаниеПара "имя-значение"
issym

Симметрия Afun матрица.

'IsFunctionSymmetric'
tol

Допуск сходимости.

'Tolerance'
maxit

Максимальное количество итераций.

'MaxIterations'
p

Количество базисных векторов Ланцоса.

'SubspaceDimension'
v0

Стартовый вектор.

'StartVector'
disp

Уровень отображения диагностической информации.

'Display'
failОбработка неконвертированных собственных значений в выходе.'FailureTreatment'
spdBЯвляется ли B симметрично положительно определено?'IsSymmetricDefinite'
cholB

Является ли B фактора Холецкого chol(B)?

'IsCholesky'
permB

Задайте вектор сочетания permB если разреженный Bдействительно chol(B(permB,permB)).

'CholeskyPermutation'

Пример: opts.issym = 1, opts.tol = 1e-10 создает структуру с набором значений для полей issym и tol.

Типы данных: struct

Матричная функция, заданная как указатель на функцию. Функция y = Afun(x) необходимо вернуть соответствующее значение в зависимости от sigma вход:

  • A*x - Если sigma не задан или любая опция текста, кроме 'smallestabs'.

  • A\x - Если sigma является 0 или 'smallestabs'.

  • (A-sigma*I)\x - Если sigma является ненулевым скаляром (для стандартной задачи собственного значения).

  • (A-sigma*B)\x - Если sigma является ненулевым скаляром (для обобщенной задачи собственного значения).

Для примера выполните следующее Afun работает при вызове eigs с sigma = 'smallestabs':

[L,U,p] = lu(A,'vector');
Afun = @(x) U\(L\(x(p)));
d = eigs(Afun,100,6,'smallestabs')

Для обобщенной задачи собственного значения добавьте матрицу B следующим образом (B не может быть представлен указателем на функцию):

d = eigs(Afun,100,B,6,'smallestabs')

A приняты несимметричными, если 'IsFunctionSymmetric' (или opts.issym) указывает обратное. Настройка 'IsFunctionSymmetric' на true гарантирует, что eigs вычисляет реальные собственные значения вместо сложных таковых.

Для получения информации о том, как предоставить дополнительные параметры Afun , см. Параметризация функций.

Совет

Звонить eigs с 'Display' опция включена, чтобы увидеть, какие выходные данные ожидаются от Afun.

Размер квадратной матрицы A который представлен Afun, заданный как положительное скалярное целое число.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: d = eigs(A,k,sigma,'Tolerance',1e-10,'MaxIterations',100) ослабляет допуск сходимости и использует меньше итераций.
Общие опции

свернуть все

Допуск сходимости, заданный как разделенная разделенными запятой парами, состоящая из 'Tolerance' и положительный действительный числовой скаляр.

Пример: s = eigs(A,k,sigma,'Tolerance',1e-3)

Максимальное количество итераций алгоритма, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIterations' и положительное целое число.

Пример: d = eigs(A,k,sigma,'MaxIterations',350)

Максимальный размер подпространства Крылова, заданный как разделенная разделенными запятой парами, состоящая из 'SubspaceDimension' и неотрицательное целое число. The 'SubspaceDimension' значение должно быть больше или равно k + 1 для реальных симметричных задач и k + 2 в противном случае, где k - количество собственных значений.

Рекомендуемое значение p >= 2*k, или для реальных несимметричных задач, p >= 2*k+1. Если вы не задаете 'SubspaceDimension' значение, тогда алгоритм по умолчанию использует по крайней мере 20 Векторы Ланцоса.

Для задач, где eigs не сходится, увеличивая значение 'SubspaceDimension' может улучшить поведение сходимости. Однако увеличение значения слишком много может вызвать проблемы с памятью.

Пример: d = eigs(A,k,sigma,'SubspaceDimension',25)

Начальный стартовый вектор, заданный как разделенная разделенными запятой парами, состоящая из 'StartVector' и числовой вектор.

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

Примечание

eigs выбирает стартовые векторы воспроизводимым способом, используя частный поток случайных чисел. Изменение начального числа случайных чисел не влияет на стартовый вектор.

Пример: d = eigs(A,k,sigma,'StartVector',randn(m,1)) использует случайный стартовый вектор, который черпает значения из глобального потока случайных чисел.

Типы данных: double

Обработка неконвертированных собственных значений, заданная как разделенная разделенными запятой парами, состоящая из 'FailureTreatment' и один из опций: 'replacenan', 'keep', или 'drop'.

Значение 'FailureTreatment' определяет, как eigs отображает в выходных отображениях непроверенные собственные значения.

Опция

Влияние на выход

'replacenan'

Замените неконвертированные собственные значения на NaN значения.

'keep'

Включите в выход неконвертированные собственные значения.

'drop'

Удалите из выхода неконвертированные собственные значения. Эта опция может привести к eigs возвращает меньше собственных значений, чем запрашивается.

Пример: d = eigs(A,k,sigma,'FailureTreatment','drop') удаляет из выхода неконвертированные собственные значения.

Типы данных: char | string

Переключатель для отображения диагностической информации, заданный как разделенная разделенными запятой парами, состоящая из 'Display' и числовое или логическое 1 (true) или 0 (false). Задайте значение true или 1 включить отображение диагностической информации во время расчета.

Опции для Afun

свернуть все

Симметрия Afun матрица, заданная как разделенная разделенными запятой парами, состоящая из 'IsFunctionSymmetric' и числовое или логическое 1 (true) или 0 (false).

Эта опция определяет, является ли матрица, которая Afun применяется к его входному вектору симметрично. Задайте значение true или 1 чтобы указать, что eigs должен использовать специализированный алгоритм для симметричной матрицы и возвращать действительные собственные значения.

Опции для обобщенной задачи собственного значения A*V = B*V*D

свернуть все

Переключатель разложения Холецкого для B, заданная как разделенная разделенными запятой парами, состоящая из 'IsCholesky' и числовое или логическое 1 (true) или 0 (false).

Эта опция определяет, является ли вход для матрицы B в eigs(A,B,___) вызова на самом деле является фактором Холецкого R произведено R = chol(B).

Примечание

Не используйте эту опцию, если sigma является 'smallestabs' или числовой скаляр.

Вектор сочетания Холецкого, заданный как разделенная запятыми пара, состоящая из 'CholeskyPermutation' и числовой вектор. Задайте вектор сочетания permB если разреженная матрица B переупорядочивается перед факторизацией согласно chol(B(permB,permB)).

Можно также использовать синтаксис трех выходов chol для разреженных матриц, чтобы непосредственно получить permB с [R,p,permB] = chol(B,'vector').

Примечание

Не используйте эту опцию, если sigma является 'smallestabs' или числовой скаляр.

Переключатель симметрично-положительная-определенность для B, заданная как разделенная разделенными запятой парами, состоящая из 'IsSymmetricDefinite' и числовое или логическое 1 (true) или 0 (false). Задайте true или 1 когда вы это знаете B симметрично положительно определено, то есть является симметричной матрицей со строго положительными собственными значениями.

Если B симметрично положительно полуопределено (некоторые собственные значения равны нулю), затем указывается 'IsSymmetricDefinite' как true или 1 силы eigs использовать тот же специализированный алгоритм, что и при B симметрично положительно определено.

Примечание

Чтобы использовать эту опцию, значение sigma должен быть числовым или 'smallestabs'.

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

свернуть все

Собственные значения, возвращенные как вектор-столбец. d сортируется по-разному в зависимости от значения sigma.

Значение sigma

Выход

'largestabs'

Порядок убывания по величине

'largestreal'

Порядок убывания по вещественной части

'largestimag'

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

'smallestabs'

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

'smallestreal'

'bothendsreal'

Порядок возрастания по вещественной части

'smallestimag'

Порядок возрастания по мнимой части

'bothendsimag'

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

Собственные векторы, возвращенные как матрица. Столбцы в V соответствуют собственным значениям по диагонали D. Форма и нормализация V зависит от комбинации входных параметров:

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

    Если A симметрично, затем собственные векторы, V, являются ортонормальными.

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

    Если B симметрично положительно определено, затем собственные векторы в V нормированы так, что B-норма каждого равна 1. Если A также симметричен, тогда собственные векторы B- ортонормальный.

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

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

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

  • Для нескольких собственных значений его собственные векторы могут быть рекомбинированы посредством линейных комбинаций. Например, если <reservedrangesplaceholder16> <reservedrangesplaceholder15> = <reservedrangesplaceholder14> <reservedrangesplaceholder13> и <reservedrangesplaceholder12> <reservedrangesplaceholder11> = <reservedrangesplaceholder10> <reservedrangesplaceholder9>, то A (x + y) = λ (x + y), таким образом x + y также собственный вектор A.

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

Флаг сходимости, возвращенный как 0 или 1. Значение 0 указывает, что все собственные значения сходятся. В противном случае не все собственные значения сходятся.

Использование этого флага сходимости выхода подавляет предупреждения о неудачной сходимости.

Совет

  • eigs генерирует стартовый вектор по умолчанию, используя частный поток случайных чисел, для обеспечения повторяемости между запусками. Установка состояния генератора случайных чисел с помощью rng перед вызовом eigs не влияет на выход.

  • Использование eigs не самый эффективный способ найти несколько собственных значений малых, плотных матриц. Для таких проблем это может быть быстрее использовать eig(full(A)). Для примера нахождение трех собственных значений в матрице 500 на 500 является относительно небольшой проблемой, с которой легко справиться eig.

  • Если eigs не сходится для заданной матрицы, увеличить количество базисных векторов Ланцоса путем увеличения значения 'SubspaceDimension'. В качестве вторичных опций, корректирующих максимальное количество итераций, 'MaxIterations'и допуск сходимости, 'Tolerance', также может помочь с сходимостью поведения.

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

расширить все

Поведение изменено в R2017b

Ссылки

[1] Stewart, G.W. «A Krylov-Schur Algorithm for Large Eigenproblems». SIAM Journal of Matrix Analysis and Applications. Том 23, Выпуск 3, 2001, стр. 601-614.

[2] Lehoucq, R.B., D.C. Соренсон и К. Ян. Руководство пользователя ARPACK. Филадельфия, Пенсильвания: СИАМ, 1998.

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

См. также

| |

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