带有 sdeint 的 SABR 系统

SABR system with sdeint

我正在尝试使用 sdeint 包实现 SABR volatility model。基本上,该模型由两个方程组成

dx1 = 0*x1*dt + x2*x1^b*dWt
dx2 = 0*x2*dt + a*x2*dZt

我试图重写 official documentation 的第二个示例,但我遇到了以下问题:

SDEValueError: y0 has length 2. So G must either be a single function
              returning a matrix of shape (2, m), or else a list of m separate
              functions each returning a column of G, with shape (2,)

我的代码

import numpy as np
import sdeint

A = np.array([[0, 0],
              [ 0, 0]])
a = 1
b = 0.5

B = np.diag([1, a]).T

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

def f(x, t):
    return A.dot(x)

def G(x, t):
    BB = np.array([  x[1]*x[0]**b, x[1]  ])
    print(BB)
    return B.dot(BB)

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

基本上,在你的情况下它应该是一个方对角矩阵:

def G(x, t):
    BB = np.diag([  x[1]*x[0]**b, x[1] ])
    return BB