Mathematica中的定积分和不定积分有什么区别?

14
我注意到Mathematica在计算某些定积分时会出现问题,但如果我进行不定积分并减去结果函数的极限值,它就能很容易地给出答案。
计算定积分和不定积分的算法是否不同?为什么Mathematica不能手动执行上述过程? 例子: 由于评论中有人要求提供示例,所以这里提供两个例子。
Timing[Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), x]]
Out:={0.010452,(-c+r x)/(r^2 Sqrt[c^2+r^2-2 c r x])}

立即获取输出。 而,

Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1}]

这个计算使我的旧电脑变慢了。过了一段时间,它返回了一个不必要地冗长的结果,并包含了很多情况。这是Mathematica 7。在这个积分中没有奇点或复数等问题。为了得到值,请让计算运行大约一分钟,然后手动使用微积分基本定理的推论

g = (r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2)
l = Integrate[g, x] /. x -> -1;
u = Integrate[g, x] /. x -> 1;
u - l
Out:= (-c+r)/(r^2 Sqrt[c^2-2 c r+r^2])-(-c-r)/(r^2 Sqrt[c^2+2 c r+r^2])
FullSimplify[%] 
Out:= ((-c+r)/Sqrt[(c-r)^2]+(c+r)/Sqrt[(c+r)^2])/r^2

哪一个实际上是正确的。最后,为了完整起见,让我们比较一下确定积分的输出和时间:

Timing[Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 
   1}]]
Out:= {174.52,If[(Re[c/r+r/c]>=2||2+Re[c/r+r/c]<=0||c/r+r/c\[NotElement]Reals)&&((Im[r] Re[c]+Im[c] Re[r]<=0&&((Im[c]+Im[r]) (Re[c]+Re[r])>=0||Im[c]^3 Re[r]+Im[r] Re[c] (Im[r]^2-Re[c]^2+Re[r]^2)>=Im[c] (Im[c] Im[r] Re[c]+Re[r] (Im[r]^2 ... blah blah half a page

请注意这个问题需要计算三分钟的时间,而且回答非常混乱。

这是我的一个实际工作例子,我注意到它并感到困惑,但在提交截止日期之后就忘记了,直到今天我再次面临同样的问题。

f = 1/((-I c + k^2/2 - 1/2 (a + k)^2) (I d + k^2/2 - 
    1/2 (-b + k)^2)) + 1/((I c + k^2/2 - 1/2 (-a + k)^2) (I c + I d + 
    k^2/2 - 1/2 (-a - b + k)^2)) + 1/((I d + k^2/2 - 
    1/2 (-b + k)^2) (I c + I d + k^2/2 - 
    1/2 (-a - b + k)^2)) + 1/((I c + k^2/2 - 1/2 (-a + k)^2) (-I d + 
    k^2/2 - 1/2 (b + k)^2)) + 1/((-I c + k^2/2 - 
    1/2 (a + k)^2) (-I c - I d + k^2/2 - 
    1/2 (a + b + k)^2)) + 1/((-I d + k^2/2 - 1/2 (b + k)^2) (-I c - 
    I d + k^2/2 - 1/2 (a + b + k)^2))

我尝试计算定积分,等了很久,几个小时后(真的!),我最终决定尝试一个可以立即工作的解决方案:

fl =  Integrate[f, k] /. k -> -1 ;
fu =  Integrate[f, k] /. k -> 1 ;
F = fu - fl;
F1 = F /. {a -> .01, c -> 0, d -> 1};

请注意,我并不是在讨论一个评论所建议的奇点问题。Integrate[1/x, {x, -1, 1}] 几乎立即返回 Integrate::idiv: Integral of 1/x does not converge on {-1,1}. >>,这是一个完全合理的输出。


不定积分是通过符号求解的,其最佳求解方法与定积分不同。你要积分的是什么函数和边界? - Matthew
3
Integrate[1/x, {x, -1, 1}] 为例思考。 - Dr. belisarius
1
使用选项GenerateConditions -> False通常会使定积分的行为类似于减去不定积分的极限。然而,你必须小心,因为Belisarius提示了一个原因。(始终将定积分结果与数值积分进行比较) - Simon
7
这种行为可能有各种原因。最可能的是确定性积分代码正在检查积分路径上的奇点。但还有其他可能性。我需要看一个例子才能给出更详细的评论。 - Daniel Lichtblau
@Daniel,我已经发布了两个类似的例子。 - yayu
2个回答

12

我认为丹尼尔在他上面的评论中是正确的:"很可能是定积分代码正在检查积分路径上的奇异点"

只需要看一下:

Timing@Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1}]

Result -> None, I got bored waiting and aborted the calc

当:

Timing@Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1},          Assumptions -> {r ∈ Reals && c ∈ Reals && c != r && c != -r}]

->{3.688, (-Sign[c - r] + Sign[c + r])/r^2} 

因此,关键是你为常量指定了哪些条件。

另一种方法是在Simon上面的评论中提到的:

Timing@Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1},  
                 GenerateConditions -> False]

{10.375, ((-c + r)/Sqrt[(c - r)^2] + (c + r)/Sqrt[(c + r)^2])/r^2}

最后,您还可以执行以下操作:

Timing@Integrate[(r - c x)/(r^2 + c^2 - (2 r) c x)^(3/2), {x, -1, 1},  
                 GenerateConditions -> True]

{16.45, ConditionalExpression[.. A long expression ...., Re[c^2 + r^2] > 0]}

也许应该更明确地说,OP的陈述“在这个积分中没有奇点或遇到复数等”是不正确的。对于r==c,函数在x==1处有奇点,并且在那之后是复数。 - Sjoerd C. de Vries
@Sjoerd 在西班牙语中有一句关于礼貌和真相的谚语...我无法准确翻译它。 - Dr. belisarius
“La adulación se hace amigo y la verdad hace que los enemigos”翻译为中文为:奉承会让你得到朋友,而真相会带来敌人。 - Sjoerd C. de Vries
@Sjoerd "Lo cortés no quita lo valiente"。字面意思是“礼貌和勇气并不互斥”。但比喻意义更像是“做人有礼貌不会吃亏”。但好的翻译应该在两种“解释”之间找到平衡点。这就是我迷茫的地方。 - Dr. belisarius
越来越多的人正在努力翻译这个内容:http://forum.wordreference.com/showthread.php?t=1021831 - Sjoerd C. de Vries
@Sjoerd 那些人缺少一些微妙之处(这并不太不寻常) - Dr. belisarius

5

Belisarius已经回答了这个问题。我只是想稍微具体说明一下我的评论意思,并且讲述它如何适用于这个例子。

The denominator in the integrand makes it clear that we have a problem if, say, r and c are real, positive, and r

In[1]:= InputForm[Timing[Integrate[(r - c*x)/(r^2 + c^2 - 2*r*c*x)^(3/2),
  {x, -1, 1}, Assumptions->r>c>0]]]
Out[1]//InputForm= {2.33, 2/r^2}

Absent useful assumptions, Integrate can take significant time to sort out regions of good vs bad behavior. The technology under the hood is daunting (inequality handling can be that way). And perhaps it is not everywhere applied in the most efficient ways possible.

Further information may be found at

http://library.wolfram.com/infocenter/Conferences/5832/

or

http://dl.acm.org/citation.cfm?doid=2016567.2016569

Daniel Lichtblau


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接