Linear_transformation.h
1 /* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
2  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3  * Author(s): Siargey Kachanovich
4  *
5  * Copyright (C) 2019 Inria
6  *
7  * Modification(s):
8  * - YYYY/MM Author: Description of the modification
9  */
10 
11 #ifndef FUNCTIONS_LINEAR_TRANSFORMATION_H_
12 #define FUNCTIONS_LINEAR_TRANSFORMATION_H_
13 
14 #include <cstdlib> // for std::size_t
15 
16 #include <Eigen/Dense>
17 
18 namespace Gudhi {
19 
20 namespace coxeter_triangulation {
21 
29 template <class Function_>
35  Eigen::VectorXd operator()(const Eigen::VectorXd& p) const {
36  Eigen::VectorXd result = fun_(matrix_.householderQr().solve(p));
37  return result;
38  }
39 
41  std::size_t amb_d() const { return fun_.amb_d(); }
42 
44  std::size_t cod_d() const { return fun_.cod_d(); }
45 
47  Eigen::VectorXd seed() const {
48  Eigen::VectorXd result = fun_.seed();
49  result = matrix_ * result;
50  return result;
51  }
52 
60  Linear_transformation(const Function_& function, const Eigen::MatrixXd& matrix) : fun_(function), matrix_(matrix) {}
61 
62  private:
63  Function_ fun_;
64  Eigen::MatrixXd matrix_;
65 };
66 
79 template <class Function_>
80 Linear_transformation<Function_> make_linear_transformation(const Function_& function, const Eigen::MatrixXd& matrix) {
81  return Linear_transformation<Function_>(function, matrix);
82 }
83 
84 } // namespace coxeter_triangulation
85 
86 } // namespace Gudhi
87 
88 #endif
Linear_transformation< Function_ > make_linear_transformation(const Function_ &function, const Eigen::MatrixXd &matrix)
Static constructor of a linearly transformed function.
Definition: Linear_transformation.h:80
Gudhi namespace.
Definition: SimplicialComplexForAlpha.h:14
Transforms the zero-set of the function by a given linear transformation. The underlying function cor...
Definition: Linear_transformation.h:30
Eigen::VectorXd seed() const
Returns a point on the zero-set.
Definition: Linear_transformation.h:47
Eigen::VectorXd operator()(const Eigen::VectorXd &p) const
Value of the function at a specified point.
Definition: Linear_transformation.h:35
std::size_t amb_d() const
Returns the domain (ambient) dimension.
Definition: Linear_transformation.h:41
std::size_t cod_d() const
Returns the codomain dimension.
Definition: Linear_transformation.h:44
Linear_transformation(const Function_ &function, const Eigen::MatrixXd &matrix)
Constructor of a linearly transformed function.
Definition: Linear_transformation.h:60