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
24class SLEIPNIR_DLLEXPORT Gradient {
25 public:
32 Gradient(Variable variable, Variable wrt) noexcept
33 : m_jacobian{std::move(variable), std::move(wrt)} {}
34
42 Gradient(Variable variable, SleipnirMatrixLike auto wrt) noexcept
43 : m_jacobian{VariableMatrix{std::move(variable)}, std::move(wrt)} {}
44
53 VariableMatrix get() const { return m_jacobian.get().T(); }
54
60 const Eigen::SparseVector<double>& value() {
61 m_g = m_jacobian.value();
62
63 return m_g;
64 }
65
66 private:
67 Eigen::SparseVector<double> m_g;
68
69 Jacobian m_jacobian;
70};
71
72} // namespace slp
Definition gradient.hpp:24
const Eigen::SparseVector< double > & value()
Definition gradient.hpp:60
VariableMatrix get() const
Definition gradient.hpp:53
Gradient(Variable variable, SleipnirMatrixLike auto wrt) noexcept
Definition gradient.hpp:42
Gradient(Variable variable, Variable wrt) noexcept
Definition gradient.hpp:32
Definition jacobian.hpp:25
Definition variable_matrix.hpp:29
VariableMatrix T() const
Definition variable_matrix.hpp:934
Definition variable.hpp:40
Definition concepts.hpp:30