eigs

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

Синтаксис

d = eigs(A)
d = eigs(A,k)
d = eigs(A,k,sigma)
d = eigs(A,k,sigma,Name,Value)
d = eigs(A,k,sigma,opts)
d = eigs(A,B,___)
d = eigs(Afun,n,___)
[V,D] = eigs(___)
[V,D,flag] = 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,'+')

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

Пример: 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'
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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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 (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.

  • Для собственного значения кратного его собственные вектора могут быть повторно объединены через линейные комбинации. Например, если 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

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