我正在集成以下表达式:
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觉得需要提供一个不断的集成,而最终是任意的?似乎有点危险。
根据 int
文档," int返回的结果不包括集成常数"。但显然,有些在解决方案期间被引入。因此,我想更好的陈述是:MATLAB如果找到解决方案,则不会向解决方案引入任何新的符号常数(与Wolframalpha不同,但与Mathematica一样)。
显然,可以通过解决方案算法引入并可能隐藏在解决方案的确定任意常数。这是完全有效的,因为不确定的积分会产生无限数量的有效解决方案,而无初始数据或终端数据。
根据int
的Mupad文档(MATLAB的符号引擎),无限期积分是通过"桌子查找或Risch集成"来解决的,我敢肯定,这是在某些前端解析和事先简化启动之后。因此,无论决策树的哪个分支符号发动机都会下降,最终都产生了三角函数的力量,表明其减少时引入了常数。我不知道这是否是标准做法。但是我可以看到,给出算法的一些余地如何引入这种常数可能对强大的解决方案方法有益,因为符号不确定的集成是一项极其艰巨的任务。
试图回答以下问题:"为什么Matlab觉得需要提供一个不断的集成,而当它是任意的?"之所以这样做,是因为它可以,并且基础算法确定这是出于某种原因是正确的行动方案。另外,该解决方案是非常有效的,因为它是任意的。
"似乎有点危险。"我会不同意。虽然不是完全理想的,但是一旦引入适当的数据并与解决方案一起使用并使用了合适的数据后,集成的结果将是正确的。如果不存在此类适当的数据,则该问题不明显,任何解决方案都对任意常数有效。