大块汉克尔矩阵的 SVD

计算科学 线性代数 matlab 矩阵 svd
2021-12-20 03:26:54

在此处输入图像描述我正在尝试对大型块汉克尔矩阵进行 SVD 以减少模型阶数(低秩近似)。但是,由于运行 SVD 本身,我在形成大型 Block-Hankel 矩阵和 CPU 问题时很快遇到了内存问题。

从理论上讲,我们似乎不必自己形成汉克尔矩阵。只要我们有矩阵的第一行/第一列的元素,我们就拥有汉克尔矩阵所有条目的完整信息,我们应该能够执行 SVD,甚至无需在内存中形成这个大矩阵?

是否有任何算法(在 netlib 或任何其他数值库中)或任何其他用户提交的 MATLAB 包利用块汉克尔矩阵的特殊结构?

2个回答

有无矩阵算法(仅使用矩阵向量乘法而不是直接使用矩阵的条目的算法)可以计算大矩阵的几个奇异值/向量的近似值。由于您想要此矩阵的低秩近似,您可以使用这样的算法来找到k最大奇异值和相关的奇异向量。

为了完成这项工作,您需要开发可以计算矩阵向量产生式的例程AxATy对于您的结构化矩阵A.

ARPACK可能是该领域使用最广泛的软件包。在 MATLAB 中,如果你有A作为稀疏矩阵,您可以使用调用 ARPACK 例程的 svds() 函数。不幸的是,MATLAB 似乎没有为这些函数提供接口,允许您只提供矩阵向量乘法例程而不是稀疏矩阵。

有一个针对稀疏特征值和奇异值问题的可用软件包的调查,可能对您有所帮助。我假设有人将 MATLAB 接口与这些库中的一些库结合在一起,这些库确实能够使用用户提供的矩阵向量乘法例程。

我记得,PROPACK包含一个 MATLAB 接口,允许用户提供矩阵向量乘法例程。

我建议避免使用 SVD,通过 FFT 使用具有快速块矩阵向量乘法的 Lanczos。您不需要保存矩阵,一切都在飞行中。理论在这里解释

一种依赖于四个空间维度的叠前地震体的快速降阶插值方法,Jianjun Gao1,Mauricio D. Sacchi 和 Xiaohong Chen,GEOPHYSICS,第 78 卷,第 1 期 。http: //library.seg.org/doi/abs /10.1190/geo2012-0038.1

干杯,毛里西奥·D·萨基