用于计算犰狳中复数对称矩阵的有限数量的特征向量的右函数

时间:2017-09-27 06:28:29

标签: c++ matlab armadillo

我正在使用Armadillo库手动移植一段Matlab代码。 matlab代码使用eigs()函数来查找相对较大(200x200)协方差矩阵R的少量(~3)个特征向量。代码如下所示:

[E,D] = eigs(R,3,"lm");

在Armadillo中有两个函数eigs_sym()和eigs_gen(),但前者只支持真正的对称矩阵,而后者需要ARPACK(我正在为Android构建代码)。有没有理由eigs_sym不支持复杂矩阵?有没有其他方法可以找到复对称矩阵的特征向量?

2 个答案:

答案 0 :(得分:2)

Armadillo中的eigs_sym()eigs_gen()函数(其中 s 在eig s 中代表稀疏)适用于sparse 矩阵。 A"大"在这种情况下,大小约为5000x5000或更大。

你的R矩阵的大小为200x200。根据现行标准,这是非常小的。简单地使用密集的特征分解eig_sym()eig_gen()函数来获取所有特征值/特征向量,然后使用.tail_cols()操作(如ContentResolver cr = context.getContentResolver(); Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null null null); if (c != null) if (c.moveToFirst()) { do { ... if (enoughRead) break; } while (c.moveToNext()); 提取它们的子集会快得多}

答案 1 :(得分:0)

您是否通过将每个复数值a + bi替换为2x2矩阵[a,b; -b,a](或者使用此块的变体)来测试构建400x400实对称​​矩阵?

这应该构造一个真实的对称矩阵,它在某种程度上对应于复杂的矩阵。 由于尺寸较大,将会减速,并且所有特征值都将被复制(这可能会减慢算法速度),但测试似乎很简单。