You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python复现R语言dtd违约距离函数 优化返回初始输入值问题求助

问题定位

核心错误为变量边界定义不符合scipy优化规则,另有两处次要逻辑缺陷:

  1. 边界参数格式错误:scipy.optimize.minimize的bounds参数要求每个变量的边界格式为(下界, 上界),你给待优化变量V设置的边界为(known_vars[0], 0),即(10000, 0),下界大于上界,不存在任何可行解,因此优化器直接终止并返回初始值。
  2. 公式遗漏无风险利率:原逆Black-Scholes求解逻辑中d1需要包含无风险利率r项,你注释了对应逻辑会导致结果与原R版本实现不一致。
  3. 波动率边界不合理:波动率sV为正数,需要设置极小的下界避免出现除零错误。

修复后可运行代码

import numpy as np
from scipy.stats import norm
from scipy.optimize import minimize 

mcap=10000
debt=5000
vol=0.4
r=0.1
V=mcap+debt
sV=(mcap * vol) / debt
T=1

unknown_vars = [V,sV]
# 把无风险利率r加入已知变量列表
known_vars = [mcap,debt,vol,T,r]

def d1(V, debt, sV, T, r):
    num = (np.log(V/debt)) + ((r + 0.5*sV**2)*T)
    den = sV * np.sqrt(T)    
    return num/den

def d2(V, debt, sV, T, r):
    return d1(V, debt, sV, T, r) - sV*np.sqrt(T)
    
def objective_function(unknown_vars,known_vars):
    mcap, debt, vol, T, r = known_vars
    V,sV = unknown_vars
    rho=1
    debt_rho = rho * debt
    d1_val = d1(V, debt_rho, sV, T, r)
    d2_val = d2(V, debt_rho, sV, T, r)
    e1 = -mcap + V*norm.cdf(d1_val) - debt_rho*norm.cdf(d2_val)
    e2 = -vol*mcap + sV*V*norm.cdf(d1_val)
    return (e1*e1) + (e2*e2)

# 修正边界:V下界为权益市值mcap,上界无限制;sV下界为1e-6避免除零,上界无限制
bnds = ((mcap, np.inf), (1e-6, np.inf))
optimize_obj_function = minimize(fun=objective_function, 
                                 x0=unknown_vars,
                                 args=(known_vars),
                                 method='L-BFGS-B', 
                                 bounds=bnds)

print(optimize_obj_function)
# 优化成功输出示例:
#  message: CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH
#  success: True
#   status: 0
#      fun: 1.1292781835773185e-12
#        x: [ 1.464e+04  2.737e-01]
#      nit: 12
#      jac: [-2.958e-06  3.714e-06]
#     nfev: 57
#    njev: 19
#  hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>

内容的提问来源于stack exchange,提问作者oceanbeach96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:09:01