13#ifndef OPTIMIST_TESTSET_BOOTH_HH
14#define OPTIMIST_TESTSET_BOOTH_HH
35 template <
typename Vector>
36 requires TypeTrait<Vector>::IsEigen && (!TypeTrait<Vector>::IsFixed ||
37 TypeTrait<Vector>::Dimension == 2)
41 using Scalar =
typename Vector::Scalar;
53 if constexpr (VectorTrait::IsFixed) {
57 }
else if constexpr (VectorTrait::IsDynamic) {
64 }
else if constexpr (VectorTrait::IsSparse) {
95#define CMD "Optimist::TestSet::Booth::evaluate_impl(...): "
97 if constexpr (VectorTrait::IsFixed) {
98 out << x(0) + 2.0 * x(1) - 7.0, 2.0 * x(0) + x(1) - 5.0;
99 return out.allFinite();
100 }
else if constexpr (VectorTrait::IsDynamic) {
102 out << x(0) + 2.0 * x(1) - 7.0, 2.0 * x(0) + x(1) - 5.0;
103 return out.allFinite();
104 }
else if constexpr (VectorTrait::IsSparse) {
107 out.coeffRef(0) = x.coeff(0) + 2.0 * x.coeff(1) - 7.0;
108 out.coeffRef(1) = 2.0 * x.coeff(0) + x.coeff(1) - 5.0;
109 for (
typename Vector::InnerIterator it(out); it; ++it) {
110 if (!std::isfinite(it.value())) {
131#define CMD "Optimist::TestSet::Booth::first_derivative_impl(...): "
133 if constexpr (VectorTrait::IsFixed) {
134 out << 1.0, 2.0, 2.0, 1.0;
135 }
else if constexpr (VectorTrait::IsDynamic) {
137 out << 1.0, 2.0, 2.0, 1.0;
138 }
else if constexpr (VectorTrait::IsSparse) {
141 std::vector<Eigen::Triplet<Scalar>> triplets;
143 triplets.emplace_back(0, 0, 1.0);
144 triplets.emplace_back(0, 1, 2.0);
145 triplets.emplace_back(1, 0, 2.0);
146 triplets.emplace_back(1, 1, 1.0);
147 out.setFromTriplets(triplets.begin(), triplets.end());
165#define CMD "Optimist::TestSet::Booth::second_derivative_impl(...): "
168 std::for_each(out.begin(), out.end(), [](
auto &m) {
169 if constexpr (VectorTrait::IsFixed) {
172 if constexpr (VectorTrait::IsDynamic) {
176 if constexpr (VectorTrait::IsSparse) {
179 std::vector<Eigen::Triplet<Scalar>> triplets;
181 triplets.emplace_back(0, 0, 0.0);
182 triplets.emplace_back(0, 1, 0.0);
183 triplets.emplace_back(1, 0, 0.0);
184 triplets.emplace_back(1, 1, 0.0);
185 m.setFromTriplets(triplets.begin(), triplets.end());
#define OPTIMIST_ERROR(MSG)
Definition Optimist.hh:38
#define OPTIMIST_BASIC_CONSTANTS(Scalar)
Definition Optimist.hh:70
std::conditional_t< InputTrait::IsEigen||OutputTrait::IsEigen, std::conditional_t< InputTrait::IsSparse||OutputTrait::IsSparse, std::vector< Eigen::SparseMatrix< Scalar > >, std::vector< Eigen::Matrix< Scalar, OutputTrait::Dimension, InputTrait::Dimension > > >, Scalar > SecondDerivative
Definition Function.hh:64
std::vector< Vector > m_guesses
Definition Function.hh:79
std::vector< Vector > m_solutions
Definition Function.hh:77
std::conditional_t< InputTrait::IsEigen||OutputTrait::IsEigen, std::conditional_t< InputTrait::IsSparse||OutputTrait::IsSparse, Eigen::SparseMatrix< Scalar >, Eigen::Matrix< Scalar, OutputTrait::Dimension, InputTrait::Dimension > >, Scalar > FirstDerivative
Definition Function.hh:56
Function()
Definition Function.hh:234
TypeTrait< Vector > VectorTrait
Definition Booth.hh:40
typename Vector::Scalar Scalar
Definition Booth.hh:41
bool first_derivative_impl(const Vector &, FirstDerivative &out) const
Definition Booth.hh:129
Booth()
Definition Booth.hh:50
bool evaluate_impl(const Vector &x, Vector &out) const
Definition Booth.hh:94
bool second_derivative_impl(const Vector &, SecondDerivative &out) const
Definition Booth.hh:163
constexpr std::string name_impl() const
Definition Booth.hh:84
Namespace for the Optimist library.
Definition Optimist.hh:90
Definition Optimist.hh:114