/** 
2009.05.25.
by M.Kemmler
*/

#include "vislearning/math/algebra_trlan/Eigenproblem.h"
#include <iostream>
#include <fstream>

using namespace OBJREC;

int main (int argc, char **argv)
{   
#ifdef NICE_USELIB_TRLAN
	int N=10;
	int problem_size=N*N;
	int eval_nr=N;
	element e;
	std::vector<element> sparse_mat;
	std::vector<double> evals;
	std::vector< std::vector<double> > evecs;
	//build sparse matrix
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			for(int k=i-5;k<i+5;k++){
				for(int l=j-5;l<j+5;l++){
					if(k<0||l<0||k>=N||l>=N) continue;
					e.x=i*N+j;
					e.y=k*N+l;
					e.val=1.0/(1.0+i*j+k*l);
					sparse_mat.push_back(e);
					e.y=i*N+j;
					e.x=k*N+l;
					sparse_mat.push_back(e);
				}
			}
		}
	}

	Eigenproblem eig;
	eig.solve(sparse_mat,problem_size,evals,evecs,eval_nr,+1);

	for(int i=0;i<eval_nr;i++){
		std::cerr << "eigenvalue "<<i+1<<": \n\t"<<evals[i]<<std::endl;
		std::cerr << "corresponding eigenvector:"<<i+1<<": \n";
		for(int j=0;j<problem_size;j++) std::cerr << evecs[i][j] << std::endl;

	}
#endif

}