FriCAS inherited from Axiom implementation of Risch algorithm for elementary integration. It can
handle both easy cases
fricas
(1) -> integrate(x*exp(x^2), x)
Type: Union(Expression(Integer),...)
fricas
integrate(exp(1/x^2)/x^3, x)
Type: Union(Expression(Integer),...)
and some which are hard for simpler algorithms.
For example Maxma 5.45.1 can not handle
fricas
integrate(sqrt(x^2+1)/(x^3+1), x)
Type: Union(Expression(Integer),...)
fricas
)set output tex off
fricas
)set output algebra on
integrate(sqrt(x^2+1)/(x^4+1), x)
(4)
+----------+
| +-+
|- \|2 + 2
|----------
| +-+
\| 32 \|2
*
log
+----------+
| +-+ +------+
+-+ |- \|2 + 2 3 +-+ | 2
(8 x\|2 |---------- - 2 x \|2 )\|x + 1
| +-+
\| 32 \|2
+
+----------+
| +-+
2 +-+ |- \|2 + 2 4 2 +-+
((- 8 x + 8)\|2 + 16) |---------- + (2 x + x + 1)\|2 + 2
| +-+
\| 32 \|2
+
-
+----------+
| +-+
|- \|2 + 2
|----------
| +-+
\| 32 \|2
*
log
+----------+
| +-+ +------+
+-+ |- \|2 + 2 3 +-+ | 2
(- 8 x\|2 |---------- - 2 x \|2 )\|x + 1
| +-+
\| 32 \|2
+
+----------+
| +-+
2 +-+ |- \|2 + 2 4 2 +-+
((8 x - 8)\|2 - 16) |---------- + (2 x + x + 1)\|2 + 2
| +-+
\| 32 \|2
+
+----------+
+------+ | +-+
| 2 |- \|2 + 2 2
+--------+ x\|x + 1 - 4 |---------- - x
| +-+ | +-+
|\|2 + 2 \| 32 \|2
- 2 |-------- atan(---------------------------------)
| +-+ +----------+ +--------+
\| 32 \|2 | +-+ | +-+
|- \|2 + 2 |\|2 + 2
(32 |---------- - 4) |--------
| +-+ | +-+
\| 32 \|2 \| 32 \|2
+
+----------+
+------+ | +-+
| 2 |- \|2 + 2 2
+--------+ x\|x + 1 + 4 |---------- - x
| +-+ | +-+
|\|2 + 2 \| 32 \|2
2 |-------- atan(---------------------------------)
| +-+ +----------+ +--------+
\| 32 \|2 | +-+ | +-+
|- \|2 + 2 |\|2 + 2
(32 |---------- + 4) |--------
| +-+ | +-+
\| 32 \|2 \| 32 \|2
Type: Union(Expression(Integer),...)
fricas
)set output algebra off
fricas
)set output tex on
Default integrators in Mathematica 12.0 and Maple 15 can not handle
fricas
integrate(((exp(x)-x^2+2*x)/(x^2*(exp(x)+x)^2))*exp((x^2-1)/x+1/(exp(x)+x)), x)
Type: Union(Expression(Integer),...)
Default integrators in Maple 15 and Maxima 5.45.1 can not handle
fricas
integrate(x^6/sqrt((x^7+1)*(x^7+2)), x)
Type: Union(Expression(Integer),...)
FriCAS fixed several bugs in Axiom implementation, for example
fricas
integrate(cos(x)^n*sin(x)^(-n-2), x)
Type: Union(Expression(Integer),...)
fricas
integrate(exp(asec(x))/x^2, x)
Type: Union(Expression(Integer),...)
work now but used to return unevaluated result.
Risch algorithm can handle large class of integrands involving special functions
fricas
f := D(1/(1 + ellipticE(x^2+a, m)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
fricas
f := D(1/(Ei(x)-Ei(x-1)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
fricas
f := D(1/(Si(x+1)+Ci(x-1)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
fricas
f := D(1/(Si(Ci(x)^2+1)+Ci(Ci(x)^2-1)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
fricas
f := D(log(Si(Ci(x)^2+1)+Ci(Ci(x)^2-1)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
Alas, the following does not work
fricas
f := D(1/(1 + besselJ(m, x^2+a)), x)
Type: Expression(Integer)
fricas
integrate(f, x)
Type: Union(Expression(Integer),...)
Risch algorithm wants to find elementary integral. For many functions integrals can be written only in
terms of special function. FriCAS now contains extensions which
can handle some of them, see FriCASSpecialIntegration.
For more elementary examples see FriCASTimofeev1, FriCASTimofeev37,
FriCASTimofeev5, FriCASTimofeev9.
Examples involving exponential function from Albert Rich testsuite
RichExp1, RichExp2.
fricas
integrate(exp(x-x^2), x)
Type: Union(Expression(Integer),...)
fricas
integrate(sqrt((sin(x)^2 + x)/exp(x)),x)
>> Error detected within library code:
integrate: implementation incomplete (has polynomial part)
fricas
integrate(sqrt(sin(x)+x),x)
>> Error detected within library code:
integrate: implementation incomplete (has polynomial part)