微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中复制Excel求解器函数以获取所需的输出

如何解决在python中复制Excel求解器函数以获取所需的输出

假设我从第一年到第四年都有现金流 cf = [30,45,52,67]

和折扣率(零优惠券) rt = [.02,.03,.04,.05]

在python中计算PV是直接fwd

import numpy as np
import pandas as pd

cf = [30,67]
rt = [.02,.03,.04,.05]

sum([x[0]/(1+x[1])**(i+1) for i,x in enumerate(zip(cf,rt))])

给我输出 173.1775

现在,如果我想让我的NPV为180(假设),我将在excel中运行一个求解,这将调整我的“ rt”(通过添加一个全面的价差)

enter image description here

如何在python中复制相同内容?我已经看到/将SciPy优化用于其他目的,但是不确定如何在这里使用它(或者是否有其他解决方案)

解决方法

您可以使用numpy中的newton(Newton-Raphson方法的实现)解决问题。

scipy.optimize需要一个起点和一个参数的函数,当您达到目标时,该参数的值将为零(这不是真的,newton还可以接受多个变量的函数,但是...),因此我们编写了一个函数,该函数接受您的参数并返回newton所需的函数,最后我们以初始值为零调用newton

newton

编辑:当然,您可以为In [25]: from scipy.optimize import newton ...: cf = [30,45,52,67] ...: rt = [.02,.03,.04,.05] ...: ...: def make_fun(cf,ret,val): ...: def fun(d): ...: return val-sum([x[0]/(1+x[1]+d)**(i+1)for i,x in enumerate(zip(cf,rt))]) ...: return fun ...: ...: newton(make_fun(cf,rt,180),0) Out[25]: -0.014576385759418057 选择一个更具描述性的名称...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。