Ваше уравнение слишком сложно для символьного решения. Это, конечно, не линейно, как предлагается в вопросе. Для удобства sympy также поддерживает числовой решатель nsolve
. nsolve
требует начального значения в качестве третьего параметра.
Обратите внимание, что в вашем тестовом коде pv
на самом деле не вычисляется, а -1
не учитывается в звонке на solve
. Eq(lhs, rhs)
создает уравнение (здесь это эквивалентно выражению lhs-rhs == 0
).
from sympy import Symbol, Eq, nsolve
return_issuedate = Symbol("x")
cf = [0.002475, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 0.02025, 1.01215]
dates = [0.030555555555555555, 0.2833333333333333, 0.5333333333333333, 0.7888888888888889, 1.0444444444444445, 1.2972222222222223, 1.5472222222222223, 1.8027777777777778, 2.058333333333333, 2.311111111111111, 2.563888888888889, 2.8194444444444446, 3.075, 3.225]
pv = sum([cf_i / ((1.0348 + return_issuedate) ** date_i) for cf_i, date_i in zip(cf, dates)])
res = nsolve(Eq(pv, 1), return_issuedate, 0)
print(res)
Вывод:
0.0475300665272506