C# 8×8矩阵的特征向量和特征值
我有一个8 x 8的浮点数矩阵,需要从中计算特征向量和特征值。这是用于使用PCA(主成分分析)进行特征约简的,如果使用传统方法进行,这将是一项非常耗时的工作。我尝试使用幂法,Y=C*X,其中X是我的8x8矩阵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;
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没有什么不同,但它对我很有用。如果它是答案,请接受它作为答案。。。很高兴我能帮忙。