exponenta event banner

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

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

Найти Cholesky разложение матрицы 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

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

'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' и неотрицательное целое число. '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-norm каждого равно 1. Если A также симметричен, то собственные векторы B-ортонормальное.

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

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

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

  • Для множественного собственного значения его собственные векторы могут быть рекомбинированы посредством линейных комбинаций. Например, если Ax = λ x и Ay = λ y, то 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] Стюарт, Г. В. «Алгоритм Крылова-Шура для больших собственных задач». Журнал матричного анализа и приложений SIAM. Том 23, выпуск 3, 2001, стр. 601-614.

[2] Лехук, Р.Б., округ Колумбия Соренсон и К. Ян. Руководство пользователя ARPACK. Филадельфия, Пенсильвания: SIAM, 1998.

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

См. также

| |

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