Errors in symbolic integration Risch-Bronstein-Trager algorithm (Risch algorithm in short) is a complete algorithom for integration in terms of elementary functions. The algorithm either finds elementary integral or proves that there is none. Existence of elementary integral is relatively rare, so given random elementary function probably does not have elementary integral. FriCAS implementation of Risch algorithm is probably the "most complete" existing implementation. Unfortunatly "most complete" does not mean complete, some parts are still unimplemented. See RischImplementationStatus. Unlike some other systems FriCAS will not give you unevaluated result when hitting unimplemented part. Instead, it signals error with message indicating that given integral requires unimplemented part. So when FriCAS returns unevaluated result almost surely there is on elementary integral. Almost surely, because as all programs FriCAS may have bugs... FriCAS in fact implements extension of Risch algorithm which extends class of integrands
to some Liouvillian functions and for integration in terms of Ei, Ci, Si, li, erf,
fresnelS, fresnelC, incomplete Gamma and
polylog. There is complete extended algorithm for large class of functions
(but Additionaly to Risch integrator FriCAS contains relativly weak pattern matching integrator which can generate a few special functions -- Ei, li, dilog and erf. However, if integral really requires elliptic functions then the best thing which FriCAS can do is to prove that integral is nonelementary. FriCAS Examples 1) fricas integrate(sin(x)+sqrt(1-x^3),
Type: Union(Expression(Integer),
Unevaluated result means that FriCAS proved that result is not elementary and can not find nonelementary result.
2) fricas integrate(sqrt(1-log(sin(x)^2)), In this case FriCAS neither can compute elementry result nor can it prove that result is not elementary, is it gives up with error message indicating that the handling this integral requires unimplemented part of Bronstein-Trager algorithm.
3) fricas integrate(sqrt(sin(1/x)), Again, this integral needs unimplemented part of Bronstein-Trager algorithm.
4) fricas integrate(sqrt(sin(x)),
Type: Union(Expression(Integer),
This time FriCAS can prove that result is nonelementary (it needs elliptic functions).
For this Maple 9 gives the following result:
And Mathematica 4 gives:
fricas integrate(x^6*exp(-x^2/2)/sqrt(%pi*2),
Type: Union(f1: OrderedCompletion?(Expression(Integer)),
fricas integrate(x^6*exp(-x^2/2)/sqrt(%pi*2),
Type: Union(Expression(Integer),
... --unknown, Thu, 25 Aug 2005 05:57:53 -0500 reply fricas integrate(exp(x)/x^2,
Type: Union(Expression(Integer),
fricas integrate(sqrt(x),
Type: Union(Expression(Integer),
|