Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 8×8矩阵的特征向量和特征值_C#_Matrix_Pca_Eigenvector_Eigenvalue - Fatal编程技术网

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

C# 8×8矩阵的特征向量和特征值,c#,matrix,pca,eigenvector,eigenvalue,C#,Matrix,Pca,Eigenvector,Eigenvalue,我有一个8 x 8的浮点数矩阵,需要从中计算特征向量和特征值。这是用于使用PCA(主成分分析)进行特征约简的,如果使用传统方法进行,这将是一项非常耗时的工作。我尝试使用幂法,Y=C*X,其中X是我的8x8矩阵 float[,] XMatrix = new float[8, 1]; float[,] YMatrix = new float[8, 1]; float max = 0;

我有一个8 x 8的浮点数矩阵,需要从中计算特征向量和特征值。这是用于使用PCA(主成分分析)进行特征约简的,如果使用传统方法进行,这将是一项非常耗时的工作。我尝试使用幂法,Y=C*X,其中X是我的8x8矩阵

                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];
                        }

                    }
                }
float[,]XMatrix=newfloat[8,1];
浮动[,]YMatrix=新浮动[8,1];
浮动最大值=0;
XMatrix[0,0]=1;
对于(int i=0;i<8;i++)
{
对于(int j=0;j<1;j++)
{
对于(int k=0;k<8;k++)
{
y矩阵[i,j]+=C[i,k]*x矩阵[k,j];
如果(y矩阵[i,j]>max)
max=YMatrix[i,j];
}
}
}
我知道这是不正确的,但我无法理解。我需要帮助使用幂法或者更有效的计算方法


提前感谢。

对于任何大小(密集)的矩阵,以有效的方式(即快速!)检索特征值/特征向量并不是很简单。我建议您使用类似QR算法的方法(尽管对于单个8x8矩阵的一次性计算来说,这可能有些过分)

QR算法计算矩阵的舒尔分解。这当然是最重要的问题之一 特征值计算中最重要的算法。但是,它仅适用于密集矩阵(如上所述)

QR算法由两个独立的阶段组成。首先,通过相似性 变换,原始矩阵以有限的步骤变换到Hessenberg 形式或–在厄米特/对称情况下–为实三对角形式。第一阶段 该算法准备其第二阶段,即应用于算法的实际QR迭代 Hessenberg或三对角矩阵

该算法的总体复杂度(浮点数)为O(n3)。为了更好地解释这个算法。或者在Google中搜索特征值算法,可以为您提供许多计算所需特征值/向量的替代方法


此外,我还没有详细了解这一点,但免费图书馆可能会在这里帮助您……

谢谢。我使用了Math.Net库。输出与Matlab没有什么不同,但它对我很有用。如果它是答案,请接受它作为答案。。。很高兴我能帮忙。