Подмножество собственных значений и собственных векторов
задает дополнительные опции с одним или несколькими аргументами пары "имя-значение". Для примера, 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.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.
Собственные значения кластеризованы около нуля. The '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
обычно, но не всегда, большая и разреженная матрица.
Если 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 |
Описание | sigma (R2017a и более ранние версии) |
---|---|---|
скаляр (реальный или комплексный, включая 0) |
Собственные значения ближе всего к числу | Без изменений |
|
Наибольшая величина. | 'lm'
|
|
Наименьшая величина. То же, что и | 'sm'
|
|
Самый большой реал. | 'lr' , 'la' |
|
Наименьший реальный. | 'sr' , 'sa' |
|
Оба конца, с | 'be' |
Для несимметричных задач, sigma
также могут быть:
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'
и неотрицательное целое число. The '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'
- переключатель разложения Холецкого для B
true
или 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'
- Переключатель симметрично-положительная-определенность для B
true
или 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
-норма каждого равна 1. Если A
также симметричен, тогда собственные векторы B
- ортонормальный.
Различные машины, релизы MATLAB®, или параметры (такие как начальный вектор и подпространство размерности) могут производить различные собственные векторы, которые все еще численно точны:
Для реальных собственных векторов может измениться знак собственных векторов.
Для комплексных собственных векторов собственные векторы могут быть умножены на любое комплексное число величин 1.
Для нескольких собственных значений его собственные векторы могут быть рекомбинированы посредством линейных комбинаций. Например, если <reservedrangesplaceholder16> <reservedrangesplaceholder15> = <reservedrangesplaceholder14> <reservedrangesplaceholder13> и <reservedrangesplaceholder12> <reservedrangesplaceholder11> = <reservedrangesplaceholder10> <reservedrangesplaceholder9>, то 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] Stewart, G.W. «A Krylov-Schur Algorithm for Large Eigenproblems». SIAM Journal of Matrix Analysis and Applications. Том 23, Выпуск 3, 2001, стр. 601-614.
[2] Lehoucq, R.B., D.C. Соренсон и К. Ян. Руководство пользователя ARPACK. Филадельфия, Пенсильвания: СИАМ, 1998.
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите Запуск функций MATLAB с распределенными массивами (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.