为什么MATLAB给这个积分带来负值?

时间:2017-04-12 12:47:57

标签: matlab integration

我尝试进行以下整合:

$\int_0^d y^2\sqrt{-y^2+yd}\,\mathrm{d}x$

其中d >= 0

我尝试得到一个显式表达式,我认为结果应该是一个正值,因为被积函数大于或等于0,但MATLAB的符号集成给了我这个结果:

syms y d
assume(d>=0)
int(y^2*sqrt(-y^2+d*y),y,0,d)

ans =

-(5*pi*d^4)/128

所以我想知道为什么出现负值。你知道怎么解释这个结果吗?

1 个答案:

答案 0 :(得分:4)

这显然是一个错误,我已经向The MathWorks提交了一份错误报告。您可以通过绘制被积函数来确认它,并注意它在[0 d]范围内始终为正,从而确保积分应该产生正值:

h = [];
for d = 1:5,
  y = linspace(0, d, 1000);
  h = [h; plot(y, f(y, d))];
  hold on;
end
legend(h, strcat({'d = '}, int2str((1:5).')));
xlabel('y');
ylabel('f(y)');
title('f(y) = y^2*sqrt(d*y - y^2)');

enter image description here


更新#1:

The MathWorks的回复表明这可能是MuPad命令limit的问题。下面是MuPad中的无限积分:

enter image description here

y=d处对此进行评估会得到正确的结果,但是在y接近0的情况下对其进行评估会根据在限制计算之前或之后是否替换d来得出不同的结果。以下是d=1的示例:

enter image description here

注意第一学期的符号变化。在这种情况下,在极限计算之前替换d会导致积分的正(和正确)评估。因此,MATLAB似乎在极限计算后代替d,给出了定积分的错误否定结果。


更新#2:

我收到了一份后续回复,说明此错误现已在最新版本R2018b中得到解决。我能够在R2018b预发布版中确认上面的两个限制计算产生相同的结果,并且积分结果现在具有正确的符号:

syms y d
assume(d >= 0)
int(y^2*sqrt(-y^2+d*y), y, 0, d)

ans =

(5*pi*d^4)/128