# How to find discount rate value if total present value and future time series of cash flows is known in Python

###### Posted By: Anonymous

While going through an article, I encountered a situation where I encountered below polynomial equation.

For reference, below is the equation.

```
15446 = 537.06/(1+r) + 612.25/(1+r)**2 + 697.86/(1+r)**3 + 795.67/(1+r)**4 + 907.07/(1+r)**5
```

This is discount cash flow time series values which we use in finance to get the idea of present value of future cash flows after applying the appropriate discount rate.

So from above equation, I need to calculate the variable `r`

in python programming environment?. I do hope that there must be some library which can be used to solve such equations?.

I solve this, I thought to use the numpy.npv API.

```
import numpy as np
presentValue = 15446
futureValueList = [537.06, 612.25, 697.86,795.67, 907.07]
// I know it is not possible to get r from below. Just put
// it like this to describe my intention.
presentValue = np.npv(r, futureValueList)
print(r)
```

## Solution

You can multiply your NPV formula with the highest power or `(1+r)`

and then find the roots of the polynomial with `polyroots`

(just take the only real root and disregard the complex ones):

```
import numpy as np
presentValue = 15446
futureValueList = [537.06, 612.25, 697.86,795.67, 907.07]
roots = np.polynomial.polynomial.polyroots(futureValueList[::-1]+[-presentValue])
r = roots[np.argwhere(roots.imag==0)].real[0,0] - 1
print(r)
#-0.3332398877886278
```

As it turns out the formula given is incomplete, see p. 14 of the linked article. The correct equation can be solved with standard optimization procedures, e.g. `optimize.root`

providing a sensible initial guess:

```
from scipy import optimize
def fun(r):
r1 = 1 + r
return 537.06/r1 + 612.25/r1**2 + 697.86/r1**3 + 795.67/r1**4 + 907.07/r1**5 * (1 + 1.0676/(r-.0676)) - 15446
roots = optimize.root(fun, [.1])
print(roots.x if roots.success else roots.message)
#[0.11177762]
```

###### Answered By: Anonymous

Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.