Sto facendo una buona quantità di programmazione scientifica e ho fatto ottime esperienze con entrambe le unità Boost.Units, che fornisce un'analisi dimensionale in fase di compilazione per le quantità (ad esempio quantità di tag con unità e cattura così molti errori con l'analisi classica della dimensione fisica) e usa Eigen 2 per l'algebra lineare.Combinare una libreria algebra lineare con Boost :: Units
Tuttavia, Eigen non ha alcun concetto di unità e mentre è possibile impostare le quantità scalari nelle matrici per Eigen, si prevede che la moltiplicazione di due quantità restituisca lo stesso tipo, che ovviamente non è vero per le unità. Ad esempio, codice come:
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();
non funziona, anche se è logicamente corretto.
Esiste una libreria di matrici che supporti le unità? So che questo sarebbe stato notoriamente difficile da implementare in passato, e C++ 11 e decltype
renderà tutto molto più semplice, ma sicuramente è stato possibile con C++ 03 e le specializzazioni dei modelli.
Per la cronaca, perché ho dovuto cercare un po 'me stesso: [The blitz manual 3.7.1] (http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC90) spiega come promuovere l'utente tipi definiti. Grazie per il suggerimento. – thiton