Решение для скорости, чтобы сделать NPV нулевым Python

#python #numpy

#python #numpy

Вопрос:

Мое решение до сих пор (которое не работает и застревает), которое использует формулу NPV для ежемесячного денежного потока и пытается найти ставку дисконтирования, чтобы сделать ее нулевой:

 def goal_seek(target,cashflows,_threshold):
    threshold = _threshold
    lower = -10000
    upper = 10000
    solve = (lower   upper)/2
    while abs(threshold) >= _threshold:
        print(f'Threshold is: {threshold}')
        print(f'range is: {lower}  ----  {solve}   ----   {upper}')
        if threshold < 0:
            upper = solve
            solve = (lower   upper)/2
        elif threshold > 0:
            lower = solve
            solve = (lower   upper)/2        
        threshold = target - numpy.npv(((numpy.sign(solve) * (numpy.abs(solve) 1) ** (1 / 12))-1),cashflows)

    print(f'Final result: Threshold: {threshold}....Solved input: {solve}')

            
        return solve

goal_seek(0,[-1,0,0,0,.5],.0001)
 

Реализация приведенного выше примера приводит к тому, что этот алгоритм бинарного поиска застревает ниже

Пороговое значение: 0.9767928293785059 диапазон: 10000.0 —- 10000.0 —- 10000

Есть ли простой модуль scipy для решения нелинейного уравнения с одной переменной, такого как NPV?

Ответ №1:

Я не уверен, что это то, чего вы хотите.

np.npv()
https://numpy.org/doc/stable/reference/generated/numpy.npv.html
np.irr()
https://numpy.org/doc/stable/reference/generated/numpy.irr.html