From 8a46d3cd5e5ddd22fba94f15d2ea20cc707eef61 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 26 Aug 2015 14:48:11 +0200 Subject: [PATCH] Include Lapack svd in Solver interface (another model for SvdTraits) --- .../doc/Documentation/Installation.txt | 9 +++++++++ .../doc/Solver_interface/Solver_interface.txt | 8 ++++---- .../doc/Solver_interface/examples.txt | 2 +- .../examples/Solver_interface/CMakeLists.txt | 2 +- ...on.cpp => singular_value_decomposition.cpp} | 18 +++++++++++++----- .../include/CGAL/Lapack_svd.h | 0 6 files changed, 28 insertions(+), 11 deletions(-) rename Solver_interface/examples/Solver_interface/{eigen_singular_value_decomposition.cpp => singular_value_decomposition.cpp} (67%) rename Jet_fitting_3/include/CGAL/Lapack/Linear_algebra_lapack.h => Solver_interface/include/CGAL/Lapack_svd.h (100%) diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index 9864272873d..5f1f1cee0d1 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -508,6 +508,15 @@ and the \ref PkgRidges_3 packages. The \sc{Eigen} web site is `http://eigen.tuxfamily.org`. +\subsection thirdpartyLapack Lapack + +\sc{Lapack} is a `Fortran` library for linear algebra. + +In \cgal, \sc{Lapack} is an alternative to \sc{Eigen} for singular value decomposition for the \ref +kgJet_fitting_3 and the \ref PkgRidges_3 packages. + +The \sc{Lapack} web site is `http://www.netlib.org/lapack/`. + \subsection thirdpartylibQGLViewer libQGLViewer libQGLViewer is a 3D widget based on \sc{Qt} 4's `QGLWidget`. In case of \sc{Qt}5 used, libQGLViewer needs to be recompiled with the proper \sc{Qt}5 version. diff --git a/Solver_interface/doc/Solver_interface/Solver_interface.txt b/Solver_interface/doc/Solver_interface/Solver_interface.txt index 2ba533d96a0..4a64a994551 100644 --- a/Solver_interface/doc/Solver_interface/Solver_interface.txt +++ b/Solver_interface/doc/Solver_interface/Solver_interface.txt @@ -42,15 +42,15 @@ class: The concept `SvdTraits` defines an interface for solving in the least square sense a linear system with a singular value decomposition. The -field type is `double`. +field type is `double`. We provide two models for this concept: -The class `Eigen_svd` provides an implementation of `SvdTraits` using -the \ref thirdpartyEigen library. +- `Eigen_svd` uses the \ref thirdpartyEigen library. +- `Lapack_svd` uses the \ref thirdpartyLapack library. Here is a simple example that shows how to handle matrices, vectors and this solver: -\cgalExample{Solver_interface/eigen_singular_value_decomposition.cpp} +\cgalExample{Solver_interface/singular_value_decomposition.cpp} diff --git a/Solver_interface/doc/Solver_interface/examples.txt b/Solver_interface/doc/Solver_interface/examples.txt index fb6339dba64..773c9ebbcd9 100644 --- a/Solver_interface/doc/Solver_interface/examples.txt +++ b/Solver_interface/doc/Solver_interface/examples.txt @@ -1,5 +1,5 @@ /*! \example Solver_interface/diagonalize_matrix.cpp -\example Solver_interface/eigen_singular_value_decomposition.cpp +\example Solver_interface/singular_value_decomposition.cpp \example Solver_interface/eigen_sparse_solvers.cpp */ diff --git a/Solver_interface/examples/Solver_interface/CMakeLists.txt b/Solver_interface/examples/Solver_interface/CMakeLists.txt index f76d7de6140..90334b642c9 100644 --- a/Solver_interface/examples/Solver_interface/CMakeLists.txt +++ b/Solver_interface/examples/Solver_interface/CMakeLists.txt @@ -24,7 +24,7 @@ if ( CGAL_FOUND ) include_directories (BEFORE "../include") - create_single_source_cgal_program( "eigen_singular_value_decomposition.cpp" ) + create_single_source_cgal_program( "singular_value_decomposition.cpp" ) create_single_source_cgal_program( "diagonalize_matrix.cpp" ) create_single_source_cgal_program( "eigen_sparse_solvers.cpp" ) diff --git a/Solver_interface/examples/Solver_interface/eigen_singular_value_decomposition.cpp b/Solver_interface/examples/Solver_interface/singular_value_decomposition.cpp similarity index 67% rename from Solver_interface/examples/Solver_interface/eigen_singular_value_decomposition.cpp rename to Solver_interface/examples/Solver_interface/singular_value_decomposition.cpp index 439587d59dc..22d829f6f2b 100644 --- a/Solver_interface/examples/Solver_interface/eigen_singular_value_decomposition.cpp +++ b/Solver_interface/examples/Solver_interface/singular_value_decomposition.cpp @@ -1,11 +1,20 @@ #include + +#ifdef CGAL_EIGEN3_ENABLED #include #include #include +typedef CGAL::Eigen_svd Svd; +#else +#ifdef CGAL_LAPACK_ENABLED +#include +typedef CGAL::Lapack_svd Svd; +#endif +#endif -typedef CGAL::Eigen_svd::FT FT; -typedef CGAL::Eigen_svd::Vector Eigen_vector; -typedef CGAL::Eigen_svd::Matrix Eigen_matrix; +typedef Svd::FT FT; +typedef Svd::Vector Eigen_vector; +typedef Svd::Matrix Eigen_matrix; int main(void) { @@ -14,7 +23,6 @@ int main(void) Eigen_vector B (degree); Eigen_matrix M (degree, degree); - // Fill B and M with random numbers for (std::size_t i = 0; i < degree; ++ i) { @@ -24,7 +32,7 @@ int main(void) } // Solve MX=B - std::cout << CGAL::Eigen_svd::solve(M, B) << std::endl; + std::cout << Svd::solve(M, B) << std::endl; // Print result std::cout << "Solution of SVD = [ "; diff --git a/Jet_fitting_3/include/CGAL/Lapack/Linear_algebra_lapack.h b/Solver_interface/include/CGAL/Lapack_svd.h similarity index 100% rename from Jet_fitting_3/include/CGAL/Lapack/Linear_algebra_lapack.h rename to Solver_interface/include/CGAL/Lapack_svd.h