Объединение библиотеки линейной алгебры с Boost :: Units

Я занимаюсь научным программированием и получил очень хороший опыт работы с Boost.Units, которые обеспечивают размерный анализ величин во время компиляции (т. е. помечают количества единицами и, таким образом, улавливают множество ошибок с помощью классический анализ физических размерностей) и с использованием Eigen 2 для линейной алгебры.

Однако Eigen не имеет понятия единиц, и хотя вы можете установить скалярные величины в матрицах для Eigen, он ожидает, что умножение двух величин даст тот же тип , что явно неверно для модулей. Например, такой код, как:

using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity< si::length >, 2, 1 > meter_vector;
quantity< si::area > norm = meter_vector.squaredNorm();

, не работает, хотя он логически правильный.

Есть ли библиотека матриц, поддерживающая модули? Я знаю, что это было бы заведомо сложно t o реализовывать в прошлом, и C ++ 11 и decltype сделают это намного проще, но это, безусловно, было возможно с C ++ 03 и специализациями шаблонов.

12
задан Catskul 25 September 2012 в 16:26
поделиться