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

使用sdeint实现SABR波动率模型出现SDEValueError报错如何解决

SABR模型sdeint实现报错修复方案

错误原因

报错触发的核心原因是sdeint库的itoint接口要求扩散函数G必须返回形状为**(状态变量维度, 布朗运动维度)**的二维数组,你的原有代码中G返回的是长度为2的一维数组,不符合接口参数规范。

你的SABR模型包含两个独立的布朗运动dWt、dZt,状态变量维度为2,因此G需要返回(2, 2)形状的对角扩散矩阵:

  • 第一行第一列对应第一个方程的dWt扩散系数:x[1] * x[0] ** b
  • 第二行第二列对应第二个方程的dZt扩散系数:a * x[1]
  • 非对角元素为0,代表两个布朗运动相互独立

修复后完整代码

import numpy as np
import sdeint

a = 1
b = 0.5

tspan = np.linspace(0.0, 10.0, 10001)
x0 = np.array([3.0, 3.0])

# 漂移项,两个方程漂移系数都是0
def f(x, t):
    return np.zeros_like(x)

# 扩散项,返回2行2列的扩散矩阵
def G(x, t):
    return np.array([
        [x[1] * x[0] ** b, 0],
        [0, a * x[1]]
    ])

result = sdeint.itoint(f, G, x0, tspan)

结果说明

运行后result为形状(10001, 2)的数组,第一列是标的资产价格x1的模拟序列,第二列是波动率x2的模拟序列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:04