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

Why does Matlab provide an arbitrary constant of integration?

我正在整合以下表达式:

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

在 Matlab 中,我输入

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

它returns

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

Wolfram中,我输入

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

它returns

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 觉得有必要提供一个积分常数,而最终它是任意的?好像有点危险。

根据int documentation、"Results returned by int do not include integration constants"。但很明显,在解决方案中引入了一些。所以我想一个更好的说法是:如果找到一个解决方案,MATLAB 不会引入任何新的符号常量(不像 WolframAlpha 暗示但像 Mathematica)。

然而,显然,求解算法可能会引入并可能隐藏在求解中的确定的任意常数。这是完全有效的,因为不定积分在没有初始或终端数据的情况下产生无限数量的有效解。

根据 MuPAD documentation of int(MATLAB 的符号引擎),不定积分通过 "table lookup or Risch integration" 处理,我确信这是在预先进行一些前端解析和简化之后才能启动的。因此,无论符号引擎发生故障的决策树的哪个分支最终都会产生三角函数的幂,这表明在减少常量时引入了常数。我不知道这是否是标准做法。但我可以看到如何为算法提供一些余地来引入此类常数可能对稳健的求解方法有益,因为符号不定积分是一项极其困难的任务。

所以尝试回答这个问题:"why does Matlab feel the need to provide a constant of integration, when in the end it's arbitrary?"它这样做是因为它可以,并且底层算法出于某种原因确定它是正确的行动方案。此外,该解决方案是完全有效的,因为它是任意的。

"Seems kinda dangerous." 我不同意。虽然不完全理想,但一旦引入适当的数据并与解决方案一起使用,集成的结果将是正确的。如果不存在这样的适当数据,则问题未指定,任何解决方案都对任意常数有效。