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. Можно опционально задать BK\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,'+')

Собственные значения кластеризируются вдоль действительной линии (ось 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
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
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')

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

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 24.972917 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.467012 seconds.

Собственные значения кластеризируются около нуля. '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')

Создайте разреженные случайные матрицы 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

Описание

сигма (R2017a и ранее)

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

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

Никакое изменение

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

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

'lm'

'smallestabs'

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

'sm'

'largestreal'

Самый большой действительный.

'lr', 'la'

'smallestreal'

Самый маленький действительный.

'sr', 'sa'

'bothendsreal'

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

'be'

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

\sigma

Описание

сигма (R2017a и ранее)

'largestimag'

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

'li' если A является комплексным.

'smallestimag'

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

'si' если A является комплексным.

'bothendsimag'

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

'li' если A isreal.

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

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

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

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

Примечание

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

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

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

'IsFunctionSymmetric'
tol

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

'Tolerance'
maxit

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

'MaxIterations'
p

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

'SubspaceDimension'
v0

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

'StartVector'
disp

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

'Display'
failОбработка не сходившихся собственных значений в выходе.'FailureTreatment'
spdBB симметричный положительный определенный?'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' и неотрицательное целое число. 'SubspaceDimension' значение должно быть больше или быть равно k + 1 для действительных симметричных проблем и k + 2 в противном случае, где k количество собственных значений.

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

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

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

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

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

Примечание

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

Пример: 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 ложь). Задайте значение true или 1 включать отображение диагностической информации во время вычисления.

Опции для Afun

свернуть все

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

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

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

свернуть все

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

Эта опция задает ли вход для матричного 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 ложь). Задайте 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.

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

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

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

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

Советы

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

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

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

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

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

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

Ссылки

[1] Стюарт, G.W. "Алгоритм Крылова-Шура для Большого Eigenproblems". SIAM Journal Анализа матрицы и Приложения. Издание 23, Выпуск 3, 2001, стр 601–614.

[2] Lehoucq, R.B., Соренсон округа Колумбия и К. Янг. Руководство пользователей ARPACK. Филадельфия, PA: SIAM, 1998.

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

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

|

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