polykin.math.roots¤
fzero_newton ¤
fzero_newton(
f: Callable[[complex], complex],
x0: float,
xtol: float = 1e-06,
ftol: float = 1e-06,
maxiter: int = 50,
) -> RootResult
Find the root of a scalar function using the newton method.
Unlike the equivalent method in scipy, this method uses complex step differentiation to estimate the derivative of \(f(x)\) without loss of precision. Therefore, there is no need to provide \(f'(x)\). Its application is restricted to real functions that can be evaluated with complex inputs, but which per se do not implement complex arithmetic.
PARAMETER | DESCRIPTION |
---|---|
f
|
Function whose root is to be found.
TYPE:
|
x0
|
Inital guess.
TYPE:
|
xtol
|
Absolute tolerance for
TYPE:
|
ftol
|
Absolute tolerance for function value. The algorithm will terminate
when
TYPE:
|
maxiter
|
Maximum number of iterations.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
RootResult
|
Dataclass with root solution results. |
Examples:
Find a root of the Flory-Huggins equation.
>>> from polykin.math import fzero_newton
>>> from numpy import log
>>> def f(x, a=0.6, chi=0.4):
... return log(x) + (1 - x) + chi*(1 - x)**2 - log(a)
>>> sol = fzero_newton(f, 0.3)
>>> print(f"x= {sol.x:.3f}")
x= 0.213
Source code in src/polykin/math/roots.py
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
|