我正在尝试进行以下集成:
哪里
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
所以我想知道为什么会出现负值。你知道如何解释这个结果吗?
这显然是一个错误,我已经向 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)');
The MathWorks 的回复表明这可能是 MuPad 命令
limit
的问题。下面是 MuPad 中的不定积分:
在
y=d
处对其进行评估会给出正确的结果,但是当 y
接近 0 时在极限内对其进行评估会根据 d
是否在极限计算之前或之后被替换而给出不同的结果。这是一个带有 d=1
的示例:
注意第一项符号的变化。在这种情况下,在极限计算之前替换
d
会导致积分得到肯定(且正确)的评估。因此,MATLAB 似乎在极限计算后替换了 d
,给出了定积分错误的负结果。
我收到了后续回复,指出此错误现已在最新版本 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