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

修复 python 上的 Broyden 优化问题?

如何解决修复 python 上的 Broyden 优化问题?

使用 R 时,broyden 优化函数的结果提供以下结果:

[8.023027e+06,1.416185e-0.02]

但是在python上实现以下功能时,例如:

def Opt(params):        
    sigma,Assets = params
    Market_cap,Debts,sigma2 = args2
    d1 = (np.log(Assets/Debts) + (0.0232 - 0.5*sigma**2))/sigma
    d2 = d1 - sigma
    Diff1 = Market_cap - (Assets*norm.cdf(d1)-Debts*norm.cdf(d2)*np.exp(-0.0232))
    Diff2 = norm.cdf(d1) * sigma * Assets - sigma2 * Market_cap
    return Diff2,Diff1

添加参数:

Assets,Market_cap = 4740291,33404048,4740291
sigma2 = 0.02396919
Equity = Market_cap
args2 = [Market_cap,sigma2]
print(Market_cap,sigma2)
sol = optimize.broyden1(Opt,[sigma2,Assets])
Opt(sol)

它返回以下错误

    NoConvergence                             Traceback (most recent call last)
<ipython-input-480-de3204c1d7f2> in <module>
----> 1 sol = optimize.broyden1(Opt,Assets])
      2 Opt(sol)

~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/nonlin.py in broyden1(F,xin,iter,alpha,reduction_method,max_rank,verbose,maxiter,f_tol,f_rtol,x_tol,x_rtol,tol_norm,line_search,callback,**kw)

~/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/nonlin.py in nonlin_solve(F,x0,jacobian,full_output,raise_exception)
    345     else:
    346         if raise_exception:
--> 347             raise NoConvergence(_array_like(x,x0))
    348         else:
    349             status = 2

NoConvergence: [1.70805965e+11 4.80094866e+09]

谁能解释一下如何解决它(我尝试重新排列术语但没有结果)

PS:它是 KMV 模型的复制品,用于对信用违约建模。

感谢您的帮助

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