FriCAS? inherited from Axiom implementation of Risch algorithm for elementary integration. It can
handle both easy cases
fricas
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 21.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)
-
4+-+
4\|2
*
atan
+---------+
| +-+
+-+ |2\|2 - 4 4+-+
(\|2 - 1) |--------- - \|2
| +-+
\|2\|2 - 3
/
+---------+
| +-+
+-+ |2\|2 - 4
(\|2 - 1) |---------
| +-+
\|2\|2 - 3
*
ROOT
+---------+
| +-+
+-+ 4+-+ |2\|2 - 4 3 +-+
(- 41x\|2 + 58x)\|2 |--------- - 48x \|2
| +-+
\|2\|2 - 3
+
3
68x
*
+------+
| 2
\|x + 1
+
+---------+
| +-+
2 +-+ 2 4+-+ |2\|2 - 4
((41x + 17)\|2 - 58x - 24)\|2 |---------
| +-+
\|2\|2 - 3
+
+-+ 4+-+2 4 2 +-+ 4
(24\|2 - 34)\|2 + (48x + 24x + 24)\|2 - 68x
+
2
- 34x - 34
/
+-+
24\|2 - 34
+
+---------+
| +-+ +------+
+-+ |2\|2 - 4 | 2
(- x\|2 + x) |--------- \|x + 1
| +-+
\|2\|2 - 3
+
+---------+
| +-+
2 +-+ 2 |2\|2 - 4 +-+ 4+-+
(x \|2 - x ) |--------- + (\|2 - 1)\|2
| +-+
\|2\|2 - 3
+
4+-+
4\|2
*
atan
+---------+
| +-+
+-+ |2\|2 - 4 4+-+
(\|2 - 1) |--------- + \|2
| +-+
\|2\|2 - 3
/
+---------+
| +-+
+-+ |2\|2 - 4
(\|2 - 1) |---------
| +-+
\|2\|2 - 3
*
ROOT
+---------+
| +-+
+-+ 4+-+ |2\|2 - 4 3 +-+ 3
((41x\|2 - 58x)\|2 |--------- - 48x \|2 + 68x )
| +-+
\|2\|2 - 3
*
+------+
| 2
\|x + 1
+
+---------+
| +-+
2 +-+ 2 4+-+ |2\|2 - 4
((- 41x - 17)\|2 + 58x + 24)\|2 |---------
| +-+
\|2\|2 - 3
+
+-+ 4+-+2 4 2 +-+ 4
(24\|2 - 34)\|2 + (48x + 24x + 24)\|2 - 68x
+
2
- 34x - 34
/
+-+
24\|2 - 34
+
+---------+ +---------+
| +-+ +------+ | +-+
+-+ |2\|2 - 4 | 2 2 +-+ 2 |2\|2 - 4
(- x\|2 + x) |--------- \|x + 1 + (x \|2 - x ) |---------
| +-+ | +-+
\|2\|2 - 3 \|2\|2 - 3
+
+-+ 4+-+
(- \|2 + 1)\|2
+
+-+ 4+-+
(\|2 - 1)\|2
*
log
+---------+
| +-+ +------+
+-+ 4+-+ |2\|2 - 4 3 +-+ 3 | 2
((41x\|2 - 58x)\|2 |--------- - 48x \|2 + 68x )\|x + 1
| +-+
\|2\|2 - 3
+
+---------+
| +-+
2 +-+ 2 4+-+ |2\|2 - 4
((- 41x - 17)\|2 + 58x + 24)\|2 |---------
| +-+
\|2\|2 - 3
+
+-+ 4+-+2 4 2 +-+ 4 2
(24\|2 - 34)\|2 + (48x + 24x + 24)\|2 - 68x - 34x - 34
/
+-+
24\|2 - 34
+
+-+ 4+-+
(- \|2 + 1)\|2
*
log
+---------+
| +-+ +------+
+-+ 4+-+ |2\|2 - 4 3 +-+ 3 | 2
((- 41x\|2 + 58x)\|2 |--------- - 48x \|2 + 68x )\|x + 1
| +-+
\|2\|2 - 3
+
+---------+
| +-+
2 +-+ 2 4+-+ |2\|2 - 4
((41x + 17)\|2 - 58x - 24)\|2 |---------
| +-+
\|2\|2 - 3
+
+-+ 4+-+2 4 2 +-+ 4 2
(24\|2 - 34)\|2 + (48x + 24x + 24)\|2 - 68x - 34x - 34
/
+-+
24\|2 - 34
/
+---------+
| +-+
+-+ |2\|2 - 4
(4\|2 - 4) |---------
| +-+
\|2\|2 - 3
Type: Union(Expression(Integer),...)
fricas
)set output algebra off
fricas
)set output tex on
None of default integrators in Mathematica 8.0 , Maple 15 and Maxima 21.1 can do
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),...)
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 elementaty examples see FriCASTimofeev1?, FriCASTimofeev37?,
FriCASTimofeev5?, FriCASTimofeev9?.