[ublas]how to get tsm to compile with simple matrix args?
Compilation of the attached file with gcc4.7 produces obscure output: /home/evansl/download/gcc/4.7-20111008/install/bin/g++ -c -Wall -ftemplate-depth-300 -O0 -g3 -fno-inline -std=gnu++0x -I/home/evansl/prog_dev/boost-svn/ro/trunk/sandbox/rw/non_variadic_templates -I/home/evansl/prog_dev/boost-svn/ro/trunk -I../../.. -DTEMPLATE_DEPTH=300 solve_tridiag_ublas.cpp -MMD -o solve_tridiag_ublas.o In file included from solve_tridiag_ublas.cpp:2:0: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp: In instantiation of 'typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type boost::numeric::ublas::solve(const boost::numeric::ublas::matrix_expression<E1>&, const boost::numeric::ublas::matrix_expression<E1>&, C) [with E1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
; E2 = boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> >; C = double; typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >]': /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/blas.hpp:387:48: required from 'M1& boost::numeric::ublas::blas_3::tsm(M1&, const T&, const M2&, C) [with M1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; T = double; M2 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; C = double]' solve_tridiag_ublas.cpp:150:54: required from here /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: error: no matching function for call to 'inplace_solve(const boost::numeric::ublas::matrix_expression<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
&, boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type&, double)' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: candidates are: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::row_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::unit_lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>'
and it goes on and on. Looking at libs/numeric/ublas/test:23.cpp was no help since it looked like it was doing exactly what the attached code is doing. Please, what can I change to get the attached to compile? TIA. -regards, Larry
Hi Larry, The comments on the code writes for tsm that it accepts a tringular (not tridiagonal) matrix. -very common confusion ;-)). HTH, Petros ps: also, when you derive from a class the "magic" of expression templates often disappears (depending on implementation..) -----Original Message----- From: Larry Evans Sent: Monday, November 14, 2011 2:26 PM To: boost-users@lists.boost.org Subject: [Boost-users] [ublas]how to get tsm to compile with simple matrixargs? Compilation of the attached file with gcc4.7 produces obscure output: /home/evansl/download/gcc/4.7-20111008/install/bin/g++ -c -Wall -ftemplate-depth-300 -O0 -g3 -fno-inline -std=gnu++0x -I/home/evansl/prog_dev/boost-svn/ro/trunk/sandbox/rw/non_variadic_templates -I/home/evansl/prog_dev/boost-svn/ro/trunk -I../../.. -DTEMPLATE_DEPTH=300 solve_tridiag_ublas.cpp -MMD -o solve_tridiag_ublas.o In file included from solve_tridiag_ublas.cpp:2:0: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp: In instantiation of 'typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type boost::numeric::ublas::solve(const boost::numeric::ublas::matrix_expression<E1>&, const boost::numeric::ublas::matrix_expression<E1>&, C) [with E1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
; E2 = boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> >; C = double; typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >]': /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/blas.hpp:387:48: required from 'M1& boost::numeric::ublas::blas_3::tsm(M1&, const T&, const M2&, C) [with M1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; T = double; M2 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; C = double]' solve_tridiag_ublas.cpp:150:54: required from here /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: error: no matching function for call to 'inplace_solve(const boost::numeric::ublas::matrix_expression<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
&, boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type&, double)' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: candidates are: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::row_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::unit_lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>'
and it goes on and on. Looking at libs/numeric/ublas/test:23.cpp was no help since it looked like it was doing exactly what the attached code is doing. Please, what can I change to get the attached to compile? TIA. -regards, Larry _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On 11/14/11 14:53, petros wrote:
Hi Larry, The comments on the code writes for tsm that it accepts a tringular (not tridiagonal) matrix. -very common confusion ;-)).
Ah! I should have read closer. BTW, since, based on our past emails, you're interested in linear equation solvers for tridiagonal systems, maybe you could let me know how you're solving tridiagonal systems with ublas or lapack. I'd appreciate it.
HTH, Petros ps: also, when you derive from a class the "magic" of expression templates often disappears (depending on implementation..)
OK, I guess if I want to use the ublas banded matrix I'll have to set the values manually instead of using a subclass' CTOR and 3 std::vectors as the CTOR args to do it :( Thanks for the help, Petros. -regards, Larry
Hi Larry,
Ah! I should have read closer. BTW, since, based on our past emails, you're interested in linear equation solvers for tridiagonal systems, maybe you could let me know how you're solving tridiagonal systems with ublas or lapack. I'd appreciate it.
Well, blas does not provide with any, and lapack providees with expensive ones (w/pivoting and all that, and only saves on the memory footprint, and multiplies with 0's until kingdom comes ;-)). You are much better off googling Thomas Algorithm and implementing it on your own (does not take much at all). I would advise you have the lapack ones avail too, for the "nasty" problems. Look in LAPACk for *gtsv, *gtsvx, *ptsv, *ptsvx where * stands for s,d,c or z for float, double, complex<float> and complex<double> respectively. You will have to do a little wrapping, but who doesn't ;))
OK, I guess if I want to use the ublas banded matrix I'll have to set the values manually instead of using a subclass' CTOR and 3 std::vectors as the CTOR args to do it :(
Not necessarily; you can overwrite ctors and assignment operators to use with a lhs. For the rhs expressions, you need to derive from matrix_container<your_type> (maybe something more? not sure yet). HTH, P- ---- Larry Evans <cppljevans@suddenlink.net> wrote:
On 11/14/11 14:53, petros wrote:
Hi Larry, The comments on the code writes for tsm that it accepts a tringular (not tridiagonal) matrix. -very common confusion ;-)).
Ah! I should have read closer. BTW, since, based on our past emails, you're interested in linear equation solvers for tridiagonal systems, maybe you could let me know how you're solving tridiagonal systems with ublas or lapack. I'd appreciate it.
HTH, Petros ps: also, when you derive from a class the "magic" of expression templates often disappears (depending on implementation..)
OK, I guess if I want to use the ublas banded matrix I'll have to set the values manually instead of using a subclass' CTOR and 3 std::vectors as the CTOR args to do it :(
Thanks for the help, Petros.
-regards, Larry
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On 11/14/11 15:53, pmamales@nyc.rr.com wrote:
Hi Larry,
Ah! I should have read closer. BTW, since, based on our past emails, you're interested in linear equation solvers for tridiagonal systems, maybe you could let me know how you're solving tridiagonal systems with ublas or lapack. I'd appreciate it.
Well, blas does not provide with any, and lapack providees with expensive ones (w/pivoting and all that, and only saves on the memory footprint, and multiplies with 0's until kingdom comes ;-)). You are much better off googling Thomas Algorithm and implementing it on your own (does not take much at all).
Done: http://svn.boost.org/svn/boost/sandbox/variadic_templates/sandbox/stepper/bo...
I would advise you have the lapack ones avail too, for the "nasty" problems. Look in LAPACk for *gtsv, *gtsvx, *ptsv, *ptsvx where * stands for s,d,c or z for float, double, complex<float> and complex<double> respectively. You will have to do a little wrapping, but who doesn't ;))
Did the *gtsv in the attached. To get it to link, had to add: -llapack -lblas -lgfortran options to link command. The in source comments indicate that lapack knows the matrix is banded; hence, I'm a bit surprised at your observation that it: multiplies with 0's until kingdom comes ;-)). Any idea why? [snip] Thanks for the help Petros. -regards, Larry
multiplies with 0's until kingdom comes ;-)).
Any idea why? Since I am not a LAPACK expert I can only guess. The emphasis was on the storage requirements. Also, maybe because of pivoting.. not sure, anyway. P-
-----Original Message----- From: Larry Evans Sent: Wednesday, November 16, 2011 9:11 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] [ublas]how to get tsm to compile with simplematrixargs? On 11/14/11 15:53, pmamales@nyc.rr.com wrote:
Hi Larry,
Ah! I should have read closer. BTW, since, based on our past emails, you're interested in linear equation solvers for tridiagonal systems, maybe you could let me know how you're solving tridiagonal systems with ublas or lapack. I'd appreciate it.
Well, blas does not provide with any, and lapack providees with expensive ones (w/pivoting and all that, and only saves on the memory footprint, and multiplies with 0's until kingdom comes ;-)). You are much better off googling Thomas Algorithm and implementing it on your own (does not take much at all).
Done: http://svn.boost.org/svn/boost/sandbox/variadic_templates/sandbox/stepper/bo...
I would advise you have the lapack ones avail too, for the "nasty" problems. Look in LAPACk for *gtsv, *gtsvx, *ptsv, *ptsvx where * stands for s,d,c or z for float, double, complex<float> and complex<double> respectively. You will have to do a little wrapping, but who doesn't ;))
Did the *gtsv in the attached. To get it to link, had to add: -llapack -lblas -lgfortran options to link command. The in source comments indicate that lapack knows the matrix is banded; hence, I'm a bit surprised at your observation that it: multiplies with 0's until kingdom comes ;-)). Any idea why? [snip] Thanks for the help Petros. -regards, Larry _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Also, in your tsm call you nowhere mention the matrix a.. I believe it needs to be: tsm( r0, t, a, t ) But still this would be for triangular matrix! ( the r0 would be overwritten, I guess ) HTH, P- -----Original Message----- From: Larry Evans Sent: Monday, November 14, 2011 2:26 PM To: boost-users@lists.boost.org Subject: [Boost-users] [ublas]how to get tsm to compile with simple matrixargs? Compilation of the attached file with gcc4.7 produces obscure output: /home/evansl/download/gcc/4.7-20111008/install/bin/g++ -c -Wall -ftemplate-depth-300 -O0 -g3 -fno-inline -std=gnu++0x -I/home/evansl/prog_dev/boost-svn/ro/trunk/sandbox/rw/non_variadic_templates -I/home/evansl/prog_dev/boost-svn/ro/trunk -I../../.. -DTEMPLATE_DEPTH=300 solve_tridiag_ublas.cpp -MMD -o solve_tridiag_ublas.o In file included from solve_tridiag_ublas.cpp:2:0: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp: In instantiation of 'typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type boost::numeric::ublas::solve(const boost::numeric::ublas::matrix_expression<E1>&, const boost::numeric::ublas::matrix_expression<E1>&, C) [with E1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
; E2 = boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> >; C = double; typename boost::numeric::ublas::matrix_matrix_solve_traits<E1, E2>::result_type = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >]': /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/blas.hpp:387:48: required from 'M1& boost::numeric::ublas::blas_3::tsm(M1&, const T&, const M2&, C) [with M1 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; T = double; M2 = boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > ; C = double]' solve_tridiag_ublas.cpp:150:54: required from here /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: error: no matching function for call to 'inplace_solve(const boost::numeric::ublas::matrix_expression<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> >
&, boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type&, double)' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: candidates are: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1859:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1885:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1914:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::column_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1942:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag, boost::numeric::ublas::row_major_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1950:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1959:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::unit_lower_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1967:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::dense_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:1977:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::packed_proxy_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2003:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>' /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template<class E1, class E2> void boost::numeric::ublas::inplace_solve(const boost::numeric::ublas::matrix_expression<E1>&, boost::numeric::ublas::vector_expression<E2>&, boost::numeric::ublas::upper_tag, boost::numeric::ublas::column_major_tag, boost::numeric::ublas::unknown_storage_tag) /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2032:10: note: template argument deduction/substitution failed: /home/evansl/prog_dev/boost-svn/ro/trunk/boost/numeric/ublas/triangular.hpp:2587:9: note: 'boost::numeric::ublas::matrix_matrix_solve_traits<boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::matrix_binary_scalar1<const double, boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > , boost::numeric::ublas::scalar_multiplies<double, double> > ::result_type {aka boost::numeric::ublas::matrix<double, boost::numeric::ublas::basic_row_major<>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > }' is not derived from 'boost::numeric::ublas::vector_expression<E2>'
and it goes on and on. Looking at libs/numeric/ublas/test:23.cpp was no help since it looked like it was doing exactly what the attached code is doing. Please, what can I change to get the attached to compile? TIA. -regards, Larry _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (3)
-
Larry Evans
-
petros
-
pmamales@nyc.rr.com