root_finders

Functions for root-finding of algebraic univariate functions using various algorithms. In this submodule, various methods can be selected to:

\[\text{find }x\text{, such that: } f(x)=0\]

The methods that can be selected here are iterative methods to find approximate solutions to the above problem, starting from an initial guess \(x_{0}\), for which \(f_{0}=f(x_{0})\). The various methods implement different iterative algorithms to compute \(x_{i}\rightarrow x_{i+1}\). That is, they (attempt to) compute an improved guess of the root at iteration \(i+1\) from the guess at iteration \(i\), and continue iterating until convergence has been reached.

Depending on the method that is use, the root-finder may need several initial guesses, or have a formulation for one or more derivatives of the function \(f(x)\). If the required information is not available when performing the root-finding, and exception will be thrown.

There are several convergence criteria that can be defined for this

  • When an absolute tolerance \(\epsilon_{a}\) is met, such that \(|x_{i}-x_{i-1}|<\epsilon_{a}\)

  • When a relative tolerance \(\epsilon_{r}\) is met, such that \(|(x_{i}-x_{i-1})/x_{i}|<\epsilon_{r}\)

  • When the root function gets within \(\epsilon_{f}\) of the true root \(|f(x_{i}|<\epsilon_{f}\))

  • When the number if iterations exceeds some threshold \(N\), such that \(i=N\)

The root finder algorithm continues until as single one of the required convergence criteria is met.

When meeting the convergence criterion on number of iterations \(N\), a user can choose to deal with this in one of several manners (see below).

Functions

bisection(relative_variable_tolerance, ...)

Function to create settings for a bisection root-finder.

newton_raphson(relative_variable_tolerance, ...)

Function to create settings for a Newton-Raphson root-finder.

secant(relative_variable_tolerance, ...)

Function to create settings for a secant method root-finder.

halley(relative_variable_tolerance, ...)

Function to create settings for a Halley root-finder.

bisection(relative_variable_tolerance: float = nan, absolute_variable_tolerance: float = nan, root_function_tolerance: float = nan, maximum_iteration: int = 1000, maximum_iteration_handling: tudatpy.kernel.math.root_finders.MaximumIterationHandling = <MaximumIterationHandling.throw_exception: 2>) tudatpy.kernel.math.root_finders.RootFinderSettings

Function to create settings for a bisection root-finder.

Function to create settings for a bisection root finder. This root finder approximates the root by initializing with two initial guesses \(x_{\downarrow,0}\) and \(x_{\uparrow,0}\), for which it is required that \(f(x_{\downarrow,0}) < 0\) and \(f(x_{\uparrow,0}) > 0\). At each iteration \(i\), the current guess of the root \(x_{i}\) is:

\[\begin{split}x_{i}=\begin{cases} x_{\downarrow,i}, & |f(x_{\downarrow,i})|<|f(x_{\uparrow,i})|\\ x_{\uparrow,i}, & |f(x_{\downarrow,i})|\ge|f(x_{\uparrow,i})| \end{cases}\end{split}\]

The midpoint \(x_{m,i}\) of \(x_{\downarrow,i}\) and \(x_{\uparrow,i}\) is then computed from \(x_{m,i}=(x_{\downarrow,i}-x_{\uparrow,i})/2\). Depending on the sign of \(f(x_{m,i})\), it then replaces either \(x_{\downarrow,i}\) or \(x_{\uparrow,i}\) (depending on whether its sign matches \(f(x_{\downarrow,i})\) for iteration \(i+1\) and \(f(x_{\uparrow,i})\)), while the other point from iteration \(i\) is retained.

Although slow, the algorithm is ensured to converge to a root, if the two initial guesses indeed have opposite signs (if not, an exception is thrown).

Parameters:
  • relative_variable_tolerance (float, default = nan) – Relative tolerance \(\epsilon_{r}\) (setting not used if nan)

  • absolute_variable_tolerance (float, default = nan) – Relative absolute \(\epsilon_{a}\) (setting not used if nan)

  • root_function_tolerance (float, default = nan) – Root function tolerance \(\epsilon_{f}\) (setting not used if nan)

  • maximum_iteration (int, default = 1000) – Maximum number of iterations \(N\)

  • maximum_iteration_handling (MaximumIterationHandling, default = throw_exception) – Algorithm behaviour if maximum number of iterations \(N\) is reache

Returns:

Bisection root-finding settings object

Return type:

RootFinderSettings

newton_raphson(relative_variable_tolerance: float = nan, absolute_variable_tolerance: float = nan, root_function_tolerance: float = nan, maximum_iteration: int = 1000, maximum_iteration_handling: tudatpy.kernel.math.root_finders.MaximumIterationHandling = <MaximumIterationHandling.throw_exception: 2>) tudatpy.kernel.math.root_finders.RootFinderSettings

Function to create settings for a Newton-Raphson root-finder.

