3#include "proxsuite-nlp/modelling/spaces/tangent-bundle.hpp"
11 out.head(base_.nx()) = base_.neutral();
17 out.head(base_.nx()) = base_.rand();
18 out.tail(base_.ndx()) = VectorXs::Random(base_.ndx());
25 const ConstVectorRef &dx,
26 VectorRef out)
const {
27 const int nv_ = base_.ndx();
28 base_.integrate(
getBasePoint(x), getBaseTangent(dx), out.head(base_.nx()));
29 out.tail(nv_) = x.tail(nv_) + dx.tail(nv_);
34 const ConstVectorRef &x1,
35 VectorRef out)
const {
36 const int nv_ = base_.ndx();
39 out.tail(nv_) = x1.tail(nv_) - x0.tail(nv_);
43void TangentBundleTpl<Base>::Jintegrate_impl(
const ConstVectorRef &x,
44 const ConstVectorRef &dx,
45 MatrixRef J_,
int arg)
const {
46 const int nv_ = base_.ndx();
49 base_.Jintegrate(
getBasePoint(x), getBaseTangent(dx), getBaseJacobian(J_),
51 J_.bottomRightCorner(nv_, nv_).setIdentity();
55void TangentBundleTpl<Base>::Jdifference_impl(
const ConstVectorRef &x0,
56 const ConstVectorRef &x1,
57 MatrixRef J_,
int arg)
const {
58 const int nv_ = base_.ndx();
64 J_.bottomRightCorner(nv_, nv_).diagonal().array() = Scalar(-1);
65 }
else if (arg == 1) {
66 J_.bottomRightCorner(nv_, nv_).setIdentity();
72 const ConstVectorRef &v,
75 const int nv_ = base_.ndx();
76 base_.JintegrateTransport(
getBasePoint(x), getBaseTangent(v),
77 Jout.topRows(nv_), arg);
82 const ConstVectorRef &x1,
84 VectorRef out)
const {
86 getBasePointWrite(out));
87 out.tail(base_.ndx()) =
88 (Scalar(1.) - u) * getBaseTangent(x0) + u * getBaseTangent(x1);
VectorXs rand() const
Sample a random point on the manifold.
Point::ConstSegmentReturnType getBasePoint(const Point &x) const
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef out) const
Implementation of the manifold retraction operation.
void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Interpolation operation.
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &dx, VectorRef out) const
Operators.
void JintegrateTransport(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Perform the parallel transport operation.
VectorXs neutral() const
Get the neutral element from the manifold (if this makes sense).
int nx() const
Declare implementations.