如何以编程方式计算不定积分

时间:2010-07-13 16:39:31

标签: algorithm math

我记得解决了很多不确定的集成问题。有一些解决它们的标准方法,但是存在一些问题,它们采用多种方法来达成解决方案。 但是我们如何以编程方式实现解决方案。

例如,查看Mathematica的在线集成商应用程序。那么我们如何编写这样一个接受函数作为参数的程序并返回函数的不定积分。

wolfram mathematica online integrator

PS。可以假设输入函数是连续的(即不是例如sin(x)/ x)。

5 个答案:

答案 0 :(得分:19)

你有Risch's algorithm这是微不可判定的(因为你必须决定两个表达式是否相等,类似于无处不在的暂停问题),并且实现起来很长。

如果你是复杂的东西,解决一个常微分方程实际上并不困难(计算一个不定积分相当于求解y'= f(x))。存在一种伽罗瓦微分理论,其模仿多项式方程的伽罗瓦理论(但是利用解的对称性的李群而不是根的置换的有限群)。 Risch的算法基于它。

答案 1 :(得分:6)

您正在寻找的算法是Risch'算法:

http://en.wikipedia.org/wiki/Risch_algorithm

我认为使用起来有点棘手。这本书:

http://www.amazon.com/Algorithms-Computer-Algebra-Keith-Geddes/dp/0792392590

描述了它。 100页的描述。

答案 2 :(得分:3)

您保留一组基本形式,您知道(多项式,基本三角函数等)的积分,并在输入的形式上使用它们。如果你不需要太多的通用性,这是可行的:例如,编写一个集成多项式的程序非常容易。

如果你想在最常见的情况下这样做,你将不得不完成计算机代数系统所做的大部分工作。这对某些人来说是一生的工作,例如:如果您查看其他答案中发布的Risch's "algorithm"symbolic integration,您可以看到有完整的多卷书(“Manuel Bronstein, Symbolic Integration Volume I :Springer “)已经写在这个主题上,很少有现有的计算机代数系统以最大的通用性实现它。

如果您真的想自己编写代码,可以查看Sage的源代码或its components中列出的几个项目。当然,使用其中一个程序更容易,或者,如果你要写更大的东西,可以使用其中一个作为库。

答案 3 :(得分:1)

这些expert systems通常拥有大量技术,只需一个接一个地尝试。

我不确定WolframMath,但在Maple中有一个命令可以显示所有中间步骤。如果你这样做,你将得到所有尝试过的技术作为输出。

编辑:

转换输入不应该是非常棘手的部分 - 您需要编写parserlexer,将文本输入转换为内部表示。

答案 4 :(得分:0)

祝你好运。 Mathematica是一个非常复杂的软件,符号操作是最好的。如果您对该主题感兴趣,请查看这些书籍:

http://www.amazon.com/Computer-Algebra-Symbolic-Computation-Elementary/dp/1568811586/ref=sr_1_3?ie=UTF8&s=books&qid=1279039619&sr=8-3-spell

此外,前往源头也不会受到伤害。这本书实际上解释了mathematica的内部运作

http://www.amazon.com/Mathematica-Book-Fourth-Stephen-Wolfram/dp/0521643147/ref=sr_1_7?ie=UTF8&s=books&qid=1279039687&sr=1-7