Fixed database typo and removed unnecessary class identifier.
This commit is contained in:
parent
00ad49a143
commit
45fb349a7d
5098 changed files with 952558 additions and 85 deletions
|
@ -0,0 +1,92 @@
|
|||
"""
|
||||
Test Cython optimize zeros API functions: ``bisect``, ``ridder``, ``brenth``,
|
||||
and ``brentq`` in `scipy.optimize.cython_optimize`, by finding the roots of a
|
||||
3rd order polynomial given a sequence of constant terms, ``a0``, and fixed 1st,
|
||||
2nd, and 3rd order terms in ``args``.
|
||||
|
||||
.. math::
|
||||
|
||||
f(x, a0, args) = ((args[2]*x + args[1])*x + args[0])*x + a0
|
||||
|
||||
The 3rd order polynomial function is written in Cython and called in a Python
|
||||
wrapper named after the zero function. See the private ``_zeros`` Cython module
|
||||
in `scipy.optimize.cython_optimze` for more information.
|
||||
"""
|
||||
|
||||
import numpy.testing as npt
|
||||
from scipy.optimize.cython_optimize import _zeros
|
||||
|
||||
# CONSTANTS
|
||||
# Solve x**3 - A0 = 0 for A0 = [2.0, 2.1, ..., 2.9].
|
||||
# The ARGS have 3 elements just to show how this could be done for any cubic
|
||||
# polynomial.
|
||||
A0 = tuple(-2.0 - x/10.0 for x in range(10)) # constant term
|
||||
ARGS = (0.0, 0.0, 1.0) # 1st, 2nd, and 3rd order terms
|
||||
XLO, XHI = 0.0, 2.0 # first and second bounds of zeros functions
|
||||
# absolute and relative tolerances and max iterations for zeros functions
|
||||
XTOL, RTOL, MITR = 0.001, 0.001, 10
|
||||
EXPECTED = [(-a0) ** (1.0/3.0) for a0 in A0]
|
||||
# = [1.2599210498948732,
|
||||
# 1.2805791649874942,
|
||||
# 1.300591446851387,
|
||||
# 1.3200061217959123,
|
||||
# 1.338865900164339,
|
||||
# 1.3572088082974532,
|
||||
# 1.375068867074141,
|
||||
# 1.3924766500838337,
|
||||
# 1.4094597464129783,
|
||||
# 1.4260431471424087]
|
||||
|
||||
|
||||
# test bisect
|
||||
def test_bisect():
|
||||
npt.assert_allclose(
|
||||
EXPECTED,
|
||||
list(
|
||||
_zeros.loop_example('bisect', A0, ARGS, XLO, XHI, XTOL, RTOL, MITR)
|
||||
),
|
||||
rtol=RTOL, atol=XTOL
|
||||
)
|
||||
|
||||
|
||||
# test ridder
|
||||
def test_ridder():
|
||||
npt.assert_allclose(
|
||||
EXPECTED,
|
||||
list(
|
||||
_zeros.loop_example('ridder', A0, ARGS, XLO, XHI, XTOL, RTOL, MITR)
|
||||
),
|
||||
rtol=RTOL, atol=XTOL
|
||||
)
|
||||
|
||||
|
||||
# test brenth
|
||||
def test_brenth():
|
||||
npt.assert_allclose(
|
||||
EXPECTED,
|
||||
list(
|
||||
_zeros.loop_example('brenth', A0, ARGS, XLO, XHI, XTOL, RTOL, MITR)
|
||||
),
|
||||
rtol=RTOL, atol=XTOL
|
||||
)
|
||||
|
||||
|
||||
# test brentq
|
||||
def test_brentq():
|
||||
npt.assert_allclose(
|
||||
EXPECTED,
|
||||
list(
|
||||
_zeros.loop_example('brentq', A0, ARGS, XLO, XHI, XTOL, RTOL, MITR)
|
||||
),
|
||||
rtol=RTOL, atol=XTOL
|
||||
)
|
||||
|
||||
|
||||
# test brentq with full output
|
||||
def test_brentq_full_output():
|
||||
output = _zeros.full_output_example(
|
||||
(A0[0],) + ARGS, XLO, XHI, XTOL, RTOL, MITR)
|
||||
npt.assert_allclose(EXPECTED[0], output['root'], rtol=RTOL, atol=XTOL)
|
||||
npt.assert_equal(6, output['iterations'])
|
||||
npt.assert_equal(7, output['funcalls'])
|
||||
npt.assert_equal(0, output['error_num'])
|
Loading…
Add table
Add a link
Reference in a new issue