$SPAD/src/input pmint.input

Manuel Bronstein and Timothy Daly

December 3, 2016

Abstract

Contents

2

# The Poor Man's Integrator, a parallel integration heuristic
# Version 1.1 ---  May 10, 2005  (c) M.Bronstein and INRIA 2004-2005
pmint := proc(f,x)
local ff, si, li, lin, lout, ld, q, d, l, vars, dx, ls, fint, lc;
ff := eval(convert(f, tan));        # convert trigs to tan
si := select(proc(d) diff(d,x) <> 0 end, indets(ff));
si := select(proc(d) diff(d,x) <> 0 end, indets(map(diff, si, x))) union si;
li := [op(si)];        # list of terms in integrand and its derivative
lin := [seq(d=`tools/genglobal`(x), d=li)];    # substitution terms->indets
lout := [seq(rhs(d)=lhs(d), d=lin)];        # substitution indets->terms
ld := subs(lin, map(diff, li, x));    # derivatives of all the terms
q := lcm(seq(denom(d), d=ld));        # denominator of the total derivation
l := [seq(normal(q * d), d=ld)];    # q * derivatives of all the terms
vars := map(lhs, lout);
dx := totalDerivation(vars, l);        # vector field dx = q * d/dx
ls := [seq(getSpecial(d, lin), d=li)];    # list of known Darboux for dx
fint := subs(lout, pmIntegrate(subs(lin, ff), dx, q, vars, ls));
lc := select(proc(d) convert(d,string)[1]="_"; end, indets(fint, name));
subs({seq(d = 0, d=lc minus si)}, fint);
end;
getSpecial := proc(f, l) local p;        # return known Darboux polys
p := op(0,f);
if p = `tan` then [1+subs(l,f)^2, false];
elif p = `tanh` then [1 + subs(l,f), false], [1 - subs(l,f), false];
elif p = `LambertW` then [subs(l,f), true];
else NULL; fi;
end;
totalDerivation := proc(lv, ld)
proc(f) local fp, i;
    fp := 0; for i to nops(ld) do fp := fp + ld[i] * diff(f, lv[i]); od;
    fp;
end;
end;
pmIntegrate := proc(f, d, q, vars)
local ls, splq, s, ff, df, spl, cden, dg, monomials, cand, lunk, sol, i;
if nargs = 5 then ls := args[5]; else ls := []; fi;
splq := splitFactor(q, d);
s := splq[1]; for i to nops(ls) do if ls[i][2] then s := s*ls[i][1]; fi; od;
ff := normal(f); df := denom(ff); spl := splitFactor(df, d);
cden := s * spl[1] * deflation(spl[2], d);
dg := 1 + degree(s) +  max(degree(numer(ff)), degree(denom(ff)));
monomials := [op(enumerateMonoms(vars, dg))];
cand := add('_A'[i] * monomials[i], i = 1..nops(monomials)) / cden;
lunk := { seq('_A'[i], i = 1..nops(monomials)) };
sol:= tryIntegral(f, d, q, vars, cand, lunk, spl[1], spl[2], splq[1], ls, 0);
if sol[1] then sol := tryIntegral(f, d, q, vars, cand, lunk,

                    spl[1], spl[2], splq[1], ls, I); fi;
if sol[1] then Int(f); else sol[2]; fi;
end;
tryIntegral := proc(f, d, q, vars, cand, lunk, l1, l2, l3, ls, K)
local candlog, p, candidate, i, sol;
candlog := [op({ myfactors(l1, K), myfactors(l2, K), myfactors(l3, K) }
        union { seq(p[1], p=ls) })];
candidate := cand + add('_B'[i] * log(candlog[i]), i = 1..nops(candlog));
sol := solve({coeffs(numer(normal(f - d(candidate)/q)), {op(vars)})},
            lunk union { seq('_B'[i], i = 1..nops(candlog)) });
[evalb(sol=NULL), subs(sol,candidate)];
end;
myfactors := proc(p, K) local l, fact;
if K = 0 then l := factors(p); else l := factors(p, K); fi;
seq(fact[1], fact=l[2]);
end;
enumerateMonoms := proc(vars, d) local n, x, i, v, s, w;
n := nops(vars);
if n = 0 then {1}; else
    x := vars[n];
    v := [seq(vars[i], i = 1..n-1)];
    s := enumerateMonoms(v, d);
    for i to d do s := s union {seq(x^i*w,w=enumerateMonoms(v,d-i))}; od;
   s;
