Dear all,
I have encountered an issue calculating matrix products when the diagonal matrix is used. I have written a simple test case to illustrate the problem (see code). The calculation is fairly straight forward. However, a static assertion fails in matrix_expression.hpp at line 4815.
Has anyone else encountered this problem? Can anyone suggest a solution?
Many Thanks,
Steven
Test Case:
matrix<double> A(3,3);
A(0,0) = 4; A(0,1) = 1; A(0,2) = 1;
A(1,0) = 1; A(1,1) = 2; A(1,2) = 1;
A(2,0) = 1; A(2,1) = 1; A(2,2) = 3;
diagonal_matrix<double> D(3,3);
D(0,0) = 1; D(1,1) = 2; D(2,2) = 3;
cout << prod(prod(A,D),A) << endl;
Compiler Output:
1>c:\development\patmos\thirdparty\boost\boost_1_45_0\boost\numeric\ublas\matrix_expression.hpp(4815) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
1> with
1> [
1> x=false
1> ]
1> c:\development\patmos\diamond\test\unit_test\test_linear_algebra.hpp(141) : see reference to function template instantiation 'boost::numeric::ublas::matrix_matrix_binary<E1,E2,F> boost::numeric::ublas::prod<boost::numeric::ublas::matrix_matrix_binary<boost::numeric::ublas::matrix<T>,boost::numeric::ublas::banded_matrix<T,L,A>,boost::numeric::ublas::matrix_matrix_prod<M1,M2,TV>>,C>(const boost::numeric::ublas::matrix_expression<E> &,const boost::numeric::ublas::matrix_expression<C> &)' being compiled
1> with
1> [
1> E1=boost::numeric::ublas::matrix_matrix_binary<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,boost::numeric::ublas::matrix_matrix_prod<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,double>>,
1> E2=boost::numeric::ublas::matrix<double>,
1> F=boost::numeric::ublas::matrix_matrix_prod<boost::numeric::ublas::matrix_matrix_binary<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,boost::numeric::ublas::matrix_matrix_prod<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,double>>,boost::numeric::ublas::matrix<double>,double>,
1> T=double,
1> L=boost::numeric::ublas::row_major,
1> A=boost::numeric::ublas::unbounded_array<double>,
1> M1=boost::numeric::ublas::matrix<double>,
1> M2=boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,
1> TV=double,
1> C=boost::numeric::ublas::matrix<double>,
1> E=boost::numeric::ublas::matrix_matrix_binary<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,boost::numeric::ublas::matrix_matrix_prod<boost::numeric::ublas::matrix<double>,boost::numeric::ublas::banded_matrix<double,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<double>>,double>>
1> ]