用Matlab集成复合函数的问题

用Matlab集成复合函数的问题,matlab,finance,Matlab,Finance,我创建了一个迭代,以便使用Heston模型评估通话价格,但当需要集成时,Matlab向我显示了很多错误 在积分之前,一切都很好,我忽略了积分部分,对一切都进行了评估,函数也很好 u=[0.5,-0.5]; a=卡帕*θ; b=[kappa+lambda rho*sigma,kappa+lambda]; 对于m=1:2 d{m}=@(x)sqrt((rho*sigma*x*i-b(m))^2-(sigma^2)*(2*u(m)*x*i-x^2)^2); g{m}=@(x)(b(m)-rho*sig

我创建了一个迭代,以便使用Heston模型评估通话价格,但当需要集成时,Matlab向我显示了很多错误

在积分之前,一切都很好,我忽略了积分部分,对一切都进行了评估,函数也很好

u=[0.5,-0.5];
a=卡帕*θ;
b=[kappa+lambda rho*sigma,kappa+lambda];
对于m=1:2
d{m}=@(x)sqrt((rho*sigma*x*i-b(m))^2-(sigma^2)*(2*u(m)*x*i-x^2)^2);
g{m}=@(x)(b(m)-rho*sigma*x*i+d{m}(x))/(b(m)-rho*sigma*x*i-d{m}(x));
(b(m)-rho*sigma*x*i+D{m}(x))/sigma^2)*(1-exp(1)^(tau*D{m}(x))/(1-g{m}(x)*exp(1)^(tau*D{m}(x));
C{m}=@(x)r*x*i*tau+(a/sigma^2)*((b(m)-rho*sigma*x*i+d{m}(x))*tau-2*log((1-g{m}(x)*exp(1)^(tau*d{m}(x))/(1-g{m}(x)));
f{m}=@(x)exp(C{m}(x)+D{m}(x)*v0+i*x*log(S0));
F{m}=@(x)实((exp(-i*x*log(K))*F{m}(x))/(i*x));
P(m)=积分(F{m},0,inf);
终止
这是我计算积分后得到的误差:

使用^1参数时出错,一个参数必须是方阵,另一个参数必须是方阵 必须是标量。将电源(.^)用于元素级电源

(函数有很多错误,但在尝试积分之前,它们工作得很好)

integralCalc/IterateScalavalue中的错误(第314行) fx=乐趣(t)

integralCalc/vadapt中的错误(第132行) [q,errbnd]=迭代Calavaled(u,tinterval,pathlen)

积分计算错误(第83行) [q,errbnd]=vadapt(@atoinftransform,interval)

积分错误(第88行)Q=积分计算(fun、a、b、opstruct)


您需要将每个乘法、除法和指数运算转换为其标量版本:

for m=1:2
d{m} = @(x) sqrt((rho.*sigma.*x.*i-b(m)).^2-(sigma.^2).*(2.*u(m).*x.*i-x.^2).^2);
g{m} = @(x) (b(m)-rho.*sigma.*x.*i+d{m}(x))./(b(m)-rho.*sigma.*x.*i-d{m}(x));
D{m} = @(x) ((b(m)-rho.*sigma.*x.*i+d{m}(x))./sigma.^2).*((1-exp(1).^(tau.*d{m}(x)))./(1-g{m}(x).*exp(1).^(tau.*d{m}(x))));
C{m} = @(x) rho.*x.*i.*tau+(a./sigma.^2).*((b(m)-rho.*sigma.*x.*i+d{m}(x)).*tau-2.*log((1-g{m}(x).*exp(1).^(tau.*d{m}(x)))./(1-g{m}(x))));
f{m} = @(x) exp(C{m}(x)+D{m}(x).*v0+i.*x.*log(S0));
F{m} = @(x) real((exp(-i.*x.*log(K)).*f{m}(x))./(i.*x));
P(m) = integral(F{m},0,inf);
end

这是因为在积分时,Matlab将在向量而不是标量值上计算函数
F{m}
。你得到的错误基本上告诉你的是相同的。

列出所有使用的变量
kappa
theta…
?等等。。。否则我们如何运行您的代码?非常感谢,这对我使用Heston模型很有帮助。