Function to create settings for a bisection root finder. This root finder approximates the root by initializing with a single initial guesses \(x_{0}\) and requires an analytical formulation for \(f(x)\) and \(f'(x)=\frac{d}{dx}f(x)\). The algorithm uses the following equation to iterate:

\[x_{i+1}=x_{i}-\frac{f(x_{i})}{f'(x_{i})}\]
Parameters:
  • relative_variable_tolerance (float, default = nan) – Relative tolerance \(\epsilon_{r}\) (setting not used if nan)

  • absolute_variable_tolerance (float, default = nan) – Relative absolute \(\epsilon_{a}\) (setting not used if nan)

  • root_function_tolerance (float, default = nan) – Root function tolerance \(\epsilon_{f}\) (setting not used if nan)

  • maximum_iteration (int, default = 1000) – Maximum number of iterations \(N\)

  • maximum_iteration_handling (MaximumIterationHandling, default = throw_exception) – Algorithm behaviour if maximum number of iterations \(N\) is reache

Returns:

Newton-Raphson root-finding settings object

Return type:

RootFinderSettings

secant(relative_variable_tolerance: float = nan, absolute_variable_tolerance: float = nan, root_function_tolerance: float = nan, maximum_iteration: int = 1000, maximum_iteration_handling: tudatpy.kernel.math.root_finders.MaximumIterationHandling = <MaximumIterationHandling.throw_exception: 2>) tudatpy.kernel.math.root_finders.RootFinderSettings

Function to create settings for a secant method root-finder.

Function to create settings for a root finder using the secant method. This root finder approximates the root by initializing with two initial guesses \(x_{0}\) and \(x_{1}\). The algorithm uses the following equation to iterate:

\[x_{i+1}=x_{i}-f(x_{i})\frac{x_{i}-x_{i-1}}{f(x_{i})-f(x_{i-1})}\]
Parameters:
  • relative_variable_tolerance (float, default = nan) – Relative tolerance \(\epsilon_{r}\) (setting not used if nan)

  • absolute_variable_tolerance (float, default = nan) – Relative absolute \(\epsilon_{a}\) (setting not used if nan)

  • root_function_tolerance (float, default = nan) – Root function tolerance \(\epsilon_{f}\) (setting not used if nan)

  • maximum_iteration (int, default = 1000) – Maximum number of iterations \(N\)

  • maximum_iteration_handling (MaximumIterationHandling, default = throw_exception) – Algorithm behaviour if maximum number of iterations \(N\) is reache

Returns:

Secant root-finding settings object

Return type:

RootFinderSettings

halley(relative_variable_tolerance: float = nan, absolute_variable_tolerance: float = nan, root_function_tolerance: float = nan, maximum_iteration: int = 1000, maximum_iteration_handling: tudatpy.kernel.math.root_finders.MaximumIterationHandling = <MaximumIterationHandling.throw_exception: 2>) tudatpy.kernel.math.root_finders.RootFinderSettings

Function to create settings for a Halley root-finder.

Function to create settings for a Halley root finder. This root finder approximates the root by initializing with a single initial guesses \(x_{0}\) and requires an analytical formulation for \(f(x)\), \(f'(x)=\frac{d}{dx}f(x)\) and \(f''(x)=\frac{d^{2}}{dx^{2}}f(x)\). The algorithm uses the following equation to iterate:

\[x_{i+1}=x_{i}-\frac{2f(x_{i})f'(x_{i})}{2(f'(x_{i}))^{2}-f(x_{i})f''(x_{i})}\]
Parameters:
  • relative_variable_tolerance (float, default = nan) – Relative tolerance \(\epsilon_{r}\) (setting not used if nan)

  • absolute_variable_tolerance (float, default = nan) – Relative absolute \(\epsilon_{a}\) (setting not used if nan)

  • root_function_tolerance (float, default = nan) – Root function tolerance \(\epsilon_{f}\) (setting not used if nan)

  • maximum_iteration (int, default = 1000) – Maximum number of iterations \(N\)

  • maximum_iteration_handling (MaximumIterationHandling, default = throw_exception) – Algorithm behaviour if maximum number of iterations \(N\) is reache

Returns:

Halley root-finding settings object

Return type:

RootFinderSettings

Enumerations

MaximumIterationHandling

Enumeration of types of behaviour to be used when the convergence criterion on maximum number of iterations is reached.

class MaximumIterationHandling

Enumeration of types of behaviour to be used when the convergence criterion on maximum number of iterations is reached.

Members:

accept_result :

The program will accept the root at the final iteration, without any additional output

accept_result_with_warning :

The program will accept the root at the final iteration, but will print a warning to the terminal that the root finder may not have converged

throw_exception :

The program will not accept the root at the final iteration, and will throw an exception

property name

Classes

RootFinderSettings

Class to define settings for a root finder.

class RootFinderSettings

Class to define settings for a root finder.