# Source code for naginterfaces.library.examples.roots.contfn_brent_interval_ex

```#!/usr/bin/env python3
"``naginterfaces.library.roots.contfn_brent_interval`` Python Example."

# pylint: disable=invalid-name

from naginterfaces.library import roots, specfun

[docs]def main():
"""
Example for :func:`naginterfaces.library.roots.contfn_brent_interval`.

Finds a zero of a continuous function using Brent's algorithm.

>>> main()
naginterfaces.library.roots.contfn_brent_interval Python Example Results.
Implied volatility for an option with a given target price.
The implied volatility for the target price of 12.35008695 is 0.09000000.
"""

print('naginterfaces.library.roots.contfn_brent_interval '
'Python Example Results.')
print('Implied volatility for an option with a given target price.')

# Initial guess for sigma:
sigma = 0.15
# Option-pricing parameters:
S = 100.  # Spot price of the underlying asset;
K = 90.   # Strike price;
T = 1.5   # Time to expiry;
r = 0.03  # Annual risk-free rate of interest;
q = 0.015 # Annual continuous yield rate.
# Target option price:
target = 12.35008695
# The (Black--Scholes--Merton European option) volatility function:
bsm_f = lambda sigma: (
specfun.opt_bsm_price('c', [K], S, [T], sigma, r, q)[0, 0] - target
)

print(
"The implied volatility for the target price of "
"{:1.8f} is {:1.8f}.".format(
target, roots.contfn_brent_interval(sigma, bsm_f).x
)
)

if __name__ == '__main__':
import doctest
import sys
sys.exit(
doctest.testmod(
None, verbose=True, report=False,
optionflags=doctest.REPORT_NDIFF,
).failed
)
```