首页 > 解决方案 > 解决积分问题时得到奇怪的结果

问题描述

在此处输入图像描述

问题是先求解 gamma,然后将 gamma 代入第二个方程得到 k*,但我不知道为什么我的 K* 总是 1.0。任何帮助将不胜感激,如果这个问题可以在 python 中解决,那也很棒。

这是我的尝试,

T = 1;
sigma = 0.3;
r = 0.09;
a = r - sigma^2/2;
K = 100;
S_0 = 100;
M = 3;

syms gamma Kstar t; 
eqa = int(S_0*exp(exp(3*t*(T-t/2)*gamma*sigma/T^2 + a*t + sigma^2*(t- 3*t^2*(T - t/2)^2/T^3)/2)), t, 0, T) == T*K;
Y = vpasolve(eqa,gamma);
K_s = solve((log(log(Kstar)) - log(M))*T/sigma == Y, Kstar);
display(K_s);

这是我的python尝试

import scipy.integrate as integrate
import scipy.special as special
from scipy.integrate import quad
from numpy import exp, log
from sympy.solvers import solve
from sympy import Symbol
T = 1
sigma = 0.3
r = 0.09
a = r - sigma**2/2
K = 100
S_0 = 100
M_2 = S_0 * exp(r*T/2 - sigma**2*T/12)

t = Symbol("t")
Kstar = Symbol("Kstar")
gamma = Symbol("gamma")

def integrand(t, gamma):
    return S_0*exp(exp(3*t*(T-t/2)*gamma*sigma/T**2 + a*t + sigma**2*(t- 3*t**2*(T - t/2)**2/T**3)/2))

eqa = quad(integrand, 0, T, args(gamma)) == K*T

result = solve(eqa, gamma)
print(result)

并且发生了这个错误

NameError                                 Traceback (most recent call last)
<ipython-input-10-e24a1238ff27> in <module>
     20     return S_0*exp(exp(3*t*(T-t/2)*gamma*sigma/T**2 + a*t + sigma**2*(t- 3*t**2*(T - t/2)**2/T**3)/2))
     21 
---> 22 eqa = quad(integrand, 0, T, args(gamma)) == K*T
     23 
     24 result = solve(eqa, gamma)

NameError: name 'args' is not defined

非常感谢

标签: pythonmatlabintegral

解决方案


你为什么在这里调用 args,那不是函数 args(gamma) 请解释你想要它做什么


推荐阅读