
P1: JYS
c04 JWBK378-Fletcher May 23, 2009 4:21 Printer: Yet to come
46 Financial Modelling in Python
>>> x = numpy.zeros([ndata, 1])
>>> a = 0.25
>>> b = -0.1
>>> for i in range(ndata):
... v = generator.gauss(0, 1.0)
... x[i, 0] = v
... y[i] = a*v+b*v*v
>>> fit
fos = []
>>> fit
fos.append(linear fo())
>>> fit
fos.append(quadratic fo())
>>> coeffs = generalised
least squares fit(y, x, sig, fit fos)
>>> coeffs
array([ 0.25, -0.1 ])
4.7 QUADRATIC AND CUBIC ROOTS
It is not uncommon in finance to want to find the real roots of either a quadratic or cubic
equation. The module ppf.math.quadratic
roots provides an implementation for
finding the real roots of a quadratic. The real roots of the quadratic equation
ax
2
+bx + c = 0, a, b, c ∈ R (4.14)
exist provided b
2
− 4ac ≥ 0 and are given by the expression
r
±
=−
b
2a
±
√
b
2
−4ac
2a
. (4.15)
For numerical stability reasons one shouldn’t use the above equation to determine the real
roots. Instead it is better to calculate the roots via the relations below
q =−
1
2
b +sgn(b)
b
2
−4ac
(4.16)
r
+
=
q
a
(4.17)
r
−
=
c
q
(4.18)
and this is precisely the way the real roots are calculated in the ppf.math.quadratic
roots module, as can been seen below.
import math
def quadratic
roots(a, b, c, xl, xh):
# find roots
roots = []
d = b*b-4*a*c
if d > 0:
r1 = 0
r2 = 0
if a <>0:
sgn = 1
if b < 0: sgn = -1
q = -0.5*(b+sgn*math.sqrt(d))