hops
DikinEllipsoidCalculator.hpp
Go to the documentation of this file.
1 #ifndef HOPS_DIKINELLIPSOIDCALCULATOR_HPP
2 #define HOPS_DIKINELLIPSOIDCALCULATOR_HPP
3 
4 #include <Eigen/Cholesky>
5 #include <Eigen/Core>
6 #include <Eigen/Dense>
7 #include "../../FileWriter/CsvWriter.hpp"
8 
9 namespace hops {
10  template<typename MatrixType, typename VectorType>
12  public:
14 
15  std::pair<bool, Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic>>
17 
18  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic>
20 
21  private:
22  MatrixType A;
23  VectorType b;
24  };
25 
26  template<typename MatrixType, typename VectorType>
28  A(std::move(A)), b(std::move(b)) {}
29 
30  template<typename MatrixType, typename VectorType>
31  std::pair<bool, Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic>>
33  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic> dikinEllipsoid =
34  computeDikinEllipsoid(x);
35 
36  Eigen::LLT<Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic>> solver(dikinEllipsoid);
37  bool successful = solver.info() == Eigen::Success;
38  return std::make_pair(successful, solver.matrixL());
39  }
40 
41  template<typename MatrixType, typename VectorType>
42  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic>
44  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, 1> inv_slack = (this->b -
45  this->A * x).cwiseInverse();
46 
47  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic> halfDikin =
48  inv_slack.asDiagonal() * this->A;
49  Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic> dikin =
50  halfDikin.transpose() * halfDikin;
51  return dikin;
52  }
53 }
54 
55 #endif //HOPS_DIKINELLIPSOIDCALCULATOR_HPP
hops::MatrixType
Eigen::MatrixXd MatrixType
Definition: MatrixType.hpp:7
hops::DikinEllipsoidCalculator::computeDikinEllipsoid
Eigen::Matrix< typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic > computeDikinEllipsoid(const VectorType &x)
Definition: DikinEllipsoidCalculator.hpp:43
hops::DikinEllipsoidCalculator::DikinEllipsoidCalculator
DikinEllipsoidCalculator(MatrixType A, VectorType b)
Definition: DikinEllipsoidCalculator.hpp:27
hops::DikinEllipsoidCalculator::computeCholeskyFactorOfDikinEllipsoid
std::pair< bool, Eigen::Matrix< typename MatrixType::Scalar, Eigen::Dynamic, Eigen::Dynamic > > computeCholeskyFactorOfDikinEllipsoid(const VectorType &x)
Definition: DikinEllipsoidCalculator.hpp:32
hops
Definition: CsvReader.hpp:8
hops::DikinEllipsoidCalculator
Definition: DikinEllipsoidCalculator.hpp:11
hops::VectorType
Eigen::VectorXd VectorType
Definition: VectorType.hpp:7