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

为何我的几何布朗运动(GBM)股票模拟函数结果存在差异?

几何布朗运动(GBM)模拟函数差异问题修复

问题原因

你的MC_gbm2函数在计算漂移项时存在逻辑错误:

  • MC_gbm1中,每一步路径通过逐步累积漂移和布朗运动增量生成,第t步的总漂移为t*dt*(mu - 0.5*σ²)(t为当前步数,从1到n)。
  • MC_gbm2原代码错误地将单步漂移项dt*(mu - 0.5*σ²)直接与累积的布朗运动项相加,未随步数累积漂移,导致整体漂移被低估,最终模拟均值偏低。

修正后的MC_gbm2函数

def MC_gbm2(S0, mu, sigma, T, M, n):
    dt = T / n
    # 生成每一步对应的累积时间(t*dt,t从1到n),转为(n,1)形状实现广播计算
    time_steps = (np.arange(1, n+1) * dt)[:, None]
    
    dW = np.random.normal(0, np.sqrt(dt), size=(n, M))
    dW_cumsum = np.cumsum(dW, axis=0)

    # 正确计算累积漂移+累积布朗运动项
    paths = S0 * np.exp( (mu - 0.5 * sigma**2) * time_steps + sigma * dW_cumsum )
    result = np.concatenate((np.full((1,M), S0), paths), axis=0)
    return result

验证一致性

为排除随机序列差异,调用两个函数前分别重置随机种子,确保模拟路径完全一致:

# GBM Simulation 1
np.random.seed(123)
St = MC_gbm1(S0, mu, sigma, T, M, n)

# GBM Simulation 2
np.random.seed(123)
St3 = MC_gbm2(S0, mu, sigma, T, M, n)

# 打印最终时刻的均值
print("MC_gbm1 最终均值:", np.mean(St[-1]))
print("MC_gbm2 最终均值:", np.mean(St3[-1]))

# 验证路径是否在浮点误差范围内一致
print("路径是否一致:", np.allclose(St, St3))

额外修正:绘图笔误

原代码中plt.plot(tt,St2)是笔误,应改为plt.plot(tt,St3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:53:14