8×8矩阵的特征向量和特征值

时间:2012-07-12 06:09:54

标签: c# matrix pca eigenvector eigenvalue

我有一个8 x 8的浮点数矩阵,需要从中计算特征向量和特征值。这是为了使用PCA(主成分分析)减少功能,如果通过传统方法完成,这是一项耗时的工作。我尝试使用幂方法,因为Y = C * X,其中X是我的8×8矩阵。

                float[,] XMatrix = new float[8, 1];
                float[,] YMatrix = new float[8, 1];
                float max = 0;
                XMatrix[0, 0] = 1;



                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 1; j++)
                    {

                        for (int k = 0; k < 8; k++)
                        {
                            YMatrix[i, j] += C[i, k] * XMatrix[k, j];
                            if (YMatrix[i, j] > max)
                                max = YMatrix[i, j];
                        }

                    }
                }

我知道这是不正确的,但无法弄清楚。我需要帮助来使用幂方法或者更有效的计算方法。

提前致谢。

1 个答案:

答案 0 :(得分:2)

对于任何大小(密集)矩阵,以有效的方式(即快速!)检索特征值/特征向量,不是完全平凡的。我建议你使用像QR算法这样的东西(尽管这对于单个8x8矩阵的一次性计算可能有点过分)。

QR算法计算矩阵的Schur分解。这肯定是其中之一 特征值计算中最重要的算法。但是,它仅适用于密集矩阵(如上所述)。

QR算法由两个独立的阶段组成。首先,通过相似性 转换后,原始矩阵以有限的步数转换为Hessenberg 形式或 - 在埃尔米特/对称的情况下 - 到真正的三对角形式。这第一阶段 算法准备第二阶段,应用于实际的QR迭代 Hessenberg或三对角矩阵。

算法的总体复杂度(浮点数)为O(n3)。有关此算法see here的详细说明。或者在Google中搜索特征值算法应该为您提供许多计算所需特征值/向量的替代方法。

另外,我没有详细研究过这个问题,但是Math.NET免费图书馆可以帮助你...

相关问题