Wolfram mathematica Mathematica中定积分和不定积分的区别?

Wolfram mathematica Mathematica中定积分和不定积分的区别?,wolfram-mathematica,Wolfram Mathematica,我注意到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])} 立即

我注意到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
当我尝试定积分时,我等了又等,几个小时后(真的!)我终于决定尝试一下立即奏效的解决方法:

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:1/x的积分不收敛于{-1,1}.>>这是一个非常合理的输出

我认为Daniel在上面的评论是正确的:“最有可能的是定积分代码正在检查积分路径上的奇点”

看看:

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-cx)/(r^2+c^2-(2r)cx)^(3/2),{x,-1,1},
          假设->{r∈ Reals&c∈ Reals&&c!=r&&c!=-r}]

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

所以,这是一个为常数指定哪些条件的问题

西蒙在上述评论中提出了另一种方法:

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]}

贝里萨利斯回答了这个问题。我只是想具体说明我在评论中的意思,以及它如何应用于这个例子

被积函数中的分母清楚地表明,如果r和c是实的、正的和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}
如果没有有用的假设,整合可能需要花费大量时间来区分好行为和坏行为的区域。引擎盖下的技术令人望而生畏(不平等处理可能就是这样)。也许它并没有以最有效的方式应用于所有地方

有关更多信息,请访问


Daniel Lichtblau

不定积分以符号方式求解,与定积分有不同的优化求解方法。你在积分什么函数和边界?例如,在
Integrate[1/x,{x,-1,1}]
中,使用选项
GenerateConditions->False
通常会使定积分的行为类似于减去不定积分的极限。然而,你必须小心贝里萨里乌斯暗示的原因。(始终将定积分结果与数值积分进行比较)这种行为可能有多种原因。最有可能的是定积分代码正在检查积分路径上的奇点。但还有其他可能性。我需要看一个例子来详细说明。@Daniel我已经发布了两个性质类似的例子。也许应该更明确地说,OP的陈述“这个积分中没有奇点,也没有遇到复数等”是不正确的。对于r==c,函数在x==1处有一个奇点,并且比这个更复杂。@Sjoerd西班牙语中有一句关于礼貌和真理的谚语。。。我无法准确地翻译它。“我有朋友,我有朋友”?@Sjoerd“我没有朋友”。字面意思是“礼貌和勇敢不是相互排斥的”。但比喻的意思更像是“你不会因为礼貌而失去任何东西”。然而,一个好的翻译应该是在中间的某个地方,允许两个“解释”。这就是我迷路的地方。更多的人正在努力翻译:
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}