幂法这个倒有点复杂的说,我也说不清,所以还是请移步 wikipedia
我也抄点说明:
设有n个线性无关的特征向量
,而相应的特征值满足
,则对任意非零初始向量
,按下列公式构造向量序列:
NA::VecDP powerMethod ( NA::MatDP const& A , double eps )
{
const int n=A.cols();
NA_ASSERT(n==A.rows());
NA::MatDP V(1.0, n, 1 ), U(1.0, n, 1 );
double maxV = 0.0;
double lambda = 1e100;
int i;
for(bool success=false; !success;) {
V = mult (A, U);
TRACE("V: ( %f %f %f )T ", V[0][0], V[1][0], V[2][0] );
maxV=0.0;
for( i=0; i<n; ++i )
if ( fabs(V[i][0])>maxV )
maxV = fabs(V[i][0]);
TRACE("m: %f ", maxV);
V = mult (V, 1.0/maxV);
if ( fabs(lambda-maxV) < eps ) {
TRACE("\nFound: lambda = %f\n\n", maxV);
success=true;
}
lambda = maxV;
V.swap(U);
TRACE("U: ( %f %f %f )T\n", U[0][0], U[1][0], U[2][0] );
// PAUSE();
}
NA::VecDP vec(U.bits(),n+1);
vec[n]=lambda;
return vec;
}
转发至微博
转发至微博
评论