103 if constexpr (VectorTrait::IsSparse) {
104 xx_0 = x.coeff(0) * x.coeff(0);
105 xx_1 = x.coeff(1) * x.coeff(1);
110 Scalar xx_0_m_xx_1{xx_0 - xx_1};
111 Scalar xx_0_p_xx_1{xx_0 + xx_1};
112 out = 0.5 + (std::sin(xx_0_m_xx_1) * std::sin(xx_0_m_xx_1) - 0.5) /
113 ((1.0 + 0.001 * (xx_0_p_xx_1)) *
114 (1.0 + 0.001 * (xx_0_p_xx_1)));
115 return std::isfinite(out);
126 if constexpr (VectorTrait::IsSparse) {
127 xx_0 = x.coeff(0) * x.coeff(0);
128 xx_1 = x.coeff(1) * x.coeff(1);
133 Scalar xx_0_m_xx_1{xx_0 - xx_1};
134 Scalar xx_0_p_xx_1{xx_0 + xx_1};
136 static_cast<Scalar>(0.001) * xx_0_p_xx_1};
137 Scalar tmp2{tmp * tmp}, tmp3{tmp2 * tmp};
138 if constexpr (VectorTrait::IsFixed) {
139 out << 2.0 * x(0) * std::sin(xx_0_m_xx_1) / tmp2 -
140 2.0 * 0.001 * x(0) * std::cos(xx_0_m_xx_1) / tmp3,
141 -2.0 * x(1) * std::sin(xx_0_m_xx_1) / tmp2 +
142 2.0 * 0.001 * x(1) * std::cos(xx_0_m_xx_1) / tmp3;
143 }
else if constexpr (VectorTrait::IsDynamic) {
145 out << 2.0 * x(0) * std::sin(xx_0_m_xx_1) / tmp2 -
146 2.0 * 0.001 * x(0) * std::cos(xx_0_m_xx_1) / tmp3,
147 -2.0 * x(1) * std::sin(xx_0_m_xx_1) / tmp2 +
148 2.0 * 0.001 * x(1) * std::cos(xx_0_m_xx_1) / tmp3;
149 }
else if constexpr (VectorTrait::IsSparse) {
152 out.coeffRef(0) = +2.0 * x(0) * std::sin(xx_0_m_xx_1) / tmp2 -
153 2.0 * 0.001 * x(0) * std::cos(xx_0_m_xx_1) / tmp3;
154 out.coeffRef(1) = -2.0 * x(1) * std::sin(xx_0_m_xx_1) / tmp2 +
155 2.0 * 0.001 * x(1) * std::cos(xx_0_m_xx_1) / tmp3;
158 return out.allFinite();
170 if constexpr (VectorTrait::IsSparse) {
171 xx_0 = x.coeff(0) * x.coeff(0);
172 xx_1 = x.coeff(1) * x.coeff(1);
177 Scalar xx_0_m_xx_1{xx_0 - xx_1};
178 Scalar xx_0_p_xx_1{xx_0 + xx_1};
180 static_cast<Scalar>(0.001) * (xx_0_p_xx_1)};
181 Scalar tmp2{tmp * tmp}, tmp3{tmp2 * tmp}, tmp4{tmp2 * tmp2};
182 if constexpr (VectorTrait::IsFixed) {
184 out(0, 0) = 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
185 4.0 * x(0) * x(0) * std::sin(xx_0_m_xx_1) / tmp3 +
186 6.0 * 0.001 * x(0) * x(0) * std::cos(xx_0_m_xx_1) / tmp4;
187 out(0, 1) = -2.0 * x(0) * x(1) * std::sin(xx_0_m_xx_1) / tmp3 +
188 6.0 * 0.001 * x(0) * x(1) * std::cos(xx_0_m_xx_1) / tmp4;
189 out(1, 0) = out(0, 1);
190 out(1, 1) = 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
191 4.0 * x(1) * x(1) * std::sin(xx_0_m_xx_1) / tmp3 +
192 6.0 * 0.001 * x(1) * x(1) * std::cos(xx_0_m_xx_1) / tmp4;
193 }
else if constexpr (VectorTrait::IsDynamic) {
195 out(0, 0) = 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
196 4.0 * x(0) * x(0) * std::sin(xx_0_m_xx_1) / tmp3 +
197 6.0 * 0.001 * x(0) * x(0) * std::cos(xx_0_m_xx_1) / tmp4;
198 out(0, 1) = -2.0 * x(0) * x(1) * std::sin(xx_0_m_xx_1) / tmp3 +
199 6.0 * 0.001 * x(0) * x(1) * std::cos(xx_0_m_xx_1) / tmp4;
200 out(1, 0) = out(0, 1);
201 out(1, 1) = 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
202 4.0 * x(1) * x(1) * std::sin(xx_0_m_xx_1) / tmp3 +
203 6.0 * 0.001 * x(1) * x(1) * std::cos(xx_0_m_xx_1) / tmp4;
204 }
else if constexpr (VectorTrait::IsSparse) {
208 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
209 4.0 * x(0) * x(0) * std::sin(xx_0_m_xx_1) / tmp3 +
210 6.0 * 0.001 * x(0) * x(0) * std::cos(xx_0_m_xx_1) / tmp4;
212 -2.0 * x.coeff(0) * x.coeff(1) * std::sin(xx_0_m_xx_1) / tmp3 +
213 6.0 * 0.001 * x.coeff(0) * x.coeff(1) * std::cos(xx_0_m_xx_1) /
215 out.coeffRef(1, 0) = out.coeff(0, 1);
217 2.0 * std::sin(xx_0_m_xx_1) / tmp2 -
218 4.0 * x.coeff(1) * x.coeff(1) * std::sin(xx_0_m_xx_1) / tmp3 +
219 6.0 * 0.001 * x.coeff(1) * x.coeff(1) * std::cos(xx_0_m_xx_1) /
223 return out.allFinite();