include/geometry/linalg.hpp
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon, 12 Jan 2009 15:33:04 -0800
branchdev
changeset 109 75eb7a4628f2
parent 19 efa14432761a
permissions -rw-r--r--
Debugged ZigzagPersistence (having added heavier consistency checking) * Added DEBUG_CONTAINERS option (uses std::__debug::* containers for chains and in ZigzagPersistence) * Added SizeStorage specialization for std::deque<T> * ZigzagPersistence got a lot more consistency checking (in debug mode only, which now crawls); as a result it's been debugged (running on non-trivial examples) * examples/rips/rips-zigzag takes command-line options * added ChainWrapper::clear() * added Simplex::VertexDimensionComparison * added PairwiseDistances class (for computing distances between points in a container according to a distance functor)

template<class ValueType_>
typename LinearAlgebra<ValueType_>::ValueType 					
LinearAlgebra<ValueType_>::
determinant(const MatrixType& a)
{
	using namespace boost::numeric::ublas;
	MatrixType m = a;
	lu_factorize(m);
	return determinant(triangular_adaptor<MatrixType, upper>(m));
}

template<class ValueType_>
void
LinearAlgebra<ValueType_>::
solve(const MatrixType& a, const VectorType& b, VectorType& x)
{
	using namespace boost::numeric::ublas;
	MatrixType m = a;
	x = b;
	lu_factorize(m);
	//lu_substitute(m, x);
	inplace_solve(m,x,unit_lower_tag());
	inplace_solve(m,x,upper_tag());
}


/* Private */
template<class ValueType_>
template<class TriangularType_>
typename LinearAlgebra<ValueType_>::ValueType 					
LinearAlgebra<ValueType_>::
determinant(const boost::numeric::ublas::triangular_adaptor<MatrixType, TriangularType_>& t)
{
	ValueType res = ValueType(1);
	for (typename MatrixType::size_type i = 0; i < t.size1(); ++i)
		res *= t(i,i);
	return res;
}