Skip to content

Commit

Permalink
Add 1x1 svd specialization to src/linalg2.hpp
Browse files Browse the repository at this point in the history
  • Loading branch information
jhyeon committed Jan 6, 2016
1 parent 7d53a36 commit 09187a6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/linalg2.hpp
Expand Up @@ -297,6 +297,16 @@ void svd_internal
svd_eigen(m, s, u, vh);
}

template<class Scalar>
void svd_internal
(const Eigen::Matrix<Scalar, 1, 1>& m,
Eigen::Array<double, 1, 1>& s,
Eigen::Matrix<Scalar, 1, 1> *u,
Eigen::Matrix<Scalar, 1, 1> *vh)
{
svd_eigen(m, s, u, vh);
}

template<class Real, class Scalar, int M, int N>
void svd_errbd
(const Eigen::Matrix<Scalar, M, N>& m,
Expand Down
20 changes: 20 additions & 0 deletions test/test_linalg2.cpp
Expand Up @@ -16,6 +16,9 @@
// <http://www.gnu.org/licenses/>.
// ====================================================================

#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_LIST_SIZE 30

#include <limits>
#include <cmath>
#include <complex>
Expand Down Expand Up @@ -64,13 +67,17 @@ struct Test_svd {

typedef boost::mpl::list<
// use Eigen::JacobiSVD
Test_svd<complex<double>, 1, 1, svd, svd>,
Test_svd<complex<double>, 2, 2, svd, svd>,
Test_svd<complex<double>, 3, 3, svd, svd>,
Test_svd<double , 1, 1, svd, svd>,
Test_svd<double , 2, 2, svd, svd>,
Test_svd<double , 3, 3, svd, svd>,

Test_svd<complex<double>, 1, 1, reorder_svd, reorder_svd, true>,
Test_svd<complex<double>, 2, 2, reorder_svd, reorder_svd, true>,
Test_svd<complex<double>, 3, 3, reorder_svd, reorder_svd, true>,
Test_svd<double , 1, 1, reorder_svd, reorder_svd, true>,
Test_svd<double , 2, 2, reorder_svd, reorder_svd, true>,
Test_svd<double , 3, 3, reorder_svd, reorder_svd, true>,

Expand Down Expand Up @@ -143,11 +150,16 @@ struct Test_diagonalize_symmetric {

typedef boost::mpl::list<
// use Eigen::JacobiSVD
Test_diagonalize_symmetric
<complex<double>, 1, diagonalize_symmetric, diagonalize_symmetric>,
Test_diagonalize_symmetric
<complex<double>, 2, diagonalize_symmetric, diagonalize_symmetric>,
Test_diagonalize_symmetric
<complex<double>, 3, diagonalize_symmetric, diagonalize_symmetric>,

Test_diagonalize_symmetric
<complex<double>, 1,
reorder_diagonalize_symmetric, reorder_diagonalize_symmetric, true>,
Test_diagonalize_symmetric
<complex<double>, 2,
reorder_diagonalize_symmetric, reorder_diagonalize_symmetric, true>,
Expand Down Expand Up @@ -260,23 +272,27 @@ struct Test_fs {
};

typedef boost::mpl::list<
Test_fs<double, complex<double>, 1>,
Test_fs<double, complex<double>, 2>,
Test_fs<double, complex<double>, 3>,
Test_fs<double, complex<double>, 4>,
Test_fs<double, complex<double>, 6>,
Test_fs<double, complex<double>, 4, 6>,
Test_fs<double, complex<double>, 6, 4>,
Test_fs<double, double , 1>,
Test_fs<double, double , 2>,
Test_fs<double, double , 3>,
Test_fs<double, double , 4>,
Test_fs<double, double , 6>,
Test_fs<double, double , 4, 6>,
Test_fs<double, double , 6, 4>,

Test_fs<long double, complex<long double>, 1>,
Test_fs<long double, complex<long double>, 3>,
Test_fs<long double, complex<long double>, 6>,
Test_fs<long double, complex<long double>, 4, 6>,
Test_fs<long double, complex<long double>, 6, 4>,
Test_fs<long double, long double , 1>,
Test_fs<long double, long double , 3>,
Test_fs<long double, long double , 6>,
Test_fs<long double, long double , 4, 6>,
Expand Down Expand Up @@ -315,13 +331,15 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_fs_svd, T, fs_svd_tests)
}

typedef boost::mpl::list<
Test_fs<double, double, 1>,
Test_fs<double, double, 2>,
Test_fs<double, double, 3>,
Test_fs<double, double, 4>,
Test_fs<double, double, 6>,
Test_fs<double, double, 4, 6>,
Test_fs<double, double, 6, 4>,

Test_fs<long double, long double, 1>,
Test_fs<long double, long double, 3>,
Test_fs<long double, long double, 6>,
Test_fs<long double, long double, 4, 6>,
Expand Down Expand Up @@ -360,9 +378,11 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(test_casting_fs_svd, T, casting_fs_svd_tests)

typedef boost::mpl::list<
// use Eigen::JacobiSVD
Test_fs<double, complex<double>, 1>,
Test_fs<double, complex<double>, 2>,
Test_fs<double, complex<double>, 3>,

Test_fs<long double, complex<long double>, 1>,
Test_fs<long double, complex<long double>, 2>,
Test_fs<long double, complex<long double>, 3>,
Test_fs<long double, complex<long double>, 4>,
Expand Down

0 comments on commit 09187a6

Please sign in to comment.