|
Ublas : |
From: Gunter Winkler (guwi17_at_[hidden])
Date: 2006-09-07 08:04:40
On Sunday 23 July 2006 11:13, Matthias Troyer wrote:
> There is a serious bug in the mapped_vector_of_mapped_vector spare
> matrix type. Rows containing only zero elements are not treated
> correctly in prod(). The following code should give a vector that
> contains only 1 in the last element. Instead prod() gives a vector
> containing 1 in each element. In debug mode this bug is found by the
I could reproduce the bug. It is inside the vector_assign logic. The product
is correctly computed, but the assignment fails. I will give more details
shortly.
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>
typedef boost::numeric::ublas::mapped_vector_of_mapped_vector<double>
SPARSE_MATRIX;
typedef boost::numeric::ublas::vector<double> DENSE_VECTOR;
int main(int argc, char * argv[])
{
SPARSE_MATRIX A(10,10);
DENSE_VECTOR x(10);
DENSE_VECTOR y(10);
std::fill(x.begin(), x.end(), 1.0);
A.insert_element(9,9,2.0);
std::cout << "matrix A " << A << "\n";
std::cout << "vector x " << x << "\n";
std::cout << "prod(A,x) " << prod(A,x) << "\n";
y = prod(A,x); // <- this raises the exception
std::cout << "prod(A,x) " << y << "\n";
return EXIT_SUCCESS;
}