好的,我有一个MATLAB代码,它将quadgk
在积分过程中生成的x的值传递给integrand
函数:
optionvalue(i) = exp(-r .* T2) .* quadgk(@(x) integrand(x,flag, F, K, vol, T2, T1), 0, Inf, 'AbsTol',tolerance);
function value = integrand(x, flag, F,K,vol,T2,T1)
d1 = (log(x ./ (x+K)) + 0.5 .* (vol.^2) .* (T2-T1)) ./ (vol .* sqrt(T2 - T1));
d2 = d1 - vol.*sqrt(T2 - T1);
mu = log(F) - 0.5 .*vol .^2 .* T1;
sigma = vol .* sqrt(T1);
value = lognpdf(x, mu, sigma) .* (flag .* x.*normcdf(flag .* d1) - flag .* (x+K).*normcdf(flag .* d2));
所以现在我去找SciPy,试图复制上面的内容,但是我无法传递x
的值。SciPy显示函数quad
必须采用lambda函数——我怎么才能把长的integrand
函数转换成那种格式(或者用其他方法使其工作)?就像我必须将其重写为f(x)
类型,并删除传递到函数本身的x
变量。到目前为止,我对Python的了解如下:
感谢你的帮助!在
我希望我们不要把它们称为lambda函数,这会让人觉得使用
lambda
语法的结果有一些特别的东西,而实际上没有。在quad
接受一个函数,不管你用什么语法构造它。在或者,也许更像你的情况
^{pr2}$运行这个函数比我想象的要容易得多,只要在调用
quad
时省略Python中的x
变量,它将在其例程中自动传递它。一、 e它假定
^{pr2}$x
输入变量位于:语句中没有通过
args=()
传递该参数相关问题 更多 >
编程相关推荐