Hello!
I'm trying to use ATLAS bindings in order to
perform calculations with symmetric matrices.
I've written the following
code:
#include "stdafx.h"
#include
<boost/numeric/bindings/traits/vector_traits.hpp>
#include
<boost/numeric/bindings/traits/ublas_symmetric.hpp>
#include
<boost/numeric/bindings/atlas/cblas2.hpp>
#include
<boost/numeric/ublas/io.hpp>
using namespace boost::numeric::ublas;
using namespace
boost::numeric::bindings::atlas;
int main()
{
vector<double> v1(3);
v1(0) =
1; v1(1) = 0; v1(2) = 2;
symmetric_matrix<double> sm1(3,3);
sm1 (0,0) =
1; sm1 (0,1) = 1; sm1 (0,2) = 1;
sm1 (1,0) = 1; sm1 (1,1) = 0; sm1
(1,2) = 2;
sm1 (2,0) = 1; sm1 (2,1) = 2; sm1 (2,2) =
3;
syr(1.0, v1, sm1);
return 0;
}
But I'm given an error when trying to compile:
Compiling...
Symmetrics.cpp
c:\mbslab\mbslab.foundation\boost\boost\numeric\bindings\atlas\cblas2.hpp(705)
: error C2027: use of undefined type
'boost::STATIC_ASSERTION_FAILURE<x>'
with
[
x=false
]
c:\mbslab\mbslab.foundation\boost\boost\numeric\bindings\atlas\cblas2.hpp(705) :
see reference to class template instantiation
'boost::STATIC_ASSERTION_FAILURE<x>' being
compiled
with
[
x=false
]
c:\mbslab\02_Pruebas\Bindings_3\Symmetrics\Symmetrics.cpp(33) : see reference to
function template instantiation 'void
boost::numeric::bindings::atlas::syr<double,boost::numeric::ublas::symmetric_matrix<T>,boost::numeric::ublas::vector<T>>(const
T &,const VctX &,SymmM &)'
being compiled
with
[
T=double,
VctX=boost::numeric::ublas::vector<double>,
SymmM=boost::numeric::ublas::symmetric_matrix<double>
]
I've seen that this error doesn't appear if the symmetric matrix
symmetric_matrix<double> sm1(3,3);
is replaced with
matrix<double> m (3,
3);
symmetric_adaptor<matrix<double>, lower> sm1 (m);
Is there any reason to enforce the user to use a symmetric_adaptor
instead of a symmetric_matrix with ATLAS bindings, or maybe this is a bug?
Thank you!
Francisco J. González