Подмножество собственных значений и собственных векторов
задает дополнительные опции с одним или несколькими аргументами пары "имя-значение". Например, 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.469772 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.234551 seconds.
Собственные значения кластеризируются около нуля. 'smallestreal'
расчет изо всех сил пытается сходиться с помощью A
поскольку разрыв между собственными значениями так мал. С другой стороны, 'smallestabs'
опция использует инверсию A
, и поэтому инверсия собственных значений A
, которые имеют намного больший разрыв и поэтому легче вычислить. Эта улучшенная производительность прибывает за счет разложения на множители A
, который не необходим с 'smallestreal'
.
Вычислите собственные значения около числового sigma
значение, которое почти равно собственному значению.
Матричный A = delsq(numgrid('C',30))
симметричная положительная определенная матрица размера 632 с собственными значениями, обоснованно хорошо распределенными в интервале (0 8), но с 18 собственными значениями, повторенными в 4,0. Чтобы вычислить некоторые собственные значения около 4.0, разумно попробовать вызов функции eigs(A,20,4.0)
. Однако этот вызов вычисляет самые большие собственные значения инверсии A - 4.0*I
, где I
единичная матрица. Поскольку 4.0 собственное значение A
, эта матрица сингулярна и поэтому не имеет инверсии. eigs
сбои и производят сообщение об ошибке. Числовое значение sigma
не может быть точно равно собственному значению. Вместо этого необходимо использовать значение sigma
это рядом, но не равно 4,0, чтобы найти те собственные значения.
Вычислите все собственные значения с помощью eig
, и эти 20 собственных значений, самых близких к 4 - 1e-6 использование eigs
сравнить результаты. Постройте собственные значения, вычисленные с каждым методом.
A = delsq(numgrid('C',30));
sigma = 4 - 1e-6;
d = eig(A);
D = sort(eigs(A,20,sigma));
plot(d(307:326),'ks') hold on plot(D,'k+') hold off legend('eig(A)','eigs(A,20,sigma)') title('18 Repeated Eigenvalues of A')
Создайте разреженные случайные матрицы A
и B
то, что у обоих есть низкая плотность ненулевых элементов.
B = sprandn(1e3,1e3,0.001) + speye(1e3); B = B'*B; A = sprandn(1e3,1e3,0.005); A = A+A';
Найдите разложение Холесского матричного B
, использование трех выходных параметров, чтобы возвратить вектор сочетания s
и тестовое значение p
.
[R,p,s] = chol(B,'vector');
p
p = 0
Начиная с p
нуль, B
симметричная положительная определенная матрица, которая удовлетворяет B(s,s) = R'*R
.
Вычислите шесть самых больших собственных значений величины и собственные вектора обобщенной задачи о собственных значениях, включающей A
и R
. Начиная с R
Фактор Холесского B
, задайте 'IsCholesky'
как true
. Кроме того, начиная с B(s,s) = R'*R
и таким образом R = chol(B(s,s))
, используйте вектор сочетания s
как значение 'CholeskyPermutation'
.
[V,D,flag] = eigs(A,R,6,'largestabs','IsCholesky',true,'CholeskyPermutation',s); flag
flag = 0
Начиная с flag
нуль, все собственные значения сходились.
A
— Введите матрицуВведите матрицу в виде квадратной матрицы. A
обычно, но не всегда, большая и разреженная матрица.
Если 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'
— Разложение Холесского переключается для B
true
или 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'
— Переключатель симметричной положительной определенности для B
true
или 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.
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.