用于计算犰狳中复杂对称矩阵的有限数量特征向量的右函数
Right function for computing a limited number of eigenvectors of a complex symmetric matrix in Armadillo
我正在使用 Armadillo 库手动移植一段 Matlab 代码。 matlab 代码使用 eigs() 函数查找相对较大 (200x200) 协方差矩阵 R 的少量 (~3) 个特征向量。代码如下所示:
[E,D] = eigs(R,3,"lm");
Armadillo 中有两个函数 eigs_sym() 和 eigs_gen() 但是前者只支持 real 对称矩阵而后者需要 ARPACK (我正在为 Android) 构建代码。 eigs_sym 不支持复数矩阵是有原因的吗?有没有其他方法可以找到复数对称矩阵的特征向量?
eigs_sym() and eigs_gen() functions (where the s in eigs stands for sparse) in Armadillo are for large sparse矩阵。 "large" 尺寸在此上下文中大约为 5000x5000 或更大。
您的 R 矩阵大小为 200x200。按照目前的标准,这是非常小的。简单地使用像 .tail_cols()
这样的密集特征分解 eig_sym() or eig_gen() functions to get all the eigenvalues / eigenvectors, followed by extracting a subset of them using submatrix 操作会快得多
您是否测试过通过用 2x2 矩阵 [a,b;-b,a] 替换每个复数值 a+bi 来构建 400x400 实数对称矩阵(或者使用它的块变体)?
这应该构造一个在某种程度上对应于复数矩阵的实对称矩阵。
由于尺寸较大,速度会变慢,所有特征值都会重复(这可能会减慢算法速度),但测试起来似乎很简单。
我正在使用 Armadillo 库手动移植一段 Matlab 代码。 matlab 代码使用 eigs() 函数查找相对较大 (200x200) 协方差矩阵 R 的少量 (~3) 个特征向量。代码如下所示:
[E,D] = eigs(R,3,"lm");
Armadillo 中有两个函数 eigs_sym() 和 eigs_gen() 但是前者只支持 real 对称矩阵而后者需要 ARPACK (我正在为 Android) 构建代码。 eigs_sym 不支持复数矩阵是有原因的吗?有没有其他方法可以找到复数对称矩阵的特征向量?
eigs_sym() and eigs_gen() functions (where the s in eigs stands for sparse) in Armadillo are for large sparse矩阵。 "large" 尺寸在此上下文中大约为 5000x5000 或更大。
您的 R 矩阵大小为 200x200。按照目前的标准,这是非常小的。简单地使用像 .tail_cols()
您是否测试过通过用 2x2 矩阵 [a,b;-b,a] 替换每个复数值 a+bi 来构建 400x400 实数对称矩阵(或者使用它的块变体)?
这应该构造一个在某种程度上对应于复数矩阵的实对称矩阵。 由于尺寸较大,速度会变慢,所有特征值都会重复(这可能会减慢算法速度),但测试起来似乎很简单。