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

'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.578329 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.189527 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');
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 isreal. |
Пример: eigs(A,k,1) возвращает k собственные значения, самые близкие к 1.
Пример: eigs(A,k,'smallestabs') возвращает k самые маленькие собственные значения величины.
Типы данных: double | char | string
opts — Структура опцийСтруктура опций в виде структуры, содержащей один или несколько полей в этой таблице.
Использование структуры опций, чтобы задать опции не рекомендуется. Используйте пары "имя-значение" вместо этого.
| Поле опции | Описание | Пара "имя-значение" |
|---|---|---|
issym | Симметрия | 'IsFunctionSymmetric' |
tol | Допуск сходимости. | 'Tolerance' |
maxit | Максимальное количество итераций. | 'MaxIterations' |
p | Количество базисных векторов Lanczos. | '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' — Максимальное количество итераций алгоритма (значение по умолчанию) | положительное целое числоМаксимальное количество итераций алгоритма в виде разделенной запятой пары, состоящей из '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 Векторы Lanczos.
Для проблем, где eigs сбои, чтобы сходиться, увеличивая значение 'SubspaceDimension' может улучшить поведение сходимости. Однако увеличение значения слишком много может вызвать проблемы памяти.
Пример: d = eigs(A,k,sigma,'SubspaceDimension',25)
'StartVector' — Начальный стартовый векторНачальный стартовый вектор в виде разделенной запятой пары, состоящей из 'StartVector' и числовой вектор.
Основная причина, чтобы задать различный случайный стартовый вектор должна, когда это необходимо, управлять потоком случайных чисел, используемым, чтобы сгенерировать вектор.
eigs выбирает стартовые векторы восстанавливаемым способом с помощью частного потока случайных чисел. Изменение seed случайных чисел не влияет на стартовый вектор.
Пример: 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 ложь). Задайте значение true или 1 включать отображение диагностической информации во время вычисления.
Опции для Afun'IsFunctionSymmetric' — Симметрия Afun матрицаtrue или 1 | false или 0Симметрия Afun матрица в виде разделенной запятой пары, состоящей из 'IsFunctionSymmetric' и числовой или логический 1 TRUE) или 0 ложь).
Эта опция задает ли матрица что Afun применяется к его входному вектору, симметрично. Задайте значение true или 1 указать на тот eigs должен использовать специализированный алгоритм в симметрической матрице и возвратить действительные собственные значения.
Опции для обобщенной задачи о собственных значениях A*V = B*V*D'IsCholesky' — Разложение Холесского переключается для Btrue или 1 | false или 0Разложение Холесского переключается для BВ виде разделенной запятой пары, состоящей из 'IsCholesky' и числовой или логический 1 TRUE) или 0 ложь).
Эта опция задает ли вход для матричного 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 ложь). Задайте 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- норма каждого равняется 1. Если A также симметрично, затем собственными векторами является B- ортонормированный.
Различные машины, релизы MATLAB® или параметры (такие как стартовый вектор и размерность подпространства) могут произвести различные собственные вектора, которые все еще численно точны:
Для действительных собственных векторов может измениться знак собственных векторов.
Для комплексных собственных векторов собственные вектора могут быть умножены на любое комплексное число величины 1.
Для собственного значения кратного его собственные вектора могут быть повторно объединены через линейные комбинации. Например, если A x = λ x и A y = λ y, то A (x +y) = λ (x +y), таким образом, x +y также является собственным вектором A.
D — Матрица собственного значенияМатрица собственного значения, возвращенная как диагональная матрица с собственными значениями на основной диагонали.
flag — Флаг Convergence| 1 Флаг Convergence, возвращенный как 0 или 1. Значение 0 указывает, что все собственные значения сходились. В противном случае не все собственные значения сходились.
Использование этого флага сходимости выход отключает предупреждения о не пройдено сходимости.
eigs генерирует значение по умолчанию стартовый вектор с помощью частного потока случайных чисел, чтобы гарантировать воспроизводимость через запуски. Установка состояния генератора случайных чисел использование rng прежде, чем вызвать eigs не влияет на выход.
Используя eigs не самый эффективный способ найти несколько собственных значений маленьких, плотных матриц. Для таких проблем это может быть быстрее, чтобы использовать eig(full(A)). Например, находя три собственных значения в 500 500 матрица является относительно небольшой проблемой, которая легко решена с eig.
Если eigs сбои, чтобы сходиться для данной матрицы, увеличьте число базисных векторов Lanczos путем увеличения значения 'SubspaceDimension'. Как вторичные опции, настраивая максимальное количество итераций, 'MaxIterations', и допуск сходимости, 'Tolerance', также может помочь с поведением сходимости.
Поведение изменяется в R2017b
Изменения в порядке сортировки выхода
eigs теперь сортирует выход согласно значению sigma. Например, команда eigs(A,k,'largestabs') производит k собственные значения, отсортированные в порядке убывания по величине.
Ранее порядок сортировки выхода производится eigs не гарантировался.
Воспроизводимость
Вызов eigs многократно по очереди теперь приводит к тому же результату. Установите 'StartVector' к случайному вектору, чтобы изменить это поведение.
Отображение
Значение отображения 2 больше не возвращает время выполнения. Вместо этого eigs обрабатывает значение 2 то же самое как значение 1. Кроме того, сообщения, показанные 'Display' опция изменилась. Новые сообщения показывают невязку в каждой итерации вместо значений Ритца.
[1] Стюарт, G.W. "Алгоритм Крылова-Шура для Большого Eigenproblems". SIAM Journal Анализа матрицы и Приложения. Издание 23, Выпуск 3, 2001, стр 601–614.
[2] Lehoucq, R.B., Соренсон округа Колумбия и К. Янг. Руководство пользователей ARPACK. Филадельфия, PA: SIAM, 1998.
Указания и ограничения по применению:
Для синтаксиса [__] = eigs(A,B,k,sigma), если B является разреженным и не является диагональным и не треугольным, затем sigma не может быть 'largesttabs', 'largestreal', 'smallestreal', 'bothendsreal', 'largestimag', 'smallestimag', или 'bothendsimag'
Для синтаксиса [__] = eigs(A,B,k,sigma), если A-sigma*B является разреженным и не является диагональным и не треугольным, затем sigma не может быть, 'smallestabs' или числовой.
Для синтаксиса [__] = eigs(A,k,sigma), если A является разреженным и не является диагональным и не треугольным, затем sigma не может быть, 'smallestabs' или числовой.
Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.