求解累计金额中的未知利率
Solve for unknown interest rate in accumulated amount
你好我正在寻找一种方法来迭代一些未知的值。
有18笔现金流(cf_1到cf_18)和它们对应的累积周期(t1到t18),存储在2个列表中。我希望将累计金额(以未知利率i表示)的总和等于500000,并求解这个i.
公式为:500000 = 累计值= cf1 * (1+i)^t1 +...+ cf_18 * (1+i)^t18。我可以考虑使用 sympy 求解器:
solve(cf1 * (1+i)**t1 +...+ cf_18 * (1+i)**t18 - 500000, i)
求解 i。但是显然for循环不能带这个未知的i。那我除了把18个表达式全部打出来还能做什么呢?
这是我试过的数据:
from sympy.solvers import solve
from sympy import Symbol
i = Symbol('i')
cashflow = [13000,
12500,
12000,
11500,
11000,
10500,
10000,
9500,
9000,
8500,
8000,
7500,
7000,
6500,
6000,
5500,
5000,
4500,]
years_accum = [22.75,
22.5,
20.5,
20,
19.25,
19,
18.75,
12,
10.25,
10,
9.75,
9,
8.5,
8,
7.5,
5,
3.5,
3.25,]
for cf in cashflow:
for yr in years_accum:
S_t = sum(cf* (1+i)^yr)
print(S_t)
solve(S_t - 500000, i)
感谢任何帮助!
您的双循环是不正确的,因为对于每个现金流量,它都会添加所有年份。我会做的
>>> eq = sum([cf*(1+i)**yr for cf,yr in zip(cashflow, years_accum)]) - 500000
但是要在循环中看到它可能是
>>> S_t = 0
>>> for cf, yr in zip(cashflow, years_accum):
... S_t = S_t + cf*(1+i)**yr
>>> eq = S_t - 500000
现在求解...solve
如果我们希望得到一个简单的答案(来自一个相对简单的方程式),那会很好。由于这是高度非线性的 nsolve
(对于数值解)是更好的选择:
>>> nsolve(eq, 0) # assume i is close to 0
0.0747836528616713
你好我正在寻找一种方法来迭代一些未知的值。 有18笔现金流(cf_1到cf_18)和它们对应的累积周期(t1到t18),存储在2个列表中。我希望将累计金额(以未知利率i表示)的总和等于500000,并求解这个i.
公式为:500000 = 累计值= cf1 * (1+i)^t1 +...+ cf_18 * (1+i)^t18。我可以考虑使用 sympy 求解器:
solve(cf1 * (1+i)**t1 +...+ cf_18 * (1+i)**t18 - 500000, i)
求解 i。但是显然for循环不能带这个未知的i。那我除了把18个表达式全部打出来还能做什么呢?
这是我试过的数据:
from sympy.solvers import solve
from sympy import Symbol
i = Symbol('i')
cashflow = [13000,
12500,
12000,
11500,
11000,
10500,
10000,
9500,
9000,
8500,
8000,
7500,
7000,
6500,
6000,
5500,
5000,
4500,]
years_accum = [22.75,
22.5,
20.5,
20,
19.25,
19,
18.75,
12,
10.25,
10,
9.75,
9,
8.5,
8,
7.5,
5,
3.5,
3.25,]
for cf in cashflow:
for yr in years_accum:
S_t = sum(cf* (1+i)^yr)
print(S_t)
solve(S_t - 500000, i)
感谢任何帮助!
您的双循环是不正确的,因为对于每个现金流量,它都会添加所有年份。我会做的
>>> eq = sum([cf*(1+i)**yr for cf,yr in zip(cashflow, years_accum)]) - 500000
但是要在循环中看到它可能是
>>> S_t = 0
>>> for cf, yr in zip(cashflow, years_accum):
... S_t = S_t + cf*(1+i)**yr
>>> eq = S_t - 500000
现在求解...solve
如果我们希望得到一个简单的答案(来自一个相对简单的方程式),那会很好。由于这是高度非线性的 nsolve
(对于数值解)是更好的选择:
>>> nsolve(eq, 0) # assume i is close to 0
0.0747836528616713