fi;
end;
splitFactor := proc(p, d) local si, x, c, q, spl, s, splh;
si := select(proc(z) d(z) <> 0 end, indets(p,name));
if si = {} then RETURN([1,p]) fi;
x := si[1];
c := content(p, x, 'q');
spl := splitFactor(c, d);
s := normal(gcd(q, d(q)) / gcd(q, diff(q, x)));
if degree(s) = 0 then RETURN([spl[1], q * spl[2]]); fi;
splh := splitFactor(normal(q / s), d);
[spl[1] * splh[1] * s, spl[2] * splh[2]];
end;
deflation := proc(p, d) local si, x, c, q;
si := select(proc(z) d(z) <> 0 end, indets(p,name));
if si = {} then RETURN(p) fi;
x := si[1];
c := content(p, x, 'q');
deflation(c, d) * gcd(q, diff(q, x));
end;

Christopher Creutzig (sci.math.symbolic 2/19/10 10:18pm):
 The Risch-Norman algorithm is actually a fascinating piece of
machinery. (I'm using MuPAD syntax, since that is what I have around all
the time, but the principles are obviously system agnostic.)
 Let's assume we define elliptic functions E and K. For what follows,
the only thing we need is that they know how to be differentiated, so
I'll not write any code beyond that:
ellipE := funcenv(ellipE):
ellipK := funcenv(ellipK):
ellipE::diff :=
proc(f, x)
  local z;
begin
  z := op(f);
  (ellipE(z) - ellipK(z))/(2*z) * diff(z, x);
end_proc:
ellipK::diff := proc(f,x)
  local z;
begin
  z := op(f);
  (ellipE(z) - (1-z)*ellipK(z))/
    (2*(1-z)*z) * diff(z, x);
end_proc:
 What can we do with this code? Obviously, creating Taylor series, and
once ellipE and ellipK also learned to be evaluated at 0, those would
also have useful coefficients. But with the Risch-Norman algorithm, the
definition above is sufficient for a couple of symbolic integrations, too!
>> int(ellipE(x), x)
2 ellipE(x)   2 ellipK(x)     / 2 ellipE(x)   2 ellipK(x) \
----------- - ----------- + x | ----------- + ----------- |
     3             3          \      3             3      /
>> diff(%, x)
2 ellipE(x)   2 ellipK(x)     / ellipE(x) - ellipK(x)
----------- + ----------- + x | --------------------- -
     3             3          \          3 x
   ellipE(x) + ellipK(x) (x - 1) \   ellipE(x) - ellipK(x)
   ----------------------------- | + --------------------- +
            3 x (x - 1)          /            3 x

   ellipE(x) + ellipK(x) (x - 1)
   -----------------------------
            3 x (x - 1)
>> simplify(%)
ellipE(x)
>> int(x*ellipE(x), x)
8 ellipE(x)   8 ellipK(x)    2 / 2 ellipE(x)   2 ellipK(x) \
----------- - ----------- + x  | ----------- + ----------- | +
     45            45          \      5             15     /
     / 2 ellipE(x)   2 ellipK(x) \
   x | ----------- + ----------- |
     \      45            45     /

— * —

)set break resume
)sys rm -f pmint.output
)spool pmint.output
)set message test on
)set message auto off
)clear all

———-

1 Rational Functions

— * —

)clear all
--S 1 of 60
t1a:=(x^7-24*x^4-4*x^2+8*x-8)/(x^8+6*x^6+12*x^4+8*x^2)
--R
--R
--R         7      4     2
--R        x  - 24x  - 4x  + 8x - 8
--R   (1)  ------------------------
--R           8     6      4     2
--R          x  + 6x  + 12x  + 8x
--R                                          Type: Fraction(Polynomial(Integer))
--E 1

