The following code allows maxima to integrate the hypergeometric function.
hypergeometric([a1,...,ap],[b1,...,bq],z). It is added to
share/hypergeometric/hypergeometric.lisp.
At present it returns a "Division by 0" error if any of ai are equal to one.
Is this too harsh? I really don't see the value in giving a different
error message.
######
(defun hyp-integral-3 (a b z)
"Integral of hypergeometric(a,b,z) wrt z"
(let ((a-1 (add a -1))
(b-1 (add b -1)))
(mul (reduce #'mul (margs b-1))
(inv (reduce #'mul (margs a-1)))
(take '($hypergeometric) a-1 b-1 z))))
;;Integral of hypergeometric(a,b,z). Only defined for third arg z.
(putprop '$hypergeometric `((a b z) nil nil ,#'hyp-integral-3) 'integral)
#####
(%i1) integrate(hypergeometric([],[2],z),z);
(%o1) hypergeometric([], [1], z)
(%i2) integrate(hypergeometric([i,j],[3],z),z);
2 hypergeometric([i - 1, j - 1], [2], z)
(%o2) ----------------------------------------
(i - 1) (j - 1)
(%i3) integrate(hypergeometric([1],[2],z),z);
Division by 0
-- an error. To debug this try: debugmode(true);