Подмножество сингулярных значений и векторов
задает дополнительные опции с одним или несколькими аргументами пары "имя-значение". Для примера, s
= svds(A
,k
,sigma
,Name,Value
)svds(A,k,sigma,'Tolerance',1e-3)
настраивает допуск сходимости для алгоритма.
svdsketch
полезно, когда вы не знаете раньше времени, с каким рангом указывать svds
, но вы знаете, какой допуск должно удовлетворять приближение SVD.
svds
генерирует стартовые векторы по умолчанию, используя частный поток случайных чисел, чтобы гарантировать повторяемость между запусками. Установка состояния генератора случайных чисел с помощью rng
перед вызовом svds
не влияет на выход.
Использование svds
не самый эффективный способ найти несколько сингулярных значений малых, плотных матриц. Для таких задач используйте svd(full(A))
может быть быстрее. Для примера нахождение трех сингулярных значений в матрице 500 на 500 является относительно небольшой задачей, которая svd
может легко обработать.
Если svds
не сходится для заданной матрицы, увеличить размер подпространства Крылова путем увеличения значения 'SubspaceDimension'
. Как вторичные опции, корректировка максимального количества итераций ('MaxIterations'
) и допуск сходимости ('Tolerance'
) также может помочь с сходимостью поведения.
Увеличение k
иногда может улучшить эффективность, особенно когда матрица имеет повторные сингулярные значения.
[1] Baglama, J. and L. Reichel, «Augmented Implicitly Restarted Lanczos Bidiagonalization Methods». SIAM Journal on Scientific Computing. Том 27, 2005, стр. 19-42.
[2] Larsen, R. M. «Lanczos Bidiagonalization with partial reorthogonalization». Кафедра компьютерных наук Орхусского университета. DAIMI PB-357, 1998.