Решить для неизвестной процентной ставки в накопленной сумме - PullRequest
0 голосов
/ 15 марта 2020

Привет, я ищу способ повторения некоторого значения с неизвестным. Существует 18 денежных потоков (cf_1 до cf_18) и соответствующие им периоды накопления (от t1 до t18), которые хранятся в 2 списках. I wi sh, чтобы приравнять сумму накопленных сумм (с точки зрения неизвестной процентной ставки i) к 500000 и решить для этого i.

Формула: 500000 = накопленная стоимость = cf1 * ( 1 + i) ^ t1 + ... + cf_18 * (1 + i) ^ t18. Я мог бы подумать об использовании Simpy Solver:

solve(cf1 * (1+i)**t1 +...+ cf_18 * (1+i)**t18 - 500000, i) 

, чтобы решить для меня. Но, видимо, за l oop нельзя принять этого неизвестного, т.е. Так что еще я могу сделать, кроме ввода целых 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)

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 15 марта 2020

Ваш двойной l oop неверен, поскольку для каждого потока ca sh он добавляет все годы. Я бы сделал

>>> eq = sum([cf*(1+i)**yr for cf,yr in zip(cashflow, years_accum)]) - 500000

Но увидеть это в oop может быть

>>> 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
...