Подмножество собственных значений и собственных векторов
указывает дополнительные параметры с одним или несколькими аргументами пары имя-значение. Например, d = eigs(A,k,sigma,Name,Value)eigs(A,k,sigma,'Tolerance',1e-3) корректирует допуск сходимости для алгоритма.
Матрица 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,'+')

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

'smallestabs' и 'smallestreal' Собственные значенияСоздайте симметричную положительную определенную разреженную матрицу.
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')

Создание разреженных случайных матриц 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');
pp = 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 обычно, но не всегда, является большой и разреженной матрицей.
Если A симметричен, затем eigs использует специализированный алгоритм для этого случая. Если A почти симметричен, затем рассмотрите возможность использования A = (A+A')/2 сделать A симметрично перед вызовом eigs. Это гарантирует, что eigs вычисляет вещественные собственные значения вместо комплексных.
Типы данных: double
Поддержка комплексного номера: Да
B - Входная матрицаВходная матрица, заданная как квадратная матрица того же размера, что и 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
Поддержка комплексного номера: Да
k - Количество собственных значений для вычисленияЧисло вычисляемых собственных значений, указанных как положительное скалярное целое число.
Пример: eigs(A,2) возвращает два самых больших собственных значения A.
sigma - Тип собственных значений'largestabs' (по умолчанию) | 'smallestabs' | 'largestreal' | 'smallestreal' | 'bothendsreal' | 'largestimag' | 'smallestimag' | 'bothendsimag' | скалярТип собственных значений, указанный как одно из значений в таблице.
|
sigma |
Описание | сигма (R2017a и более ранние) |
|---|---|---|
|
скаляр (вещественный или комплексный, включая 0) |
Собственные значения, ближайшие к числу | Без изменений |
|
|
Наибольшая величина. | 'lm'
|
|
|
Наименьшая звёздная величина. То же, что и | 'sm'
|
|
|
Самый большой настоящий. | 'lr', 'la' |
|
|
Самая маленькая настоящая. | 'sr', 'sa' |
|
|
Оба конца, с | 'be' |
Для несимметричных задач, sigma также могут быть:
|
sigma |
Описание | сигма (R2017a и более ранние) |
|---|---|---|
|
|
Наибольшая мнимая часть. | 'li' если A является сложным. |
|
|
Наименьшая мнимая часть. | 'si' если A является сложным. |
|
|
Оба конца, с | 'li' если A реально. |
Пример: eigs(A,k,1) возвращает значение k собственные значения, наиболее близкие к 1.
Пример: eigs(A,k,'smallestabs') возвращает значение k собственные значения наименьшей величины.
Типы данных: double | char | string
opts - Структура опционовСтруктура опций, заданная как структура, содержащая одно или несколько полей в этой таблице.
Примечание
Использование структуры опций для задания опций не рекомендуется. Вместо этого используйте пары имя-значение.
| Поле опции | Описание | Пара «имя-значение» |
|---|---|---|
issym | Симметрия | 'IsFunctionSymmetric' |
tol | Допуск сходимости. | 'Tolerance' |
maxit | Максимальное число итераций. | 'MaxIterations' |
p | Количество базисных векторов Ланцоса. | 'SubspaceDimension' |
v0 | Начальный вектор. | 'StartVector' |
disp | Уровень отображения диагностической информации. | 'Display' |
fail | Обработка преобразованных собственных значений в выходных данных. | 'FailureTreatment' |
spdB | Является B симметричный положительный определенный? | 'IsSymmetricDefinite' |
cholB | Является | 'IsCholesky' |
permB | Укажите вектор перестановки | 'CholeskyPermutation' |
Пример: opts.issym = 1, opts.tol = 1e-10 создает структуру со значениями, заданными для полей issym и tol.
Типы данных: struct
Afun - Матричная функцияМатричная функция, заданная как дескриптор функции. Функция 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.
n - Размер квадратной матрицы, представленной AfunРазмер квадратной матрицы A который представлен Afun, задается как положительное скалярное целое число.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
d = eigs(A,k,sigma,'Tolerance',1e-10,'MaxIterations',100) ослабляет допуск сходимости и использует меньше итераций.'Tolerance' - Допуск сходимости1e-14 (по умолчанию) | положительный вещественный скалярДопуск сходимости, заданный как разделенная запятыми пара, состоящая из 'Tolerance' и положительный вещественный числовой скаляр.
Пример: s = eigs(A,k,sigma,'Tolerance',1e-3)
'MaxIterations' - Максимальное количество итераций алгоритма300 (по умолчанию) | положительное целое числоМаксимальное количество итераций алгоритма, указанное как пара, разделенная запятыми, состоящая из 'MaxIterations' и положительное целое число.
Пример: d = eigs(A,k,sigma,'MaxIterations',350)
'SubspaceDimension' - Максимальный размер Крыловского подпространстваmax(2*k,20) (по умолчанию) | неотрицательное целое числоМаксимальный размер подпространства Крылова, определяемый как разделенная запятыми пара, состоящая из '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' - Начальный стартовый векторНачальный начальный вектор, заданный как разделенная запятыми пара, состоящая из 'StartVector' и числовой вектор.
Основная причина, по которой можно задать другой начальный вектор случайных чисел, заключается в необходимости управления потоком случайных чисел, используемым для создания вектора.
Примечание
eigs выбирает начальные векторы воспроизводимым образом с использованием потока частных случайных чисел. Изменение начального числа случайных чисел не влияет на начальный вектор.
Пример: d = eigs(A,k,sigma,'StartVector',randn(m,1)) использует случайный начальный вектор, который извлекает значения из глобального потока случайных чисел.
Типы данных: double
'FailureTreatment' - Обработка неразвернутых собственных значений'replacenan' (по умолчанию) | 'keep' | 'drop'Обработка неразвернутых собственных значений, указанных как пара, разделенная запятыми, состоящая из 'FailureTreatment' и один из вариантов: 'replacenan', 'keep', или 'drop'.
Значение 'FailureTreatment' определяет, как eigs отображает не преобразованные собственные значения в выходных данных.
|
Выбор |
Влияние на выходные данные |
|---|---|
|
|
Заменить преобразованные собственные значения на |
|
|
Включение в выходные данные преобразованных собственных значений. |
|
|
Удаление преобразованных собственных значений из выходных данных. Этот параметр может привести к |
Пример: d = eigs(A,k,sigma,'FailureTreatment','drop') удаляет не преобразованные собственные значения из выходных данных.
Типы данных: char | string
'Display' - Переключить отображение диагностической информацииfalse или 0 (по умолчанию) | true или 1Переключение для отображения диагностической информации, указанной как разделенная запятыми пара, состоящая из 'Display' и числовой или логический 1 (true) или 0 (false). Укажите значение true или 1 включение отображения диагностической информации во время расчета.
Afun'IsFunctionSymmetric' - Симметрия Afun матрицаtrue или 1 | false или 0Симметрия Afun матрица, указанная как пара, разделенная запятыми, состоящая из 'IsFunctionSymmetric' и числовой или логический 1 (true) или 0 (false).
Этот параметр определяет, является ли матрица Afun применяется к его входному вектору симметрично. Укажите значение true или 1 указать, что eigs должен использовать специализированный алгоритм для симметричной матрицы и возвращать вещественные собственные значения.
A*V = B*V*D'IsCholesky' - Переключатель разложения холеского для Btrue или 1 | false или 0Переключатель разложения холеского для B, указанная как пара, разделенная запятыми, состоящая из 'IsCholesky' и числовой или логический 1 (true) или 0 (false).
Этот параметр определяет, является ли ввод матрицей B в вызове eigs(A,B,___) на самом деле фактор Холеского R произведенные R = chol(B).
Примечание
Не использовать этот параметр, если sigma является 'smallestabs' или числовой скаляр.
'CholeskyPermutation' - вектор перестановки Холески1:n (по умолчанию) | векторВектор перестановки Холески, указанный как разделённая запятыми пара, состоящая из 'CholeskyPermutation' и числовой вектор. Укажите вектор перестановки permB если разреженная матрица B переупорядочивается перед факторизацией в соответствии с chol(B(permB,permB)).
Можно также использовать синтаксис трех выходов chol для разреженных матриц, чтобы непосредственно получить permB с [R,p,permB] = chol(B,'vector').
Примечание
Не использовать этот параметр, если sigma является 'smallestabs' или числовой скаляр.
'IsSymmetricDefinite' - Переключатель симметрично-положительной определенности для Btrue или 1 | false или 0Переключатель симметрично-положительной определенности для B, указанная как пара, разделенная запятыми, состоящая из 'IsSymmetricDefinite' и числовой или логический 1 (true) или 0 (false). Определить true или 1 когда вы знаете, что B является симметричной положительной определённой, то есть является симметричной матрицей со строго положительными собственными значениями.
Если B является симметричным положительным полуопределенным (некоторые собственные значения равны нулю), то 'IsSymmetricDefinite' как true или 1 силы eigs использовать тот же специализированный алгоритм, что и при B является симметричным положительным определенным.
Примечание
Чтобы использовать эту опцию, значение sigma должен быть числовым или 'smallestabs'.
d - Собственные значенияСобственные значения, возвращаемые в виде вектора столбца. d сортируется по-разному в зависимости от значения sigma.
|
Значение |
Сортировка выходных данных |
|---|---|
|
|
Порядок убывания по величине |
|
|
Порядок убывания по действительной части |
|
|
Порядок убывания по мнимой части |
|
|
Порядок возрастания по величине |
|
|
Порядок возрастания по действительной части |
|
|
Порядок возрастания по мнимой части |
|
|
Порядок убывания по абсолютному значению мнимой части |
V - Собственные векторыСобственные векторы, возвращаемые в виде матрицы. Столбцы в 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.
D - Матрица собственных значенийМатрица собственных значений, возвращаемая как диагональная матрица с собственными значениями на главной диагонали.
flag - Флаг сходимости0 | 1Флаг сходимости, возвращенный как 0 или 1. Значение 0 указывает на сходимость всех собственных значений. В противном случае сходятся не все собственные значения.
Использование этого выходного сигнала флага сходимости подавляет предупреждения о сбое сходимости.
eigs генерирует начальный вектор по умолчанию с использованием потока частных случайных чисел для обеспечения воспроизводимости на всех этапах. Установка состояния генератора случайных чисел с помощью rng перед вызовом eigs не влияет на выходные данные.
Используя eigs это не самый эффективный способ найти несколько собственных значений небольших плотных матриц. Для таких проблем, возможно, быстрее использовать eig(full(A)). Например, нахождение трех собственных значений в матрице 500 на 500 является относительно небольшой проблемой, которая легко решается с помощью eig.
Если eigs не удается сойтись для данной матрицы, увеличить число базисных векторов Ланцоса, увеличив значение 'SubspaceDimension'. В качестве дополнительных опций можно настроить максимальное количество итераций, 'MaxIterations'и допуск сходимости, 'Tolerance', также может помочь с поведением сходимости.
В R2017b изменилось поведение
Изменение порядка сортировки выходных данных
eigs теперь сортирует выходной сигнал в соответствии со значением sigma. Например, команда eigs(A,k,'largestabs') производит k собственные значения отсортированы в порядке убывания по величине.
Ранее порядок сортировки выходных данных, полученных eigs не было гарантировано.
Воспроизводимость
Запрос eigs несколько раз подряд теперь дает один и тот же результат. Набор 'StartVector' в случайный вектор, чтобы изменить это поведение.
Показ
Отображаемое значение 2 больше не возвращает информацию о синхронизации. Вместо этого eigs обрабатывает значение 2 то же, что и значение 1. Кроме того, сообщения, отображаемые 'Display' вариант изменился. Новые сообщения показывают остаток в каждой итерации вместо значений Ритца.
[1] Стюарт, Г. В. «Алгоритм Крылова-Шура для больших собственных задач». Журнал матричного анализа и приложений SIAM. Том 23, выпуск 3, 2001, стр. 601-614.
[2] Лехук, Р.Б., округ Колумбия Соренсон и К. Ян. Руководство пользователя ARPACK. Филадельфия, Пенсильвания: SIAM, 1998.
Эта функция полностью поддерживает распределенные массивы. Дополнительные сведения см. в разделе Запуск функций MATLAB с распределенными массивами (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.