Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate indefinite integral programmatically

Tags:

algorithm

math

I remember solving a lot of indefinite integration problems. There are certain standard methods of solving them, but nevertheless there are problems which take a combination of approaches to arrive at a solution. But how can we achieve the solution programatically.

For instance look at the online integrator app of Mathematica. So how do we approach to write such a program which accepts a function as an argument and returns the indefinite integral of the function.

wolfram mathematica online integrator

PS. The input function can be assumed to be continuous(i.e. is not for instance sin(x)/x).

like image 616
Raks Avatar asked Jul 13 '10 16:07

Raks


People also ask

Can Desmos calculate indefinite integrals?

Indefinite Integrals and Infinite Limits of Integration It's also possible to graph the output of some indefinite integrals by including x in the upper bound, 0 in the lower bound, and integrating with respect to a variable other than x. Desmos will evaluate convergent integrals with infinite limits.

How do you calculate indefinite integrals in Python?

To calculate the indefinite integral of a function ( antiderivative ) in python, we use the integrate() of sympy. The first argument f is the integrand function. The second argument x is the integration variable (dx). The variable must be defined as a symbol.

How does Matlab calculate indefinite integrals?

F = int( expr ) computes the indefinite integral of expr . int uses the default integration variable determined by symvar ( expr,1 ). If expr is a constant, then the default integration variable is x .


4 Answers

You have Risch's algorithm which is subtly undecidable (since you must decide whether two expressions are equal, akin to the ubiquitous halting problem), and really long to implement.

If you're into complicated stuff, solving an ordinary differential equation is actually not harder (and computing an indefinite integral is equivalent to solving y' = f(x)). There exists a Galois differential theory which mimics Galois theory for polynomial equations (but with Lie groups of symmetries of solutions instead of finite groups of permutations of roots). Risch's algorithm is based on it.

like image 109
Alexandre C. Avatar answered Oct 03 '22 03:10

Alexandre C.


The algorithm you are looking for is Risch' Algorithm:

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

I believe it is a bit tricky to use. This book:

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

has description of it. A 100 page description.

like image 39
Nordic Mainframe Avatar answered Oct 03 '22 03:10

Nordic Mainframe


You keep a set of basic forms you know the integrals of (polynomials, elementary trigonometric functions, etc.) and you use them on the form of the input. This is doable if you don't need much generality: it's very easy to write a program that integrates polynomials, for example.

If you want to do it in the most general case possible, you'll have to do much of the work that computer algebra systems do. It is a lifetime's work for some people, e.g. if you look at Risch's "algorithm" posted in other answers, or symbolic integration, you can see that there are entire multi-volume books ("Manuel Bronstein, Symbolic Integration Volume I: Springer") that have been written on the topic, and very few existing computer algebra systems implement it in maximum generality.

If you really want to code it yourself, you can look at the source code of Sage or the several projects listed among its components. Of course, it's easier to use one of these programs, or, if you're writing something bigger, use one of these as libraries.

like image 30
ShreevatsaR Avatar answered Oct 03 '22 04:10

ShreevatsaR


These expert systems usually have a huge collection of techniques and simply try one after another.

I'm not sure about WolframMath, but in Maple there's a command that enables displaying all intermediate steps. If you do so, you get as output all the tried techniques.

Edit:

Transforming the input should not be the really tricky part - you need to write a parser and a lexer, that transforms the textual input into an internal representation.

like image 34
phimuemue Avatar answered Oct 03 '22 02:10

phimuemue