--S 2 of 60
t1b:=(4+8*x^2+6*x+3*x^3)/(x*(x^4+4*x^2+4))+log(x)
--R
--R
--R          5     3                 3     2
--R        (x  + 4x  + 4x)log(x) + 3x  + 8x  + 6x + 4
--R   (2)  ------------------------------------------
--R                        5     3
--R                       x  + 4x  + 4x
--R                                                    Type: Expression(Integer)
--E 2
--S 3 of 60
t1c:=integrate(t1a,x)
--R
--R
--R          5     3                 3     2
--R        (x  + 4x  + 4x)log(x) + 3x  + 8x  + 6x + 4
--R   (3)  ------------------------------------------
--R                        5     3
--R                       x  + 4x  + 4x
--R                                         Type: Union(Expression(Integer),...)
--E 3
--S 4 of 60
t1d:=t1c-t1b
--R
--R
--R   (4)  0
--R                                                    Type: Expression(Integer)
--E 4

———-

2 Trigonometric Functions

— * —

)clear all
--S 5 of 60
t2a:=(x-tan(x))/tan(x)^2+tan(x)
--R
--R
--R              3
--R        tan(x)  - tan(x) + x
--R   (1)  --------------------

--R                     2
--R               tan(x)
--R                                                    Type: Expression(Integer)
--E 5
--S 6 of 60
t2b:=(-x-(1/2)*tan(x)*x^2)/tan(x)+(1/2)*log(1+tan(x)^2)
--R
--R
--R                        2         2
--R        tan(x)log(tan(x)  + 1) - x tan(x) - 2x
--R   (2)  --------------------------------------
--R                        2tan(x)
--R                                                    Type: Expression(Integer)
--E 6
--S 7 of 60
t2c:=integrate(t2a,x)
--R
--R
--R                        2         2
--R        tan(x)log(tan(x)  + 1) - x tan(x) - 2x
--R   (3)  --------------------------------------
--R                        2tan(x)
--R                                         Type: Union(Expression(Integer),...)
--E 7
--S 8 of 60
t2d:=t2c-t2b
--R
--R
--R   (4)  0
--R                                                    Type: Expression(Integer)
--E 8

———-

3 Log-Exp Functions

— * —

)clear all
--S 9 of 60
t3a:=(1+x+x*exp(x))*(x+log(x)+exp(x)-1)/((x+log(x)+exp(x))^2*x)
--R
--R

--R              x                       x 2     2       x    2
--R         (x %e  + x + 1)log(x) + x (%e )  + (x  + 1)%e  + x  - 1
--R   (1)  ---------------------------------------------------------
--R                2         x     2               x 2     2  x    3
--R        x log(x)  + (2x %e  + 2x )log(x) + x (%e )  + 2x %e  + x
--R                                                    Type: Expression(Integer)
--E 9
--S 10 of 60
t3b:=1/(x+log(x)+exp(x))+log(x+log(x)+exp(x))
--R
--R
--R                    x                    x
--R        (log(x) + %e  + x)log(log(x) + %e  + x) + 1
--R   (2)  -------------------------------------------
--R                                 x
--R                      log(x) + %e  + x
--R                                                    Type: Expression(Integer)
--E 10
--S 11 of 60
t3c:=integrate(t3a,x)
--R
--R
--R                    x                    x
--R        (log(x) + %e  + x)log(log(x) + %e  + x) + 1
--R   (3)  -------------------------------------------
--R                                 x
--R                      log(x) + %e  + x
--R                                         Type: Union(Expression(Integer),...)
--E 11
--S 12 of 60
t3d:=t3b-t3a
--R
--R
--R   (4)
--R                  2         x     2               x 2     2  x    3
--R         (x log(x)  + (2x %e  + 2x )log(x) + x (%e )  + 2x %e  + x )
--R      *
--R                        x
--R         log(log(x) + %e  + x)
--R     +
--R              x                   x 2       2           x
--R       (- x %e  - 1)log(x) - x (%e )  + (- x  + x - 1)%e  + 1
--R  /
--R             2         x     2               x 2     2  x    3
--R     x log(x)  + (2x %e  + 2x )log(x) + x (%e )  + 2x %e  + x
--R                                                    Type: Expression(Integer)
--E 12

———-

4 Liouvillian Special Functions

