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

8 integration matlab

我正在尝试进行以下集成:

$\INT_0 ^ DY ^ 2\SQRT {-y ^ 2 +码} \,\ 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
Run Code Online (Sandbox Code Playgroud)

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

gno*_*ice 4

这显然是一个错误,我已经向 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)');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


更新#1:

MathWorks 的回应表明这可能是 MuPad 命令的问题limit。下面是 MuPad 中的不定积分:

在此输入图像描述

在 处 计算它y=d会给出正确的结果,但在接近 0 的极限中计算它y会根据是d在极限计算之前还是之后替换而给出不同的结果。这是一个示例d=1

在此输入图像描述

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


更新#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
Run Code Online (Sandbox Code Playgroud)