|
Ublas : |
From: Karl Meerbergen (karl.meerbergen_at_[hidden])
Date: 2008-08-27 01:32:59
Hi,
LAPACK routines are written in FORTRAN, so matrices must be column_major:
Please use ublas::matrix<double, ublas::column_major>
If you look in traits/ublas_matrix.hpp line 46, you see that your matrix
is not column_major.
Karl
jk jk wrote:
> Experiencing a really frustrating issue with ublas/lapack bindings.
> The error and a test case are pasted here:
>
> ------code pasted below------
>
> #include <iostream>
> #include <boost/numeric/bindings/lapack/lapack.hpp>
>
> int main(){
> using namespace boost::numeric;
> using namespace boost::numeric::bindings;
>
> ublas::matrix<double> ma (3, 3);
> ma(0,0)=1;
> ma(1,1)=1;
> ma(2,2)=1;
> ma(0,1)=1;
> ma(1,2)=1;
> ma(2,0)=1;
> ma(0,2)=1;
> ma(1,1)=1;
> ma(2,0)=1;
> std::cout << lapack::gesdd_iwork(ma);
> }
>
>
> ----error pasted below-------
>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/ublas_matrix.hpp:
> In instantiation of
> 'boost::numeric::bindings::traits::matrix_detail_traits<boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>> , boost::numeric::ublas::matrix<double,
>>>
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>>> ':
>>>>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/matrix_traits.hpp:48:
> instantiated from
> 'boost::numeric::bindings::traits::matrix_traits<boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>>> '
>>>>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/lapack/gesdd.hpp:358:
> instantiated from 'int
> boost::numeric::bindings::lapack::gesdd_iwork(const MatrA&) [with
> MatrA = boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>> ]'
>>>
> boostbindingserror.cpp:18: instantiated from here
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/ublas_matrix.hpp:46:
> error: invalid application of 'sizeof' to incomplete type
> 'boost::STATIC_ASSERTION_FAILURE<false>'
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/ublas_matrix.hpp:
> In instantiation of
> 'boost::numeric::bindings::traits::matrix_detail_traits<boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>> , const boost::numeric::ublas::matrix<double,
>>>
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>>> ':
>>>>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/matrix_traits.hpp:48:
> instantiated from
> 'boost::numeric::bindings::traits::matrix_traits<const
> boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>>> '
>>>>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/matrix_traits.hpp:99:
> instantiated from 'int
> boost::numeric::bindings::traits::matrix_size1(M&) [with M = const
> boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>> ]'
>>>
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/lapack/gesdd.hpp:365:
> instantiated from 'int
> boost::numeric::bindings::lapack::gesdd_iwork(const MatrA&) [with
> MatrA = boost::numeric::ublas::matrix<double,
> boost::numeric::ublas::basic_row_major<long unsigned int, long int>,
> boost::numeric::ublas::unbounded_array<double, std::allocator<double>
>
>>> ]'
>>>
> boostbindingserror.cpp:18: instantiated from here
> /usr/local/include/boost-numeric-bindings/boost/numeric/bindings/traits/ublas_matrix.hpp:46:
> error: invalid application of 'sizeof' to incomplete type
> 'boost::STATIC_ASSERTION_FAILURE<false>'
> _______________________________________________
> ublas mailing list
> ublas_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/ublas
>