如何在Matlab中绘制涉及集成的函数?

时间:2015-12-22 13:22:56

标签: matlab

我有一个特征函数CF(t, param1, param2, ...)可用(这里param s是某些分布的参数,被认为是固定的)。我想用Gil-Pelaez formula来获取CDF,所以我写了以下内容:

function [ F ] = CDF( x, param1, param2, ... )

integrand = @(v) imag(exp(-1i.*v.*x) .* CF(t, param1, param2, ...)) ./ v;
F = 0.5 - (1./pi) .* integral(integrand, 0, 100);

end

这适用于单个值,例如CDF(0.1, param1, param2, ...)给了我想要的结果。现在我想在一个CDF的范围内绘制x,所以我做了

x = linspace(-1,1,100);
y = CDF(x, param1, param2, ...)
plot(x, y)

我最终得到了这样的错误:

Not enough input arguments.

Error in integralCalc/iterateScalarValued (line 314)
                fx = FUN(t);

Error in integralCalc/vadapt (line 132)
            [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 75)
        [q,errbnd] = vadapt(@AtoBInvTransform,interval);

Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);

但是y = CDF(x, param1, param2, ...)确实有效,所以罪魁祸首似乎是被积函数的exp(-1i.*v.*x)部分,因为vx的大小不匹配。但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您已经猜到了v和x的大小不匹配导致错误。 integral将向量值传递给函数句柄,以通过一次计算多个点的函数值来加速计算。

但在这种情况下,您应该在CDF函数的调用中将参数'ArrayValued'设置为true。这将迫使积分将v的标量值传递给函数句柄,然后CDF将能够返回值为y的向量值x