W jednym wymiarze mamy dwa rodzaje algorytmów szukania rozwiązań:
#include <gsl/gsl_roots.h> // Inicjalizacja solvera. const gsl_root_fsolver_type *T; gsl_root_fsolver *s; // T = gsl_root_fsolver_bisection; // T = gsl_root_fsolver_falsepos; T = gsl_root_fsolver_brent; s = gsl_root_fsolver_alloc (T); // Nazwę solvera zwraca funkcja gsl_root_fsolver_name(s). // Trzeba przygotować funkcję i przedział. int status; double x_lower, x_upper; double epsabs, epsrel; gsl_function F; gsl_root_fsolver_set (s, &F, x_lower, x_upper); // Dalej biegną iteracje, w czasie których możemy pobierać // rozwiązanie tymczasowe i tymczasowe granice przedziału. // Warunek zakończenia to za dużo iteracji lub osiągnięta dokładność // |a - b| < epsabs + epsrel min(|a|,|b|). // Funkcja testująca zwraca GSL_SUCCESS, jeżeli warunek został osiągnięty. status = gsl_root_test_interval (x_lower, x_upper, epsabs, epsrel); if (status == GSL_SUCCESS) printf ("Converged:\n"); // Na końcu zwalniamy pamięć. gsl_root_fsolver_free (s);
Metody poszukiwania rozwiązań są podzielone na metody korzystające z pochodnych (gsl_multiroot_fdfsolver) i metody nie korzystające z pochodnych (gsl_multiroot_fsolver).
#include <gsl/gsl_multiroots.h>