diff options
Diffstat (limited to 'unsupported/Eigen/src/Polynomials/Companion.h')
-rw-r--r-- | unsupported/Eigen/src/Polynomials/Companion.h | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/unsupported/Eigen/src/Polynomials/Companion.h b/unsupported/Eigen/src/Polynomials/Companion.h index bbd9073b3..608951d3c 100644 --- a/unsupported/Eigen/src/Polynomials/Companion.h +++ b/unsupported/Eigen/src/Polynomials/Companion.h @@ -31,14 +31,16 @@ #ifndef EIGEN_PARSED_BY_DOXYGEN +namespace internal { + template <typename T> -T ei_radix(){ return 2; } +T radix(){ return 2; } template <typename T> -T ei_radix2(){ return ei_radix<T>()*ei_radix<T>(); } +T radix2(){ return radix<T>()*radix<T>(); } template<int Size> -struct ei_decrement_if_fixed_size +struct decrement_if_fixed_size { enum { ret = (Size == Dynamic) ? Dynamic : Size-1 }; @@ -47,14 +49,14 @@ struct ei_decrement_if_fixed_size #endif template< typename _Scalar, int _Deg > -class ei_companion +class companion { public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_Deg==Dynamic ? Dynamic : _Deg) enum { Deg = _Deg, - Deg_1=ei_decrement_if_fixed_size<Deg>::ret + Deg_1=decrement_if_fixed_size<Deg>::ret }; typedef _Scalar Scalar; @@ -92,7 +94,7 @@ class ei_companion } template<typename VectorType> - ei_companion( const VectorType& poly ){ + companion( const VectorType& poly ){ setPolynomial( poly ); } public: @@ -150,7 +152,7 @@ class ei_companion template< typename _Scalar, int _Deg > inline -bool ei_companion<_Scalar,_Deg>::balanced( Scalar colNorm, Scalar rowNorm, +bool companion<_Scalar,_Deg>::balanced( Scalar colNorm, Scalar rowNorm, bool& isBalanced, Scalar& colB, Scalar& rowB ) { if( Scalar(0) == colNorm || Scalar(0) == rowNorm ){ return true; } @@ -161,22 +163,22 @@ bool ei_companion<_Scalar,_Deg>::balanced( Scalar colNorm, Scalar rowNorm, // \f$ 2^{2\sigma-1} < rowNorm / colNorm \le 2^{2\sigma+1} \f$ // then the balancing coefficient for the row is \f$ 1/2^{\sigma} \f$ // and the balancing coefficient for the column is \f$ 2^{\sigma} \f$ - rowB = rowNorm / ei_radix<Scalar>(); + rowB = rowNorm / radix<Scalar>(); colB = Scalar(1); const Scalar s = colNorm + rowNorm; while (colNorm < rowB) { - colB *= ei_radix<Scalar>(); - colNorm *= ei_radix2<Scalar>(); + colB *= radix<Scalar>(); + colNorm *= radix2<Scalar>(); } - rowB = rowNorm * ei_radix<Scalar>(); + rowB = rowNorm * radix<Scalar>(); while (colNorm >= rowB) { - colB /= ei_radix<Scalar>(); - colNorm /= ei_radix2<Scalar>(); + colB /= radix<Scalar>(); + colNorm /= radix2<Scalar>(); } //This line is used to avoid insubstantial balancing @@ -193,7 +195,7 @@ bool ei_companion<_Scalar,_Deg>::balanced( Scalar colNorm, Scalar rowNorm, template< typename _Scalar, int _Deg > inline -bool ei_companion<_Scalar,_Deg>::balancedR( Scalar colNorm, Scalar rowNorm, +bool companion<_Scalar,_Deg>::balancedR( Scalar colNorm, Scalar rowNorm, bool& isBalanced, Scalar& colB, Scalar& rowB ) { if( Scalar(0) == colNorm || Scalar(0) == rowNorm ){ return true; } @@ -204,9 +206,9 @@ bool ei_companion<_Scalar,_Deg>::balancedR( Scalar colNorm, Scalar rowNorm, * of the row and column norm */ const _Scalar q = colNorm/rowNorm; - if( !ei_isApprox( q, _Scalar(1) ) ) + if( !isApprox( q, _Scalar(1) ) ) { - rowB = ei_sqrt( colNorm/rowNorm ); + rowB = sqrt( colNorm/rowNorm ); colB = Scalar(1)/rowB; isBalanced = false; @@ -219,7 +221,7 @@ bool ei_companion<_Scalar,_Deg>::balancedR( Scalar colNorm, Scalar rowNorm, template< typename _Scalar, int _Deg > -void ei_companion<_Scalar,_Deg>::balance() +void companion<_Scalar,_Deg>::balance() { EIGEN_STATIC_ASSERT( Deg == Dynamic || 1 < Deg, YOU_MADE_A_PROGRAMMING_MISTAKE ); const Index deg = m_monic.size(); @@ -234,8 +236,8 @@ void ei_companion<_Scalar,_Deg>::balance() //First row, first column excluding the diagonal //============================================== - colNorm = ei_abs(m_bl_diag[0]); - rowNorm = ei_abs(m_monic[0]); + colNorm = abs(m_bl_diag[0]); + rowNorm = abs(m_monic[0]); //Compute balancing of the row and the column if( !balanced( colNorm, rowNorm, hasConverged, colB, rowB ) ) @@ -249,10 +251,10 @@ void ei_companion<_Scalar,_Deg>::balance() for( Index i=1; i<deg_1; ++i ) { // column norm, excluding the diagonal - colNorm = ei_abs(m_bl_diag[i]); + colNorm = abs(m_bl_diag[i]); // row norm, excluding the diagonal - rowNorm = ei_abs(m_bl_diag[i-1]) + ei_abs(m_monic[i]); + rowNorm = abs(m_bl_diag[i-1]) + abs(m_monic[i]); //Compute balancing of the row and the column if( !balanced( colNorm, rowNorm, hasConverged, colB, rowB ) ) @@ -268,7 +270,7 @@ void ei_companion<_Scalar,_Deg>::balance() const Index ebl = m_bl_diag.size()-1; VectorBlock<RightColumn,Deg_1> headMonic( m_monic, 0, deg_1 ); colNorm = headMonic.array().abs().sum(); - rowNorm = ei_abs( m_bl_diag[ebl] ); + rowNorm = abs( m_bl_diag[ebl] ); //Compute balancing of the row and the column if( !balanced( colNorm, rowNorm, hasConverged, colB, rowB ) ) @@ -279,5 +281,6 @@ void ei_companion<_Scalar,_Deg>::balance() } } +} // end namespace internal #endif // EIGEN_COMPANION_H |