Am 05.07.2010 um 00:26 schrieb Thomas Klimpel:

Kraus Philipp wrote:
I have looked at the example for the dsyev call under[snip]
Can I call boost syev in the same way?

I probably misunderstand this question. You can use exactly the same argument list as in this MKL example when you replace "dsyev" by "LAPACK_DSYEV", but what would be the point of using the bindings then?


I want to calculate for an arbitrary square matrix the
eigenvectors and -values (like the Matlab command [SNIP]).
Do I understand the steps in the correct order?
1. I create a lower bounded matrix of my sqaured matrix
2. I call the boost command syev with the bounded matrix


matrix_type A(n,n);
// fill the lower triangle of A with the correct values
//...
std::vector<double> w(n);
bindings::lapack::syev('V', bindings::lower(A), w); // writing "Vectors" instead of 'V' won't work here, sorry for that :(


I think there was a little mistake, because "lower" means, that the values must be filled into the upper triangle.
My little code snip:

ublas::matrix<double, ublas::column_major> x(3,3);

        

x(0,0) = 1;
x(1,0) = 2;
x(1,1) = 2;
x(2,0) = 3;
x(2,1) = 3;
x(2,2) = 4;
std::cout << x << std::endl;

        

ublas::vector<T> l(3);
lapack::syev( 'V', bindings::symm(bindings::upper(x)), l );

returns in l the values (4,2,1) if I set bindings::lower the return values are (-0.870495,-.143348,8.01384)
Matlab returns for the same matrix (4,2,1)

Thanks for help. 

Phil

P.S.: In my next step I must create the triangle from a squared matrix