Вычисление SVD низкорангового матричного эскиза
[ возвращает сингулярное разложение (SVD) матричного эскиза низкого ранга входа матрицы U,S,V] = svdsketch(A)A. Матричный эскиз является низкоранговым приближением, которое отражает только наиболее важные функции A (до допуска), что позволяет быстрее вычислять частичный SVD больших матриц по сравнению с использованием svds.
Использовать svdsketch когда вы не знаете раньше времени, с каким рангом указывать svds, но вы знаете, какой допуск должно удовлетворять приближение SVD.
svds вычисляет лучшее возможное приближение SVD к рангу k (используя значение по умолчанию "largest" метод). svdsketch не гарантирует, что его ранг-k приближение является лучшим, что учитывает его преимущество скорости над svds.
svdsketch применяет допуск для формирования низкоранговой матрицы приближения матрицы входа A. Это низкоранговое приближение называется матричным эскизом. Матричный эскиз сохраняет только важные функции от A, фильтрация ненужной информации. Относительная ошибка приближения apxErr матричного эскиза призван удовлетворить заданному допуску tol:
Процесс svdsketch далее, чтобы сформировать матричный эскиз:
svdsketch формирует матричный эскиз итеративно, при этом каждая итерация добавляет новые столбцы в Q и новые строки к B. Новые столбцы и строки создаются путем извлечения функций из A использование матрицы случайных выборок. Вы можете управлять количеством столбцов и строк, добавленных в каждой итерации с помощью BlockSize Пара "имя-значение".
Во время каждой итерации, svdsketch использует итерации степени, чтобы улучшить ортогональность новых столбцов в Q. Можно настроить количество итераций степени с помощью NumPowerIterations Пара "имя-значение".
Итерации, образующие матричный эскиз, останавливаются, когда: количество столбцов в Q и строках в B достигает заданного значения для MaxSubspaceDimension, количество итераций достигает MaxIterations, или сходится относительная ошибка приближения (apxErr <= tol).
Чтобы улучшить скорость сходимости, svdsketch может увеличить заданное начальное значение для BlockSize от итерации к итерации, если распад в apxErr недостаточно.
После матричного эскиза образуется, svdsketch вычисляет сингулярное разложение (SVD) матричного эскиза через [U1,S,V] = svd(B,'econ'), таким что
Если svdsketch способен отфильтровать некоторые функции A основываясь на заданном допуске, тогда результирующие коэффициенты SVD содержат меньше сингулярных значений и сингулярных векторов, чем если бы полный SVD был выполнен на A.
[1] Ю, Вэньцзянь, Юй Гу и Яохан Ли. Эффективные рандомизированные алгоритмы для низкоранговой Матрицы с фиксированной точностью Приближения. SIAM Journal по матричному анализу и применениям 39, № 3 (август 2018): 1339-1359. https://doi.org/10.1137/17M1141977.