0

我有一个 8 x 8 浮点数矩阵,需要从中计算特征向量和特征值。这是为了使用 PCA(主成分分析)减少特征,如果通过传统方法完成,这是一项非常耗时的工作。我尝试使用幂法,Y = C*X,其中 X 是我的 8 X 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];
                        }

                    }
                }

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

提前致谢。

4

1 回答 1

2

对于任何大小(密集)的矩阵,以有效的方式(即快速!)检索特征值/特征向量并非完全微不足道。我建议您使用 QR 算法之类的算法(尽管对于单个 8x8 矩阵的一次性计算,这可能有点过分了)。

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

QR 算法由两个独立的阶段组成。首先,通过相似变换,原始矩阵在有限的步数内变换为 Hessenberg 形式,或者在 Hermitian/对称情况下,变换为实三对角形式。算法的第一阶段准备了第二阶段,即应用于 Hessenberg 或三对角矩阵的实际 QR 迭代。

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

另外,我没有详细研究过这个,但是Math.NET一个免费的库可以帮助你......

于 2012-07-12T07:20:46.770 回答