nmpc_fmpc
MathUtils.h
Go to the documentation of this file.
1 /* Author: Masaki Murooka */
2 
3 #pragma once
4 
5 #include <Eigen/Dense>
6 
7 namespace nmpc_fmpc
8 {
16 template<int InputDim, int OutputDim>
17 double l1NormDirectionalDeriv(const Eigen::Matrix<double, OutputDim, 1> & func,
18  const Eigen::Matrix<double, OutputDim, InputDim> & jac,
19  const Eigen::Matrix<double, InputDim, 1> & dir)
20 {
21  double deriv = 0.0;
22  for(int i = 0; i < func.size(); i++)
23  {
24  if(func(i) > 0)
25  {
26  deriv += jac.row(i).transpose().dot(dir);
27  }
28  else if(func(i) < 0)
29  {
30  deriv += -1 * jac.row(i).transpose().dot(dir);
31  }
32  else
33  {
34  deriv += std::abs(jac.row(i).transpose().dot(dir));
35  }
36  }
37  return deriv;
38 }
39 } // namespace nmpc_fmpc
nmpc_fmpc::l1NormDirectionalDeriv
double l1NormDirectionalDeriv(const Eigen::Matrix< double, OutputDim, 1 > &func, const Eigen::Matrix< double, OutputDim, InputDim > &jac, const Eigen::Matrix< double, InputDim, 1 > &dir)
Compute the directional derivative of the L1-norm of the function.
Definition: MathUtils.h:17
nmpc_fmpc
Definition: FmpcProblem.h:7