finite_differences.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
26 
27 namespace corbo {
28 
29 void ForwardDifferences::computeJacobian(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::Ref<Eigen::VectorXd>)> eval_fun,
31 {
32  ForwardDifferences::jacobian(inc_fun, eval_fun, jacobian);
33 }
34 
35 void ForwardDifferences::computeJacobian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun,
37 {
38  ForwardDifferences::jacobian(inc_fun, eval_fun, jacobian);
39 }
40 
41 void ForwardDifferences::computeHessian(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::Ref<Eigen::VectorXd>)> eval_fun,
42  int dim_f, Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
43 {
44  ForwardDifferences::hessian(inc_fun, eval_fun, dim_f, hessian, multipliers);
45 }
46 
47 void ForwardDifferences::computeHessian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun, int dim_f,
48  Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
49 {
50  ForwardDifferences::hessian(inc_fun, eval_fun, dim_f, hessian, multipliers);
51 }
52 
53 void ForwardDifferences::computeJacobianAndHessian(std::function<void(int, const double&)> inc_fun,
55  Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
56 {
57  ForwardDifferences::jacobianHessian(inc_fun, eval_fun, jacobian, hessian, multipliers);
58 }
59 
60 void ForwardDifferences::computeJacobianAndHessian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun,
62  const double* multipliers)
63 {
64  ForwardDifferences::jacobianHessian(inc_fun, eval_fun, jacobian, hessian, multipliers);
65 }
66 
67 void CentralDifferences::computeJacobian(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::Ref<Eigen::VectorXd>)> eval_fun,
69 {
70  CentralDifferences::jacobian(inc_fun, eval_fun, jacobian);
71 }
72 
73 void CentralDifferences::computeJacobian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun,
75 {
76  CentralDifferences::jacobian(inc_fun, eval_fun, jacobian);
77 }
78 
79 void CentralDifferences::computeHessian(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::Ref<Eigen::VectorXd>)> eval_fun,
80  int dim_f, Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
81 {
82  CentralDifferences::hessian(inc_fun, eval_fun, dim_f, hessian, multipliers);
83 }
84 
85 void CentralDifferences::computeHessian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun, int dim_f,
86  Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
87 {
88  CentralDifferences::hessian(inc_fun, eval_fun, dim_f, hessian, multipliers);
89 }
90 
91 void CentralDifferences::computeJacobianAndHessian(std::function<void(int, const double&)> inc_fun,
93  Eigen::Ref<Eigen::MatrixXd> hessian, const double* multipliers)
94 {
95  CentralDifferences::jacobianHessian(inc_fun, eval_fun, jacobian, hessian, multipliers);
96 }
97 
98 void CentralDifferences::computeJacobianAndHessian2(std::function<void(int, const double&)> inc_fun, std::function<void(Eigen::VectorXd&)> eval_fun,
100  const double* multipliers)
101 {
102  CentralDifferences::jacobianHessian(inc_fun, eval_fun, jacobian, hessian, multipliers);
103 }
104 
105 } // namespace corbo
void jacobianHessian(IncFun inc_fun, EvalFun eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
void computeJacobian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian) override
Compute Jacobian of a desired function.
static void jacobian(IncFun inc_fun, EvalFun eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian)
Compute Jacobian of a desired function.
static void jacobian(IncFun inc_fun, EvalFun eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian)
Compute Jacobian of a desired function.
void computeJacobianAndHessian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Jacobian and Hessian of a desired function (overload which accepts a slightly different callb...
void computeJacobian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian) override
Compute Jacobian of a desired function (overload which accepts a slightly different callback function...
void computeJacobianAndHessian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Jacobian and Hessian of a desired function (overload which accepts a slightly different callb...
void computeJacobian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian) override
Compute Jacobian of a desired function.
void computeHessian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Hessian of a desired function (overload which accepts a slightly different callback function)...
void computeJacobianAndHessian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Jacobian and Hessian of a desired function.
void jacobianHessian(IncFun inc_fun, EvalFun eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
Compute Jacobian and Hessian of a desired function.
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
void computeHessian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Hessian of a desired function.
void computeHessian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Hessian of a desired function.
static void hessian(IncFun inc_fun, EvalFun eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
void computeJacobian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian) override
Compute Jacobian of a desired function (overload which accepts a slightly different callback function...
void computeHessian2(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::VectorXd &)> eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Hessian of a desired function (overload which accepts a slightly different callback function)...
void computeJacobianAndHessian(std::function< void(int, const double &)> inc_fun, std::function< void(Eigen::Ref< Eigen::VectorXd >)> eval_fun, Eigen::Ref< Eigen::MatrixXd > jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr) override
Compute Jacobian and Hessian of a desired function.
static void hessian(IncFun inc_fun, EvalFun eval_fun, int dim_f, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
Compute Hessian of a desired function.


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:06:51