Estoy haciendo una buena cantidad de programación científica y realicé muy buenas experiencias con ambas Boost.Units, que proporciona análisis dimensional en tiempo de compilación para cantidades (es decir, cantidades de etiquetas con unidades y por lo tanto, detecta muchos errores con el análisis de la dimensión física clásica) y el uso de Eigen 2 para el álgebra lineal.Combinación de una biblioteca de álgebra lineal con Boost :: Unidades
Sin embargo, Eigen no tiene ningún concepto de unidades, y aunque puede establecer las cantidades escalares en matrices para Eigen, espera que la multiplicación de dos cantidades produzca el mismo tipo, lo que obviamente no es cierto para las unidades. Por ejemplo, código como:
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();
no funciona, aunque es lógicamente correcto.
¿Hay alguna biblioteca de matriz que admita unidades? Sé que esto habría sido notoriamente difícil de implementar en el pasado, y C++ 11 y decltype
harán que sea mucho más fácil, pero seguramente fue posible con C++ 03 y especializaciones de plantillas.
Para el registro, porque tuve que buscar un poco yo mismo: [The blitz manual 3.7.1] (http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC90) le dice cómo promover el usuario tipos definidos Gracias por la pista. – thiton