-
Compound Interest Part 1 6
-
Lecture1.1
-
Lecture1.2
-
Lecture1.3
-
Lecture1.4
-
Lecture1.5
-
Lecture1.6
-
-
Compound Interest Part 2 3
-
Lecture2.1
-
Lecture2.2
-
Lecture2.3
-
-
Present Value 4
-
Lecture3.1
-
Lecture3.2
-
Lecture3.3
-
Lecture3.4
-
-
Annuities 6
-
Lecture4.1
-
Lecture4.2
-
Lecture4.3
-
Lecture4.4
-
Lecture4.5
-
Lecture4.6
-
-
Perpetuities 2
-
Lecture5.1
-
Lecture5.2
-
-
Bonds 6
-
Lecture6.1
-
Lecture6.2
-
Lecture6.3
-
Lecture6.4
-
Lecture6.5
-
Lecture6.6
-
-
Dividend Discount Model 3
-
Lecture7.1
-
Lecture7.2
-
Lecture7.3
-
-
Risk 8
-
Lecture8.1
-
Lecture8.2
-
Lecture8.3
-
Lecture8.4
-
Lecture8.5
-
Lecture8.6
-
Lecture8.7
-
Lecture8.8
-
-
Capital Asset Pricing Model 6
-
Lecture9.1
-
Lecture9.2
-
Lecture9.3
-
Lecture9.4
-
Lecture9.5
-
Lecture9.6
-
Annuity Discounting
Let’s visualize what the value of each payment is with the different rates to understand this better. If we assume payments are \$100 we can iterate through each rate to see the values.
In [8]:
P = 100
n = 10
rates = [0, .02, .05, .1]
PV = []
for r in rates:
PV.append([P / (1 + r) ** t for t in range(1, n+1)])
print("r={}".format(r))
print("Payment Values:")
print(PV[-1])
print()
r=0
Payment Values:
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]
r=0.02
Payment Values:
[98.0392156862745, 96.11687812379854, 94.23223345470444, 92.38454260265142, 90.57308098299158, 88.7971382186192, 87.05601786139138, 85.34903711901114, 83.67552658726582, 82.03482998751551]
r=0.05
Payment Values:
[95.23809523809524, 90.70294784580499, 86.3837598531476, 82.27024747918819, 78.35261664684589, 74.62153966366274, 71.06813301301213, 67.6839362028687, 64.46089162177971, 61.39132535407592]
r=0.1
Payment Values:
[90.9090909090909, 82.64462809917354, 75.13148009015775, 68.30134553650706, 62.0921323059155, 56.44739300537772, 51.315811823070646, 46.65073802097331, 42.40976183724846, 38.55432894295314]
Now that we have the data, we can plot it.
In [9]:
plt.rcParams["figure.figsize"] = [8,6]
#And now, let's graph them
for payments, r in zip(PV, rates):
#Use "o" so we get points instead of a line
plt.plot(list(range(1,n+1)), payments, "o", label="r="+str(r))
#Set the limits so that we have 0 as the left minimum and 5.5 as the right (so we don't cut off points)
plt.xlim([0,10.5])
plt.ylim([0,110])
plt.xlabel("t")
plt.ylabel("Payment PV")
plt.title("Present Value of Annuity Payments")
plt.legend()
plt.show()
Of course, we can sum these values to find the annuity present value. Let's see how they compare below.
In [10]:
#Iterate through and find the present values
for r, payments in zip(rates, PV):
print("r={}".format(r))
print("Payment Values: {}".format(sum(payments)))
print()
r=0
Payment Values: 1000.0
r=0.02
Payment Values: 898.2585006242236
r=0.05
Payment Values: 772.1734929184811
r=0.1
Payment Values: 614.456710570468
In [11]:
for r, payments in zip(rates, PV):
print("r={}".format(r))
#If r is 0 then there will be division by 0
#Formula is n*payment in that case
if r > 0:
print("Payment Values: {}".format(annuity_TVM(100,10,r)))
else:
print("Payment Values: {}".format(10 * 100))
print()
r=0
Payment Values: 1000
r=0.02
Payment Values: 898.2585006242244
r=0.05
Payment Values: 772.1734929184818
r=0.1
Payment Values: 614.4567105704685
Prev
Annuity Equation
Next
Annuity Due