带有 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
我正在尝试使用 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