Loading [MathJax]/jax/input/TeX/config.js
Sleipnir C++ API
All Classes Functions Variables Typedefs Friends Pages Concepts
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/small_vector.hpp"
14#include "sleipnir/util/solve_profiler.hpp"
15#include "sleipnir/util/symbol_exports.hpp"
16
17namespace slp {
18
26class SLEIPNIR_DLLEXPORT Gradient {
27 public:
34 Gradient(Variable variable, Variable wrt) noexcept
35 : m_jacobian{std::move(variable), std::move(wrt)} {}
36
44 Gradient(Variable variable, SleipnirMatrixLike auto wrt) noexcept
45 : m_jacobian{VariableMatrix{std::move(variable)}, std::move(wrt)} {}
46
55 VariableMatrix get() const { return m_jacobian.get().T(); }
56
62 const Eigen::SparseVector<double>& value() {
63 m_g = m_jacobian.value();
64
65 return m_g;
66 }
67
73 const small_vector<SolveProfiler>& get_profilers() const {
74 return m_jacobian.get_profilers();
75 }
76
77 private:
78 Eigen::SparseVector<double> m_g;
79
80 Jacobian m_jacobian;
81};
82
83} // namespace slp
Definition gradient.hpp:26
const Eigen::SparseVector< double > & value()
Definition gradient.hpp:62
VariableMatrix get() const
Definition gradient.hpp:55
const small_vector< SolveProfiler > & get_profilers() const
Definition gradient.hpp:73
Gradient(Variable variable, SleipnirMatrixLike auto wrt) noexcept
Definition gradient.hpp:44
Gradient(Variable variable, Variable wrt) noexcept
Definition gradient.hpp:34
Definition jacobian.hpp:27
Definition variable_matrix.hpp:29
VariableMatrix T() const
Definition variable_matrix.hpp:890
Definition variable.hpp:41
Definition concepts.hpp:23