— * —

)clear all
--S 13 of 60
t4a:=exp(-x^2)*erf(x)/(erf(x)^3-erf(x)^2-erf(x)+1)
--R
--R
--R                            2
--R                         - x
--R                 erf(x)%e
--R   (1)  ------------------------------
--R              3         2
--R        erf(x)  - erf(x)  - erf(x) + 1
--R                                                    Type: Expression(Integer)
--E 13
--S 14 of 60
t4b:=-(1/4)*(sqrt(%pi)/(erf(x)-1))-(1/8)*sqrt(%pi)*log(erf(x)+1)+_
      (1/8)*sqrt(%pi)*log(erf(x)-1)
--R
--R
--R   (2)
--R                      +---+                               +---+
--R       (- erf(x) + 1)\|%pi log(erf(x) + 1) + (erf(x) - 1)\|%pi log(erf(x) - 1)
--R     +
--R           +---+
--R       - 2\|%pi
--R  /
--R     8erf(x) - 8
--R                                                    Type: Expression(Integer)
--E 14
--S 15 of 60
t4c:=integrate(t4a,x)
--R
--R
--R                     +---+    erf(x) - 1      +---+
--R        (erf(x) - 1)\|%pi log(----------) - 2\|%pi
--R                              erf(x) + 1
--R   (3)  -------------------------------------------
--R                        8erf(x) - 8

--R                                         Type: Union(Expression(Integer),...)
--E 15
--S 16 of 60
t4d:=t4c-t4b
--R
--R
--R         +---+                   +---+                   +---+    erf(x) - 1
--R        \|%pi log(erf(x) + 1) - \|%pi log(erf(x) - 1) + \|%pi log(----------)
--R                                                                  erf(x) + 1
--R   (4)  ---------------------------------------------------------------------
--R                                          8
--R                                                    Type: Expression(Integer)
--E 16

———-

5 Airy Functions

— * —

)clear all
--S 17 of 60
t5a:=(x-AiryAi(x)*AiryAi(1,x))/(x^2-AiryAi(x)^2)
--R
--R   There are no library operations named AiryAi
--R      Use HyperDoc Browse or issue
--R                               )what op AiryAi
--R      to learn if there is any operation containing " AiryAi " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      AiryAi with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 17
--S 18 of 60
t5b:=(1/2)*log(x+AiryAi(x))+(1/2)*log(x-AiryAi(x))
--R
--R   There are no library operations named AiryAi
--R      Use HyperDoc Browse or issue
--R                               )what op AiryAi

--R      to learn if there is any operation containing " AiryAi " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      AiryAi with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 18
--S 19 of 60
t5c:=integrate(t5a,x)
--R
--R
--R   (1)  t5a x
--R                                          Type: Polynomial(Fraction(Integer))
--E 19
--S 20 of 60
t5d:=t5b-t5c
--R
--R
--R   (2)  - t5a x + t5b
--R                                          Type: Polynomial(Fraction(Integer))
--E 20
)clear all
--S 21 of 60
t5e:=x^2*AiryAi(x)
--R
--R   There are no library operations named AiryAi
--R      Use HyperDoc Browse or issue
--R                               )what op AiryAi
--R      to learn if there is any operation containing " AiryAi " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      AiryAi with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 21
--S 22 of 60
t5f:=-AiryAi(x)+AiryAi(1,x)*x
--R

--R   There are no library operations named AiryAi
--R      Use HyperDoc Browse or issue
--R                               )what op AiryAi
--R      to learn if there is any operation containing " AiryAi " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      AiryAi with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 22
--S 23 of 60
t5g:=integrate(t5e,x)
--R
--R
--R   (1)  t5e x
--R                                          Type: Polynomial(Fraction(Integer))
--E 23
--S 24 of 60
t5h:=t5f-t5g
--R
--R
--R   (2)  - t5e x + t5f
--R                                          Type: Polynomial(Fraction(Integer))
--E 24

———-

6 Bessel Functions

— * —

)clear all
--S 25 of 60
t6a:=BesselJ(nu+1,x)/BesselJ(nu,x)
--R
--R   There are no library operations named BesselJ
--R      Use HyperDoc Browse or issue
--R                              )what op BesselJ
--R      to learn if there is any operation containing " BesselJ " in its
--R      name.

