Sleipnir C++ API
Loading...
Searching...
No Matches
gradient.hpp
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <utility>
6
7#include <Eigen/SparseCore>
8
9#include "sleipnir/autodiff/jacobian.hpp"
10#include "sleipnir/autodiff/variable.hpp"
11#include "sleipnir/autodiff/variable_matrix.hpp"
12#include "sleipnir/util/concepts.hpp"
13#include "sleipnir/util/symbol_exports.hpp"
14
15namespace slp {
16
26template <typename Scalar>
27class Gradient {
28 public:
37
47
56 VariableMatrix<Scalar> get() const { return m_jacobian.get().T(); }
57
63 const Eigen::SparseVector<Scalar>& value() {
64 m_g = m_jacobian.value().transpose();
65
66 return m_g;
67 }
68
69 private:
70 Eigen::SparseVector<Scalar> m_g;
71
72 Jacobian<Scalar> m_jacobian;
73};
74
75extern template class EXPORT_TEMPLATE_DECLARE(
76 SLEIPNIR_DLLEXPORT) Gradient<double>;
77
78} // namespace slp
Definition gradient.hpp:27
const Eigen::SparseVector< Scalar > & value()
Definition gradient.hpp:63
Gradient(Variable< Scalar > variable, SleipnirMatrixLike< Scalar > auto wrt)
Definition gradient.hpp:45
VariableMatrix< Scalar > get() const
Definition gradient.hpp:56
Gradient(Variable< Scalar > variable, Variable< Scalar > wrt)
Definition gradient.hpp:35
Definition intrusive_shared_ptr.hpp:29
constexpr T * get() const noexcept
Definition intrusive_shared_ptr.hpp:204
Definition variable_matrix.hpp:35
Definition concepts.hpp:33