13 #ifndef nls_test_suite_hpp
14 #define nls_test_suite_hpp
23 template<
typename data__>
29 template<
typename data__>
35 template<
typename data__>
44 template<
typename data__>
53 template<
typename data__>
56 Eigen::Matrix<data__, 3, 1> rtn_vec;
58 rtn_vec(0,0)=std::exp(x(0));
59 rtn_vec(1,0)=std::exp(x(1));
60 rtn_vec(2,0)=std::exp(x(2));
65 template<
typename data__>
68 Eigen::Matrix<data__, 3, 3> rtn_mat;
70 rtn_mat(0,0)=std::exp(x(0));
74 rtn_mat(1,1)=std::exp(x(1));
78 rtn_mat(2,2)=std::exp(x(2));
83 template<
typename data__>
86 Eigen::Matrix<data__, 3, 1>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
92 template<
typename data__>
95 Eigen::Matrix<data__, 3, 3>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
101 template<
typename data__>
104 Eigen::Matrix<data__, 3, 1> rtn_vec;
106 rtn_vec(0,0)= 3*x(0)+2*x(1)+4*x(2);
107 rtn_vec(1,0)= 1*x(0)-4*x(1)+2*x(2);
108 rtn_vec(2,0)=-2*x(0)+3*x(1)-1*x(2);
113 template<
typename data__>
116 Eigen::Matrix<data__, 3, 3> rtn_mat;
131 template<
typename data__>
134 Eigen::Matrix<data__, 3, 1>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
140 template<
typename data__>
143 Eigen::Matrix<data__, 3, 3>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
149 template<
typename data__>
152 Eigen::Matrix<data__, 3, 1> rtn_vec;
154 rtn_vec(0,0)=std::exp(x(0))*cos(x(1));
155 rtn_vec(1,0)=x(0)*x(0)*std::log(x(1));
161 template<
typename data__>
164 Eigen::Matrix<data__, 3, 3> rtn_mat;
166 rtn_mat(0,0)=std::exp(x(0))*std::cos(x(1));
167 rtn_mat(0,1)=-std::exp(x(0))*std::sin(x(1));
169 rtn_mat(1,0)=2*x(0)*std::log(x(1));
170 rtn_mat(1,1)=x(0)*x(0)/x(1);
179 template<
typename data__>
182 Eigen::Matrix<data__, 3, 1>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
188 template<
typename data__>
191 Eigen::Matrix<data__, 3, 3>
operator()(
const Eigen::Matrix<data__, 3, 1> &x)
const
197 template<
typename data__>
244 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon())), rhs(0.5), root(0);
257 stat = bm.
find_root(root, std::ptr_fun(my_function<data__>), rhs);
259 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
268 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
273 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon())), rhs(0.5), root(0);
282 stat = nrm.
find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
284 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
287 stat = nrm.
find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
292 stat = nrm.
find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
302 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
307 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon())), rhs(0.5), root(0);
320 stat = sm.
find_root(root, std::ptr_fun(my_function<data__>), rhs);
322 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
331 TEST_ASSERT_DELTA(root, std::acos(rhs), 2*delta);
337 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon())), rhs(0.5), root;
342 nrcm.set_max_iteration(200);
348 stat = nrcm.find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
349 TEST_ASSERT(stat==nrcm_type::converged);
352 nrcm.set_max_iteration(2);
353 stat = nrcm.find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
354 TEST_ASSERT(stat==nrcm_type::max_iteration);
356 nrcm.set_max_iteration(100);
359 stat = nrcm.find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs);
360 TEST_ASSERT(stat==nrcm_type::hit_constraint);
365 stat = nrcm.find_root(root, std::ptr_fun(my_function<data__>), std::ptr_fun(my_function_derivative<data__>), rhs2);
366 TEST_ASSERT(stat==nrcm_type::converged);
369 nrcm.set_absolute_tolerance(delta);
370 nrcm.set_max_iteration(200);
376 TEST_ASSERT(stat==nrcm_type::converged);
384 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon()));
386 typename nr_system::solution_matrix rhs, root, x0, x_exact;
389 nrm.set_absolute_tolerance(delta);
390 nrm.set_max_iteration(200);
391 nrm.set_norm_type(nr_system::max_norm);
396 rhs = my_decoupled_system_function<data__>(x_exact);
398 nrm.set_initial_guess(x0);
401 stat = nrm.find_root(root, std::ptr_fun(my_decoupled_system_function<data__>), std::ptr_fun(my_decoupled_system_function_derivative<data__>), rhs);
402 TEST_ASSERT(stat==nr_system::converged);
403 TEST_ASSERT(nrm.get_iteration_count()<nrm.get_max_iteration());
404 TEST_ASSERT((x_exact-root).norm()<=2*delta);
406 nrm.set_max_iteration(2);
407 stat = nrm.find_root(root, std::ptr_fun(my_decoupled_system_function<data__>), std::ptr_fun(my_decoupled_system_function_derivative<data__>), rhs);
408 TEST_ASSERT(stat==nr_system::max_iteration);
411 nrm.set_absolute_tolerance(delta);
412 nrm.set_max_iteration(200);
413 nrm.set_initial_guess(x0);
416 TEST_ASSERT(stat==nr_system::converged);
417 TEST_ASSERT(nrm.get_iteration_count()<nrm.get_max_iteration());
418 TEST_ASSERT((x_exact-root).norm()<=2*delta);
423 rhs = my_coupled_linear_system_function<data__>(x_exact);
425 nrm.set_initial_guess(x0);
428 stat = nrm.find_root(root, std::ptr_fun(my_coupled_linear_system_function<data__>), std::ptr_fun(my_coupled_linear_system_function_derivative<data__>), rhs);
429 TEST_ASSERT(stat==nr_system::converged);
430 TEST_ASSERT(nrm.get_iteration_count()<2);
431 TEST_ASSERT((x_exact-root).norm()<delta);
434 nrm.set_absolute_tolerance(delta);
435 nrm.set_max_iteration(200);
436 nrm.set_initial_guess(x0);
439 TEST_ASSERT(stat==nr_system::converged);
440 TEST_ASSERT(nrm.get_iteration_count()<2);
441 TEST_ASSERT((x_exact-root).norm()<delta);
446 rhs = my_coupled_nonlinear_system_function<data__>(x_exact);
448 nrm.set_initial_guess(x0);
451 stat = nrm.find_root(root, std::ptr_fun(my_coupled_nonlinear_system_function<data__>), std::ptr_fun(my_coupled_nonlinear_system_function_derivative<data__>), rhs);
452 TEST_ASSERT(stat==nr_system::converged);
453 TEST_ASSERT(nrm.get_iteration_count()<nrm.get_max_iteration());
454 TEST_ASSERT((x_exact-root).norm()<delta);
457 nrm.set_absolute_tolerance(delta);
458 nrm.set_max_iteration(200);
459 nrm.set_initial_guess(x0);
462 TEST_ASSERT(stat==nr_system::converged);
463 TEST_ASSERT(nrm.get_iteration_count()<nrm.get_max_iteration());
464 TEST_ASSERT((x_exact-root).norm()<delta);
471 data__ delta(std::sqrt(std::numeric_limits<data__>::epsilon()));
473 typename nrcs_type::solution_matrix rhs, root, x0, x_exact;
476 nrcm.set_absolute_tolerance(delta);
477 nrcm.set_max_iteration(200);
478 nrcm.set_norm_type(nrcs_type::max_norm);
479 nrcm.set_lower_condition(0, 0, nrcs_type::NRC_EXCLUSIVE);
480 nrcm.set_upper_condition(0, 4, nrcs_type::NRC_EXCLUSIVE);
485 rhs = my_decoupled_system_function<data__>(x_exact);
487 nrcm.set_initial_guess(x0);
490 stat = nrcm.find_root(root, std::ptr_fun(my_decoupled_system_function<data__>), std::ptr_fun(my_decoupled_system_function_derivative<data__>), rhs);
491 TEST_ASSERT(stat==nrcs_type::converged);
492 TEST_ASSERT(nrcm.get_iteration_count()<nrcm.get_max_iteration());
493 TEST_ASSERT((x_exact-root).norm()<=2*delta);
495 nrcm.set_max_iteration(2);
496 stat = nrcm.find_root(root, std::ptr_fun(my_decoupled_system_function<data__>), std::ptr_fun(my_decoupled_system_function_derivative<data__>), rhs);
497 TEST_ASSERT(stat==nrcs_type::max_iteration);
500 nrcm.set_absolute_tolerance(delta);
501 nrcm.set_max_iteration(200);
502 nrcm.set_initial_guess(x0);
505 TEST_ASSERT(stat==nrcs_type::converged);
506 TEST_ASSERT(nrcm.get_iteration_count()<nrcm.get_max_iteration());
507 TEST_ASSERT((x_exact-root).norm()<=2*delta);
512 rhs = my_coupled_linear_system_function<data__>(x_exact);
514 nrcm.set_initial_guess(x0);
517 stat = nrcm.find_root(root, std::ptr_fun(my_coupled_linear_system_function<data__>), std::ptr_fun(my_coupled_linear_system_function_derivative<data__>), rhs);
518 TEST_ASSERT(stat==nrcs_type::converged);
519 TEST_ASSERT(nrcm.get_iteration_count()<2);
520 TEST_ASSERT((x_exact-root).norm()<delta);
523 nrcm.set_absolute_tolerance(delta);
524 nrcm.set_max_iteration(200);
525 nrcm.set_initial_guess(x0);
528 TEST_ASSERT(stat==nrcs_type::converged);
529 TEST_ASSERT(nrcm.get_iteration_count()<2);
530 TEST_ASSERT((x_exact-root).norm()<delta);
535 rhs = my_coupled_nonlinear_system_function<data__>(x_exact);
537 nrcm.set_initial_guess(x0);
540 stat = nrcm.find_root(root, std::ptr_fun(my_coupled_nonlinear_system_function<data__>), std::ptr_fun(my_coupled_nonlinear_system_function_derivative<data__>), rhs);
541 TEST_ASSERT(stat==nrcs_type::converged);
542 TEST_ASSERT(nrcm.get_iteration_count()<nrcm.get_max_iteration());
543 TEST_ASSERT((x_exact-root).norm()<delta);
546 nrcm.set_absolute_tolerance(delta);
547 nrcm.set_max_iteration(200);
548 nrcm.set_initial_guess(x0);
551 TEST_ASSERT(stat==nrcs_type::converged);
552 TEST_ASSERT(nrcm.get_iteration_count()<nrcm.get_max_iteration());
553 TEST_ASSERT((x_exact-root).norm()<delta);
void set_bounds(const data__ &xl, const data__ &xh)
Definition: bisection_method.hpp:68
Definition: nls_test_suite.hpp:36
Definition: secant_method.hpp:27
nls_test_suite()
Definition: nls_test_suite.hpp:232
int find_root(data__ &root, const f__ &fun, const data__ &f0) const
Definition: secant_method.hpp:59
Eigen::Matrix< data__, 3, 3 > my_coupled_linear_system_function_derivative(const Eigen::Matrix< data__, 3, 1 > &)
Definition: nls_test_suite.hpp:114
void newton_raphson_method_test()
Definition: nls_test_suite.hpp:271
Eigen::Matrix< data__, 3, 3 > my_coupled_nonlinear_system_function_derivative(const Eigen::Matrix< data__, 3, 1 > &x)
Definition: nls_test_suite.hpp:162
Definition: newton_raphson_method.hpp:27
~nls_test_suite()
Definition: nls_test_suite.hpp:237
void secant_method_test()
Definition: nls_test_suite.hpp:305
Eigen::Matrix< data__, 3, 1 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:182
void AddTests(const long double &)
Definition: nls_test_suite.hpp:221
Definition: nls_test_suite.hpp:93
int find_root(data__ &root, const f__ &fun, const data__ &f0) const
Definition: bisection_method.hpp:81
Eigen::Matrix< data__, 3, 1 > my_coupled_nonlinear_system_function(const Eigen::Matrix< data__, 3, 1 > &x)
Definition: nls_test_suite.hpp:150
void newton_raphson_constrained_system_method_test()
Definition: nls_test_suite.hpp:467
void newton_raphson_constrained_method_test()
Definition: nls_test_suite.hpp:334
Definition: newton_raphson_constrained_system_method.hpp:30
Eigen::Matrix< data__, 3, 1 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:86
Definition: nls_test_suite.hpp:141
data__ operator()(const data__ &x) const
Definition: nls_test_suite.hpp:38
Definition: nls_test_suite.hpp:189
Eigen::Matrix< data__, 3, 3 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:95
void AddTests(const double &)
Definition: nls_test_suite.hpp:211
Definition: nls_test_suite.hpp:198
Definition: newton_raphson_constrained_method.hpp:30
void set_max_iteration(const iteration_type &mi)
Definition: iterative_root_base.hpp:207
void newton_raphson_system_method_test()
Definition: nls_test_suite.hpp:380
data__ my_function(const data__ &x)
Definition: nls_test_suite.hpp:24
Definition: nls_test_suite.hpp:45
data__ my_function_derivative(const data__ &x)
Definition: nls_test_suite.hpp:30
Eigen::Matrix< data__, 3, 1 > my_coupled_linear_system_function(const Eigen::Matrix< data__, 3, 1 > &x)
Definition: nls_test_suite.hpp:102
void set_initial_guesses(const data__ &xg1, const data__ &xg2)
Definition: secant_method.hpp:46
void bisection_method_test()
Definition: nls_test_suite.hpp:242
void set_absolute_tolerance(const tolerance_type &abs_tol)
Definition: iterative_root_base.hpp:194
Definition: nls_test_suite.hpp:180
Definition: nls_test_suite.hpp:84
Definition: bisection_method.hpp:29
Eigen::Matrix< data__, 3, 1 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:134
int find_root(data_type &root, const f__ &fun, const g__ &fprime, const data_type &f0) const
Definition: newton_raphson_method.hpp:59
Definition: nls_test_suite.hpp:132
Eigen::Matrix< data__, 3, 3 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:143
Eigen::Matrix< data__, 3, 3 > my_decoupled_system_function_derivative(const Eigen::Matrix< data__, 3, 1 > &x)
Definition: nls_test_suite.hpp:66
data__ operator()(const data__ &x) const
Definition: nls_test_suite.hpp:47
Definition: newton_raphson_system_method.hpp:27
void AddTests(const float &)
Definition: nls_test_suite.hpp:201
void set_initial_guess(const data_type &xg)
Definition: newton_raphson_method.hpp:48
Eigen::Matrix< data__, 3, 1 > my_decoupled_system_function(const Eigen::Matrix< data__, 3, 1 > &x)
Definition: nls_test_suite.hpp:54
Eigen::Matrix< data__, 3, 3 > operator()(const Eigen::Matrix< data__, 3, 1 > &x) const
Definition: nls_test_suite.hpp:191