在matlab中集成不完整的beta函数

时间:2014-11-13 13:50:37

标签: matlab

此行代码有效:

g=integral(@(z(z.^((2*0.1*0.7)-1)).*betainc(0.7./z,0.37,0.4),0.7,0.7.*exp(11/0.7),...
                                                                           'RelTol',1e-16)

对于0.7*exp(120/0.7)0.7*exp(5/0.7)的其他上限也适用。 但是,如果限制为0.7*exp(12/0.7)0.7*exp(30/0.7),则会出现以下错误:

Error using betainc
X must be in the interval [0,1].

Error in @(z)(z.^((2*0.1*0.7)-1)).*betainc(0.7./z,0.37,0.4)


Error in integralCalc/iterateScalarValued (line 323)
                fx = FUN(t).*w;

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);

1 个答案:

答案 0 :(得分:0)

0.7*exp(120/0.7) = 1.9751e+74上限的结果显然是错误的(9.3143e-16),有趣的是没有给出警告信息。

您想要计算的是无界域上的不正确积分,请参阅下面的函数: enter image description here

尝试给出一个巨大的上限以近似不正确的积分并不是一个好主意。 integral的帮助页面建议将此限制定义为Inf,使用此值可以使用以下警告消息计算积分:

  

警告:达到了使用的最大间隔数限制。   误差的近似界限是3.6e-07。积分可能不存在,   或者可能难以按要求近似数字   精度。

由于积分的结果是2.6349,错误可以忽略不计(如果我们能够相信警告信息),那么在我看来这个数字是合理的数字。

以下是代码:

fun = @(z)  (z.^((2*0.1*0.7)-1)).*betainc(0.7./z, 0.37, 0.4);
ll = 0.7;
ul = Inf;
g = integral(fun, ll, ul, 'RelTol', 1e-16)