求最大特征值及其特征向量的问题(4阶内)
#include<stdio.h>
#include<math.h>
#define N 3
#define eps 1e-10
#define KM 100
double MaxValue(double x[],int n)
{
double Max=x[0];
int i;
for (i=1;i<n;i++)
if(fabs(x[i])>fabs(Max))Max=x[i];
return Max;
}
void PowerMethod(double *A)
{
double U[N],V[N],r1,r2,temp;
int i,j,k=0;
for(i=0;i<N;i++)U[i]=1;
while(k<KM)
{
k++;
for(i=0;i<N;i++)
{
temp=0;
for(j=0;j<N;j++)temp+=*(A+i*N+j)*U[j];
V[i]=temp;
}
for(i=0;i<N;i++)U[i]=V[i]/MaxValue(V,N);
if(k==1)r1=MaxValue(V,N);
else r2=MaxValue(V,N);
if(fabs(r2-r1)<eps)break;
r1=r2;
}
printf("r=%.4f\n",r2);
for(i=0;i<N;i++)printf("x[%d]=%.4f\n",i+1,U[i]);
}
void main()
{
//double A[N][N]={17,-2,-2,-2,14,-4,-2,-4,14} ;
//double A[N][N] = { 1,0,0,2,3,0,4,5,6};
//double A[N][N] = {2,1,3,4,2,6,6,3,9};
//double A[N][N] = {8,-2,-1,-2,5,-2,-3,-6,6};
double A[N][N] = {-4,-10,0,1,3,0,3,6,1};
//double A[N][N] = {3,-2,-4,-2,6,-2,-4,-2,3};
//double A[N][N] = {3,-1,3,0,1,1,4,-1,0,0,5,-3,0,0,3,-1};
//double A[N][N] = {1,1,2,2};
//double A[N][N] = {1,9,1/9.0,1};
//double A[N][N]={17,-2,-2,-2,14,-4,-2,-4,14} ;
//double A[N][N] = { 1,0,0,2,3,0,4,5,6};
//double A[N][N] = {2,1,3,4,2,6,6,3,9};
//double A[N][N] = {8,-2,-1,-2,5,-2,-3,-6,6};
//double A[N][N] = {-4,-10,0,1,3,0,3,6,1};
//double A[N][N] = {3,-2,-4,-2,6,-2,-4,-2,3};
//double A[N][N] = {3,-1,3,0,1,1,4,-1,0,0,5,-3,0,0,3,-1};
//double A[N][N] = {1,1,2,2};
//double A[N][N] = {1,7,9,9,1/7.0,1,7,8,1/9.0,1/7.0,1,7,1/9.0,1/8.0,1/7.0,1};
//double A[N][N] = {1,7,2,1/7.0,1,1,1/2.0,1,1};
//double A[N][N] = {1,2,5,1/2.0,1,3,1/5.0,1/3.0,1};
PowerMethod(A[0]);
}
目地是求出一个二维三维或者四维矩阵的最大特征值极其特征向量(阶数小于等于4),但是上面的程序只能求出模最大的特征值。比如特征值为1,1,-2时候则求的值为-2,而实际我需要的是1,那位有求矩阵的最大特征值及其对应的特征向量比较完善的代码啊,烦劳发送有的话发至邮箱2451890874@qq.com,非常感谢啊,这几天都在捣鼓这个,还是搞不定,郁闷啊。那位大侠帮帮忙把!
[解决办法]
matlab里面有这个么
[解决办法]
如果你要求绝对值最小的特征值,你得求A得逆矩阵的最大特征值