Files
eigen/unsupported/doc/examples/AutoDiffJacobianExample.cpp
2026-07-07 16:32:03 -07:00

33 lines
813 B
C++

// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0
#include <Eigen/Dense>
#include <cmath>
#include <iostream>
#include <unsupported/Eigen/AutoDiff>
struct ExampleFunctor {
typedef Eigen::Vector2d InputType;
typedef Eigen::Vector2d ValueType;
template <typename Scalar>
void operator()(const Eigen::Matrix<Scalar, 2, 1>& x, Eigen::Matrix<Scalar, 2, 1>* y) const {
using std::sin;
(*y)[0] = x[0] * x[0] + x[1];
(*y)[1] = x[0] * sin(x[1]);
}
};
int main() {
Eigen::AutoDiffJacobian<ExampleFunctor> functor;
Eigen::Vector2d x;
Eigen::Vector2d y;
Eigen::AutoDiffJacobian<ExampleFunctor>::JacobianType jacobian;
x << 2.0, 0.5;
functor(x, &y, &jacobian);
std::cout << "value:\n" << y << "\n\n";
std::cout << "jacobian:\n" << jacobian << "\n";
}