逆べき乗法でちょっと感動した

void r_power_method(matrix a, vector x, double m){
int k;
double l,lmax,nu;
vector y;

mat_sub(a,m);
mat_inv(a);

normalize(x,x);
for(k=1;k<max;k++){
mat_mul_vec(a,x,y);
nu = euclid_inner_product(x,y);
l = m+1/nu;
//printf("%2d %e\n",k,fabs(lmax-l));
if(fabs(lmax-l)<eps){
printf("固有値:%f\n",l);
printf("固有ベクトル:\n");
print_vector(y);
return;
}
lmax=l;
normalize(x,y);
}
}


こんなかんじで実行すると、


>./a.out
m=3
固有値:1.000000
固有ベクトル:
1 1.000000
2 -0.000000
3 1.000000


これはいいね。


posted by 右京 | c言語
blog comments powered by Disqus
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。