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>