--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      BesselJ with argument type(s)
--R                             Polynomial(Integer)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 25
--S 26 of 60
t6b:=nu*log(x)-log(BesselJ(nu,x))
--R
--R   There are no library operations named BesselJ
--R      Use HyperDoc Browse or issue
--R                              )what op BesselJ
--R      to learn if there is any operation containing " BesselJ " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      BesselJ with argument type(s)
--R                                Variable(nu)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 26
--S 27 of 60
t6c:=integrate(t6a,x)
--R
--R
--R   (1)  t6a x
--R                                          Type: Polynomial(Fraction(Integer))
--E 27
--S 28 of 60
t6d:=t6b-t6c
--R
--R
--R   (2)  - t6a x + t6b
--R                                          Type: Polynomial(Fraction(Integer))
--E 28
)clear all
--S 29 of 60
t6e:=normal(nu*BesselJ(nu,x)/x-BesselJ(nu+1,x))
--R

--R   There are no library operations named BesselJ
--R      Use HyperDoc Browse or issue
--R                              )what op BesselJ
--R      to learn if there is any operation containing " BesselJ " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      BesselJ with argument type(s)
--R                                Variable(nu)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 29
--S 30 of 60
t6f:=BesselJ(nu,x)
--R
--R   There are no library operations named BesselJ
--R      Use HyperDoc Browse or issue
--R                              )what op BesselJ
--R      to learn if there is any operation containing " BesselJ " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      BesselJ with argument type(s)
--R                                Variable(nu)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 30
--S 31 of 60
t6g:=integrate(t6e,x)
--R
--R
--R   (1)  t6e x
--R                                          Type: Polynomial(Fraction(Integer))
--E 31
--S 32 of 60
t6h:=t6f-t6g
--R
--R
--R   (2)  - t6e x + t6f
--R                                          Type: Polynomial(Fraction(Integer))
--E 32

———-

7 Whittaker Functions

— * —

)clear all
--S 33 of 60
t7a:=WhittakerW(mu+1,nu,x)/(WhittakerW(mu,nu,x)*x)
--R
--R   There are no library operations named WhittakerW
--R      Use HyperDoc Browse or issue
--R                             )what op WhittakerW
--R      to learn if there is any operation containing " WhittakerW " in
--R      its name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      WhittakerW with argument type(s)
--R                             Polynomial(Integer)
--R                                Variable(nu)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 33
--S 34 of 60
t7b:=(x/2)-mu*log(x)-log(WhattakerW(mu,nu,x))
--R
--R   There are no library operations named WhattakerW
--R      Use HyperDoc Browse or issue
--R                             )what op WhattakerW
--R      to learn if there is any operation containing " WhattakerW " in
--R      its name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      WhattakerW with argument type(s)
--R                                Variable(mu)
--R                                Variable(nu)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.

--E 34
--S 35 of 60
t7c:=integrate(t7a,x)
--R
--R
--R   (1)  t7a x
--R                                          Type: Polynomial(Fraction(Integer))
--E 35
--S 36 of 60
t7d:=t7b-t7c
--R
--R
--R   (2)  - t7a x + t7b
--R                                          Type: Polynomial(Fraction(Integer))
--E 36

———-

8 Lambert W Function

— * —

)clear all
--S 37 of 60
t8a:=LambertW(x)
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 37
--S 38 of 60
t8b:=(x^2+LambertW(x)^2*x^2-LambertW(x)*x^2)/(x*LambertW(x))
--R

--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 38
--S 39 of 60
t8c:=integrate(t8a,x)
--R
--R
--R   (1)  t8a x
--R                                          Type: Polynomial(Fraction(Integer))
--E 39
--S 40 of 60
t8d:=t8b-t8c
--R
--R
--R   (2)  - t8a x + t8b
--R                                          Type: Polynomial(Fraction(Integer))
--E 40
)clear all
--S 41 of 60
t8e:=sin(LambertW(x))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 41

--S 42 of 60
t8f:=((1/2)*LambertW(x)*tan((1/2)*LambertW(x))^2*x^2+_
      LambertW(x)*tan((1/2)*LambertW(x))*x^2+_
      tan((1/2)*LambertW(x))*x^2-_
      (1/2)*LambertW(x)*x^2) / _
     (x*LambertW(x)*(1+tan((1/2)*LambertW(x))^2))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                                 Variable(x)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 42
