修复 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 (将#修改为@)