Dunno - but when I compiled it, I got a couple of warnings which don't look too good in the light of trying to converge floating point values
Code:
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <math.h>
#include <stdlib.h>
int main()
{
ifstream inFile( "ineigen.txt" , ios::in );
ofstream outFile( "outeigen.txt" , ios::out );
int i,j,dim,x[3]={1,0,0},y[3],A[3][3];
float product,lambda,newx[3],oldx[3],tol=2,tolarray[3];
inFile>>dim;
for (i=0 ; i<dim ; i++) {
for (j=0 ; j<dim ; j++)
inFile>>A[i][j];
}
for (i=0 ; i<dim ; i++)
newx[i]=x[i];
for (i=0 ; i<dim ; i++)
oldx[i]=x[i];
while (tol>=0.0001){
for (i=0 ; i<dim ; i++){
product=0;
for (j=0 ; j<dim ; j++)
product += A[i][j] * newx[j];
y[i]=product; // warning: assignment to `int' from `float'
}
product=0;
for(i=0 ; i<dim ; i++)
product += y[i] * y[i];
cout<<product<<endl;
lambda = pow( product , 0.5 );
for (i=0 ; i<dim ; i++)
newx[i]=y[i]/lambda;
for(i=0 ; i<dim ; i++)
outFile<<setprecision( 4 )<<setiosflags( ios::fixed | ios::showpoint )<<newx[i]<<" ";
outFile<<lambda<<" ";
for (i=0 ; i<dim ; i++)
tolarray[i]=abs( newx[i]-oldx[i] ); // warning: `float' used for argument 1 of `abs(int)'
for (i=0 ; i<dim ; i++)
tol += tolarray[i]/3;
for(i=0 ; i<dim ; i++)
oldx[i]=newx[i];
}
return 0;
}