擅长:python、mysql、java
<p>似乎<code>newton</code>无法正确处理此问题(不确定原因)。但是,您可以使用<a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root.html#scipy.optimize.root" rel="nofollow noreferrer">^{<cd2>}</a>,它将为您提供预期的结果,并且只需要对代码进行非常小的修改:</p>
<pre><code>import scipy.optimize as optimize
import datetime
def npv(cf, rate=0.1):
if len(cf) >= 2:
first_date = min([x[0] for x in cf])
dcf = [x[1] * (1 /
((1 + rate) ** ((x[0] - first_date).days / 365))) for x in cf]
return sum(dcf)
elif len(cf) == 1:
return cf[0][1]
else:
return 0
def irr(cf):
f = lambda x: npv(cf, rate=x)
r = optimize.root(f, [0])
return r
cf = [(datetime.datetime(2018, 1, 10), -51089.94),
(datetime.datetime(2022, 10, 6), 4941.0)]
print(irr(cf))
</code></pre>
<p>这将打印:</p>
^{pr2}$
<p>如您所见,<code>x</code>包含预期的<code>-0.38912</code>。在</p>