# The present script will test that redct has been installed properly and can
# be used as an example to treat other integrals. Run this using (on a Unix
# platform)
# maple -b -B
# where is the directory where the files have been installed.
# (Tested 2018/11/21 with Maple2017 and Maple2018.)
# The script will stop on error if any of the ASSERTs below detects a problem.
kernelopts(assertlevel = 1):
interface(errorbreak = 2):
read "redct.mpl";
ASSERT(assigned(GB_to_matrices), "source files cannot be loaded");
# Example of the paper.
f := exp(-p*x) * ChebyshevT(n,x) / sqrt(1-x^2):
# New creative-telescoping algorithm, based on generalized Hermite reduction.
time(assign(
ghred_ct = redct(Int(f, x = -1..1), [n::shift, p::diff])));
ghred_ct;
ASSERT(assigned(ghred_ct), "reduction-based algorithm did not work");
# For comparison sake, old creative-telescoping algorithm, based on rational
# LODE solving.
with(Mgfun):
time(assign(
ratsol_ct = creative_telescoping(f, [n::shift, p::diff], x::diff)));
ratsol_ct;
ASSERT(assigned(ratsol_ct), "rational-solving-based algorithm did not work");
# Both implementations rely on the following generation of equations.
time(assign(
sys = dfinite_expr_to_sys(f, y(n::shift, p::diff, x::diff))));
sys;
# Mgfun:-creative_telescoping has returned pairs [q[1], q[2]] satisfying
# q[1] = diff(q[2], x).
# Check the obtained telescopers (q[1]) by using the certificates (q[2]):
map(q -> q[1] - diff(q[2], x),
eval(ratsol_ct, {_F = unapply(f, n, p), _f = unapply(f, n, p, x)}));
simplify(subs(n = 10, %));
ASSERT(% = [0, 0], "bug in creative_telescoping");
# redct has obtained the same telescopers as creative_telescoping:
ratsol_telescopers := map(q -> q[1], ratsol_ct);
ghred_telescopers := map(Ore_algebra:-applyopr, ghred_ct, _F(n, p),
Ore_algebra:-skew_algebra(shift = [D[n], n], diff = [D[p], p]));
ASSERT(ratsol_telescopers = ghred_telescopers, "equations differ (are they equivalent?)");
print("All is fine.");