5×5行列、固有値、固有ベクトル
5つの値を入力し、それぞれの相対比を求めて行列にして、固有値と固有ベクトルを求めたいのですが、分からないので教えて下さい。下のプログラムは固有値を求めるものです。これは過去の質問にあったプログラムを少し変えてみたのですが、値が出てこないのでどうすればうまく出てくるのか教えて下さい。それと、固有ベクトルを求めるプログラムも教えて下さい。宜しくお願いします。
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i, j, k, l;
double max,theta,x,y,a[5][5],b[5];
printf("値1: ");
scanf("%d",&b[0]);
printf("値2: ");
scanf("%d",&b[1]);
printf("値3: ");
scanf("%d",&b[2]);
printf("値4: ");
scanf("%d",&b[3]);
printf("値5: ");
scanf("%d",&b[4]);
printf("行列\n");
for(j=0;j<5;j++){
for(k=0;k<5;k++){
a[j][k]=b[k]/b[j];
printf("%1.3f ",a[j][k]);
}
printf("\n");
}
while(1){
max=0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if (i!=j && max<fabs(a[i][j])){
max=fabs(a[i][j]);
k=i;
l=j;
}
}
}
if (max<1.0e-6)
break;
theta=(a[k][k]!=a[l][l])?
atan2(-2*a[k][l],a[k][k]-a[l][l])/2:M_PI/4;
for(i=0;i<5;i++){
x=a[i][k];
y = a[i][l];
a[i][k] = cos(theta) * x - sin(theta)*y;
a[i][l] = sin(theta) * x + cos(theta)*y;
}
for (j=0;j<5;j++){
x=a[k][j];
y=a[l][j];
a[k][j]=cos(theta)*x-sin(theta)*y;
a[l][j]=sin(theta)*x+cos(theta)*y;
}
}
printf("固有値\n");
for (i=0;i<5;i++){
printf("%1.3f\n",a[i][i]);
}
return 0;
}