# How do you calculate the rate in the present value of an annuity due calculation?

I have the formula for calculating the present value of an annuity due

I have the Present value now, so I want to solve for `r`. In other words, I would like to find out the resultant rate.

In the example I have:

• PV = 8253.93
• PMT (periodic payment) = 1000
• n = 10 years

The answer I am supposed to get is 4.54545%

I simplify the formula as far as I can:

``````7253.93/1000r - 1 = (1 + r)^-9
``````

Then I square root by `-9` for everything:

``````0.8023811875r - 1 = 1 + r

0.8023811875r - r = 1 + 1
-0.1976188125r = 2
r = -10.12%
``````

What am I doing wrong?

You can't get an analytical solution for `r`. You need to solve it numerically, via some iterative method.

Here is the simplest iterative method I can think of. First, rearrange your equation to solve for one of the `r`'s:

``````r = (1000/7253.93)*(1 - (1 + r)^(-9))
``````

Now, since we can only solve for one `r` at a time, we rename the `r` on the right side to `r_0` and the one on the left side to `r_1`:

``````r_1 = (1000/7253.93)*(1 - (1 + r_0)^(-9))
``````

Now, take a geuss of `r_0`. Try `r_0 = 0.5`, since `r` should be between `0%` an `100%`. Plug it in and solve for `r_1`:

``````r_1  = (1000/7253.93)*(1 - (1 + r_0)^(-9))
r_1  = 0.1343
``````

Now, do it again, with `r_1` on the right-side, and solve for the next `r_2 on the left side:

``````r_2  = (1000/7253.93)*(1 - (1 + r_1)^(-9))
r_2  = 0.09350
``````

Repeat the pattern:

``````r_3  = (1000/7253.93)*(1 - (1 + r_2)^(-9))
r_3  = 0.07619
``````

and keep going:

``````r_4  = 0.06667
r_5  = 0.06073
r_6  = 0.05677
...
r_34 = 0.04547
``````

and after 34 iterations you have a pretty close solution. There are better iterative methods out there, but this is the simplest.

Alternatively, you can plug it in to Wolfram Alpha which gives the expected answer of `r=0.04545...`

Your second step is wrong; you can't take the 9th root of the left side the way you did.

As far as I know, there's not a closed-for solution for `r` - you have to find it iteratively (try some value and adjust it up or down depending on which way you are from the actual answer).