为什么Matlab提供任意的积分常数?

时间:2017-03-03 03:29:15

标签: matlab wolfram-mathematica wolframalpha

我正在整合以下表达式:

sin(2 * x)/ 4 - 8 * sin(x)

在Matlab中,我放入了

syms x
int(sin(2*x)/4 - 8*sin(x)) 

然后返回

17*cos(x/2)^2 - cos(x/2)^4

Wolfram中,我输入了

int(sin(2*x)/4 - 8*sin(x))

然后返回

8 cos(x) - 1/8 cos(2 x) + constant

为了比较这两个解决方案,我将以下内容放入Wolfram

int(sin(2*x)/4 - 8*sin(x)) == 17*cos(x/2)^2 - cos(x/2)^4

它表明Matlab的解决方案给出了一个整合65/8的常量,而Wolfram则保持了任意的积分常数。我很高兴我抓住了这个因为它在我的最终解决方案中产生了很大的不同,尽管是一个常数。我的问题是,为什么Matlab觉得需要提供一个恒定的集成,最后它是任意的?看起来有点危险。

1 个答案:

答案 0 :(得分:1)

根据int documentation," int返回的结果不包括积分常数"。但显然,有些是在解决方案中引入的。所以我想一个更好的说法是:如果找到一个,MATLAB不会向解决方案引入任何新的符号常量(不像WolframAlpha暗示的那样,但是像Mathematica一样)。

然而,显然,解决方案算法可能会引入明确的任意常数,并且可能隐藏在解决方案中。这是完全有效的,因为无限积分产生无限数量的有效解决方案,无论是初始数据还是终端数据。

根据MuPAD documentation of int(MATLAB的符号引擎),通过" table lookup或Risch integration"来解决无限积分,并且我确定'在事先进行一些前端解析和简化之后进行引导。因此,符号引擎下降的决策树中的任何一个分支最终产生三角函数的幂,这表明在它们减少时引入常数。我不知道这是否是标准做法。但我可以看到如何给算法一些余地来引入这样的常量可能对于一个强大的求解方法是有益的,因为符号无限积分是一项极其困难的任务。

所以试着回答这个问题:"为什么Matlab觉得有必要提供一个整合的常数,最后它是任意的?"这样做是因为它可以,并且基础算法由于某种原因确定它是正确的行动方案。此外,该解决方案完全有效,因为它是任意的。

"看起来有点危险。"我不同意。虽然不完全理想,但一旦引入适当的数据并与解决方案一起使用,整合的结果将是正确的。如果不存在这样的适当数据,则问题未明确,任何解决方案对任意常量都有效。