$include_dir="/home/hyper-archives/ublas/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [ublas] novice question. how to use ublas bindings
From: Karl Meerbergen (karl.meerbergen_at_[hidden])
Date: 2009-08-21 15:06:56
Dear Luca,
If you use syev('V', 'U', matrix,...)
you do not need a symmetric_adaptor.
Best,
Karl
Luca Sbardella wrote:
> Summarising my findings:
>
> 1) The binding won't compile when using a /ublas::matrix/ for a 
> symmetric eigenvalue problem.
> 2) It won't compile if I use the /ublas::symmetric/_matrix instead (/ 
> leading_dimension/ method missing in the matrix_traits for a 
> symmetric_matrix).
> 3) It does work when I use the /ublas::symmetric_adaptor/ wrapper:
>
> and this is a snippet of the client code
>
> #include <boost/numeric/bindings/lapack/driver/syev.hpp>
> #include <boost/numeric/bindings/traits/type_traits.hpp>
> #include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
> #include <boost/numeric/bindings/traits/ublas_vector.hpp>
>
> template<typename T>
> int syevtest(int N) {
>     namespace ublas  = boost::numeric::ublas;
>     namespace lapack = boost::numeric::bindings::lapack;
>     typedef ublas::matrix<T, ublas::column_major>        matrix_type;
>     typedef ublas::vector<T>                            vector_type;
>
>     // Set matrix
>     matrix_type a(N,N);
>     vector_type e1(N);
>
>     randomize_upper(a);
>
>     ublas::symmetric_adaptor<matrix_type,ublas::upper> sym(a);
>
>     lapack::syev('V',sym,e1);
>     return 0;
> }
>
>
> int test() {
>     syevectors<float>(10);
>     syevectors<double>(10);
>     return 0;
> }
>
> Thanks for help
>
> Luca
>
>
>
>
>
>
> 2009/8/21 Thomas Klimpel <Thomas.Klimpel_at_[hidden] 
> <mailto:Thomas.Klimpel_at_[hidden]>>
>
>     Luca Sbardella wrote:
>     > I went to bindings/traits/ublas_matrix.hpp and in the struct
>     matrix_detail_traits the uplo_type is not defined.
>     >
>     > Am I missing something?
>
>     uplo_type is used to indicate which part of a symmetric or
>     hermitian matrix is stored. It should be either upper_t or
>     lower_t. The file matrix_traits.hpp contains the following:
>
>      // upper/lower non-unit/unit triangular type tags
>      struct upper_t {};
>      struct lower_t {};
>      struct unit_upper_t {};
>      struct unit_lower_t {};
>
>     I have to admit that I'm not aware of any special triangular
>     matrix types, but there are special matrix types for symmetric and
>     hermitian matrix types. So it's possible that including
>     traits/ublas_symmetric.hpp and traits/ublas_hermitian.hpp will
>     solve your problem.
>
>     Conclusion:
>     The uplo_type is only meaningful for symmetric, hermitian or
>     triangular matrix types. I believe that only symmetric and
>     hermitian matrix types are directly supported by ublas, so these
>     type tags are only used for symmetric and hermitian matrices. So
>     including traits/ublas_symmetric.hpp and
>     traits/ublas_hermitian.hpp in the "client" code (i.e. the test
>     case) and using the corresponding symmetric/hermitian matrix
>     classes or matrix class adaptors from ublas should help with this
>     problem.
>
>     Regards,
>     Thomas
>     _______________________________________________
>     ublas mailing list
>     ublas_at_[hidden] <mailto:ublas_at_[hidden]>
>     http://listarchives.boost.org/mailman/listinfo.cgi/ublas
>     Sent to: luca_at_[hidden] <mailto:luca_at_[hidden]>
>
>
>
>
> -- 
> Dr Luca Sbardella
> Director
> Dynamic Quant Ltd
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> ublas mailing list
> ublas_at_[hidden]
> http://listarchives.boost.org/mailman/listinfo.cgi/ublas
> Sent to: karl.meerbergen_at_[hidden]
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm