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

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

# NAG Copyright 2018-2019.

# 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 )