--S 43 of 60
t8g:=integrate(t8e,x)
--R
--R
--R   (1)  t8e x
--R                                          Type: Polynomial(Fraction(Integer))
--E 43
--S 44 of 60
t8h:=t8f-t8g
--R
--R
--R   (2)  - t8e x + t8f
--R                                          Type: Polynomial(Fraction(Integer))
--E 44
)clear all
--S 45 of 60
t8i:=((x^2+2)*LambertW(x^2)^2+x^2*(2*LambertW(x^2)+1))/(x*(1+LambertW(x^2)^3))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named

--R      LambertW with argument type(s)
--R                             Polynomial(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 45
--S 46 of 60
t8j:=((1/2)*x^4*LambertW(x^2)^2+_
      x^4*LambertW(x^2)+_
      +x^4/2+_
      LambertW(x^2)^2*x^2+_
      x^2*LambertW(x^2))/_
     (x^2*LambertW(x^2)*(1+LambertW(x^2))^2)+_
     log(1+LambertW(x^2))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Polynomial(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 46
--S 47 of 60
t8k:=integrate(t8i,x)
--R
--R
--R   (1)  t8i x
--R                                          Type: Polynomial(Fraction(Integer))
--E 47
--S 48 of 60
t8l:=t8j-t8k
--R
--R
--R   (2)  - t8i x + t8j
--R                                          Type: Polynomial(Fraction(Integer))
--E 48
)clear all
--S 49 of 60
t8m:=(2*LambertW(x^2)*cos(LambertW(x^2))*(a*x+LambertW(x^2))+_

      a*x*(1+LambertW(x^2))+2*LambertW(x^2))/_
     ((1+LambertW(x^2))*(a*x+LambertW(x^2))*x)
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Polynomial(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 49
--S 50 of 60
t8n:=(2*tan((1/2)*LambertW(x^2)))/(1+tan((1/2)*LambertW(x^2))^2)+_
     log(x*x+LambertW(x^2))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Polynomial(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 50
--S 51 of 60
t8o:=integrate(t8m,x)
--R
--R
--R   (1)  t8m x
--R                                          Type: Polynomial(Fraction(Integer))
--E 51
--S 52 of 60
t8p:=t8n-t8o
--R
--R
--R   (2)  - t8m x + t8n

--R                                          Type: Polynomial(Fraction(Integer))
--E 52

———-

9 Wright omega Function

— * —

)clear all
--S 53 of 60
t9a:=LambertW(exp(x))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Expression(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 53
--S 54 of 60
t9b:=(1/2)*LambertW(exp(x))*(LambertW(exp(x))+2)
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Expression(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 54

--S 55 of 60
t9c:=integrate(t9a,x)
--R
--R
--R   (1)  t9a x
--R                                          Type: Polynomial(Fraction(Integer))
--E 55
--S 56 of 60
t9d:=t9b-t9c
--R
--R
--R   (2)  - t9a x + t9b
--R                                          Type: Polynomial(Fraction(Integer))
--E 56
)clear all
--S 57 of 60
t9e:=(1+LambertW(exp(x))*(2+cos(LambertW(exp(x)))*(x+LambertW(exp(x)))))/_
     ((1+LambertW(exp(x)))*(x+LambertW(exp(x))))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Expression(Integer)
--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 57
--S 58 of 60
t9f:=(2*tan((1/2)*LambertW(exp(x))))/(1+tan((1/2)LambertW(exp(x)))^2)+_
     log(x+LambertW(exp(x)))
--R
--R   There are no library operations named LambertW
--R      Use HyperDoc Browse or issue
--R                              )what op LambertW
--R      to learn if there is any operation containing " LambertW " in its
--R      name.
--R
--RDaly Bug
--R   Cannot find a definition or applicable library operation named
--R      LambertW with argument type(s)
--R                             Expression(Integer)

--R
--R      Perhaps you should use "@" to indicate the required return type,
--R      or "$" to specify which version of the function you need.
--E 58
--S 59 of 60
t9g:=integrate(t9e,x)
--R
--R
--R   (1)  t9e x
--R                                          Type: Polynomial(Fraction(Integer))
--E 59
--S 60 of 60
t9h:=t9f-t9g
--R
--R
--R   (2)  - t9e x + t9f
--R                                          Type: Polynomial(Fraction(Integer))
--E 60
)spool
)lisp (bye)

———-

References

[1] Bronstein, Manuel http://www-sop.inria.fr/cafe/Manuel.Bronstein/pmint