Loading...
Searching...
No Matches
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
18namespace Gudhi {
19
20namespace coxeter_triangulation {
21
29template <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
79template <class Function_>
80Linear_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
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