如何实现一个Pytork解算器,它可以非常快速地并行求解大量非线性方程组(如scipy.fsolve)?

2024-09-29 23:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Python开发一个解算器,最好使用pytorch张量,它可以非常快速有效地解一系列非线性方程。该解算器基本上需要求解以下公式中的变量“s”,给定一定的“ob”值;i、 e.函数“f”返回的值应为零

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

d = 0.01
r = 0.02
v_base = 0.19
v_skew1 = -0.0035
v_skew2 = -0.0021
t = 1

def v(s):
    return v_base + v_skew1 * (s-1) + v_skew2 * (s-1.1)
def f(s, ob):
    v_temp = v(s)
    k1 = np.log(1/s) + (r - d + 0.5 * v_temp**2)*t)/(v_temp * np.sqrt(t))
    k2 = k1 - v_temp * np.sqrt(t)
    result = np.exp(-d*t) * norm.cdf(k1) - strike * np.exp(-r * t) * norm.cdf(k2)
    return (result - ob)
ob = 0.015 # only one value of ob for now, but need to solve for thousands of ob values
answer = fsolve(f, 0.01, args = ob)

ob将使用pytorch张量计算性能,同时求解大量值,因此我更希望求解ob的方法也使用张量。此外,当我试图求解数千个“ob”值时,即使我将张量参数传递到fsolve,运行时间也会增加很多。是否有一种方法可以实现所有这些单独FSolve的解算器功能,从而使用张量并行运行。另外,是否有使用torch.optim实现解算器的方法


Tags: 方法fromimportnormbasenpk1pytorch

热门问题