python 金融领域:年金现值

求年金现值的函数,例如每年支付额为100元,报酬率为10%,期限为10年的普通年金的现值

普通年金现值:614.46


# -*- coding: utf-8 -*-

def pv_f(c,r,n,when=1):
    '''
    c代表每期现金流,可以每期不一样,如c=[100,90,80,120]
    r贴现率,也可以每期不一样,如相应的,r=[2%,3%,2%,4%]
    n为期数
    when=1表示期末计数,默认,即普通年金
    when=0表示期初计数,即预付年金
    '''
    import numpy as np #导入numpy库
    c=np.array(c)
    r=np.array(r)
    if when==1:
        n=np.arange(1,n+1)
    else:
        n=np.arange(0,n)
    pv=c/(1+r)**n
    return round(pv.sum(),2)

c = [100 for i in range(10)]
r = [0.1 for i in range(10)]
n = 10
print(pv_f(c,r,n))