此行代码有效:
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);
答案 0 :(得分:0)
0.7*exp(120/0.7) = 1.9751e+74
上限的结果显然是错误的(9.3143e-16
),有趣的是没有给出警告信息。
您想要计算的是无界域上的不正确积分,请参阅下面的函数:
尝试给出一个巨大的上限以近似不正确的积分并不是一个好主意。
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)