13#ifndef OPTIMIST_TESTSET_ROSENBROCK_HH
14#define OPTIMIST_TESTSET_ROSENBROCK_HH
41 template <
typename Vector, Integer N>
42 requires(N % 2 == 0) && TypeTrait<Vector>::IsEigen &&
43 (!TypeTrait<Vector>::IsFixed || TypeTrait<Vector>::Dimension == N)
47 using Scalar =
typename Vector::Scalar;
61 if constexpr (VectorTrait::IsFixed) {
63 for (
Integer i{0}; i < N; i += 2) {
67 }
else if constexpr (VectorTrait::IsDynamic) {
71 for (
Integer i{0}; i < N; i += 2) {
75 }
else if constexpr (VectorTrait::IsSparse) {
78 for (
Integer i{0}; i < N; ++i) {
83 for (
Integer i{0}; i < N; i += 2) {
95 return "Rosenbrock<" + std::to_string(N) +
">";
106 "Optimist::TestSet::Rosenbrock<" + std::to_string(N) + \
107 ">::evaluate_impl(...): "
109 if constexpr (VectorTrait::IsFixed) {
110 for (
Integer i{0}; i < N; i += 2) {
111 out(i) = 10.0 * (x(i + 1) - x(i) * x(i));
112 out(i + 1) = 1.0 - x(i);
114 return out.allFinite();
115 }
else if constexpr (VectorTrait::IsDynamic) {
117 for (
Integer i{0}; i < N; i += 2) {
118 out(i) = 10.0 * (x(i + 1) - x(i) * x(i));
119 out(i + 1) = 1.0 - x(i);
121 return out.allFinite();
122 }
else if constexpr (VectorTrait::IsSparse) {
125 for (
Integer i{0}; i < N; i += 2) {
126 out.coeffRef(i) = 10.0 * (x.coeff(i + 1) - x.coeff(i) * x.coeff(i));
127 out.coeffRef(i + 1) = 1.0 - x.coeff(i);
129 for (
typename Vector::InnerIterator it(out); it; ++it) {
130 if (!std::isfinite(it.value())) {
151 "Optimist::TestSet::Rosenbrock<" + std::to_string(N) + \
152 ">::first_derivative_impl(...): "
154 if constexpr (VectorTrait::IsFixed) {
156 for (
Integer i{0}; i < N; i += 2) {
157 out(i, i) = -20.0 * x(i);
158 out(i, i + 1) = 10.0;
159 out(i + 1, i) = -1.0;
161 return out.allFinite();
162 }
else if constexpr (VectorTrait::IsDynamic) {
165 for (
Integer i{0}; i < N; i += 2) {
166 out(i, i) = -20.0 * x(i);
167 out(i, i + 1) = 10.0;
168 out(i + 1, i) = -1.0;
170 return out.allFinite();
171 }
else if constexpr (VectorTrait::IsSparse) {
174 for (
Integer i{0}; i < N; i += 2) {
175 out.coeffRef(i, i) = -20.0 * x.coeff(i);
176 out.coeffRef(i, i + 1) = 10.0;
177 out.coeffRef(i + 1, i) = -1.0;
179 for (
Integer k{0}; k < out.outerSize(); ++k) {
180 for (
typename FirstDerivative::InnerIterator it(out, k); it; ++it) {
181 if (!std::isfinite(it.value())) {
204 "Optimist::TestSet::Rosenbrock<" + std::to_string(N) + \
205 ">::second_derivative_impl(...): "
208 std::for_each(out.begin(), out.end(), [](
auto &m) {
209 if constexpr (VectorTrait::IsFixed) {
211 for (Integer j{0}; j < N; j += 2) {
214 }
else if constexpr (VectorTrait::IsDynamic) {
217 for (
Integer j{0}; j < N; j += 2) {
220 }
else if constexpr (VectorTrait::IsSparse) {
223 for (
Integer j{0}; j < N; j += 2) {
224 m.coeffRef(j, j) = -20.0;
241 template <
typename Vector>
248 template <
typename Vector>
255 template <
typename Vector>
262 template <
typename Vector>
269 template <
typename Vector>
#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
Class container for the extended Rosenbrock function.
Definition Rosenbrock.hh:44
TypeTrait< Vector > VectorTrait
Definition Rosenbrock.hh:46
constexpr std::string name_impl() const
Definition Rosenbrock.hh:94
bool second_derivative_impl(const Vector &, SecondDerivative &out) const
Definition Rosenbrock.hh:201
Rosenbrock()
Definition Rosenbrock.hh:58
bool evaluate_impl(const Vector &x, Vector &out) const
Definition Rosenbrock.hh:104
bool first_derivative_impl(const Vector &x, FirstDerivative &out) const
Definition Rosenbrock.hh:149
typename Vector::Scalar Scalar
Definition Rosenbrock.hh:47
Rosenbrock< Vector, 6 > Rosenbrock6
Class container for the 6D Rosenbrock function.
Definition Rosenbrock.hh:256
Rosenbrock< Vector, 2 > Rosenbrock2
Class container for the 2D Rosenbrock function.
Definition Rosenbrock.hh:242
Rosenbrock< Vector, 10 > Rosenbrock10
Class container for the 10D Rosenbrock function.
Definition Rosenbrock.hh:270
Rosenbrock< Vector, 8 > Rosenbrock8
Class container for the 8D Rosenbrock function.
Definition Rosenbrock.hh:263
Rosenbrock< Vector, 4 > Rosenbrock4
Class container for the 4D Rosenbrock function.
Definition Rosenbrock.hh:249
Namespace for the Optimist library.
Definition Optimist.hh:90
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:98
Definition Optimist.hh:114