Work on the Confluent hypergeometric function



I have done some work on the confluent hypergeometric function:

1.  More consequently inserting simplifying code, 
    e.g. (list '(%erf) x)-> (take '(%erf) x)
2.  Do a mfuncall to get simplified polynomials.
3.  Replace subst with maxima-substitute to get correct substitution.
4.  At places where we get complicated and nested expressions call
    sratsimp.
5.  Use in general a gensym, not 'yannis.
6.  Use flags like gamma_expand and bessel_reduce to simplify further.
7.  Use more simplifying functions like pochhammer.

There a lot of examples which now simplifies much better. Furthermore,
numbers as an argument to hgfred for the 1F1 hypergeometric function are
no longer a problem.


The following algorithm have been implemented in addition:

8.  1F1(a; c; 0) to handle a zero argument completely.

Example:

(%i1) hgfred([a],[c],0);
(%o1) 1


9.  1F1(a; 1; z) for a not an integer or a half integral value.

Example:

(%i3) hgfred([a],[1],x);
(%o3) laguerre(-a,x)


10. 1F1(1/2+n; m; z) and 1F1(1/2-n; m; z), n,m integer:
    These expand in terms of bessel_i functions. We now get results for
    1F1(-3/2,1,z) or 1F1(3/2,1,z)

Examples:

(%i4) hgfred([-3/2],[1],x);
(%o4) -((2*bessel_i(1,x/2)-2*bessel_i(0,x/2))*x^2
       +(6*bessel_i(0,x/2)-4*bessel_i(1,x/2))*x-3*bessel_i(0,x/2))
       *%e^(x/2)
       /3

(%i5) hgfred([3/2],[1],x);
(%o5) ((bessel_i(1,x/2)+bessel_i(0,x/2))*x+bessel_i(0,x/2))*%e^(x/2)

With this extension Maxima can evaluate all Confluent hypergeometric
functions for integer and half integral values. The code uses the
functionality to reduce the bessel_i function to lowest order (new flag
$bessel_reduce). Without this reduction the results can be much more
complicated.


11. 1F1(a; 2*a-n) and 1F1(a; 2*a+n) for a not an integer or half 
    integral value. We get results for expressions like 
    1F1(1/3; -1/3; z) and 1F1(1/3; 5/3; z), ...

Examples:

(%i6) hgfred([1/3],[-1/3],x);
(%o6) -(3*bessel_i(-1/6,x/2)+3*bessel_i(-7/6,x/2))*gamma(5/6)*x^(7/6)
      *%e^(x/2)/2^(4/3)

(%i7) hgfred([1/3],[5/3],x);
(%o7) -(2^(2/3)*gamma(5/6)*bessel_i(5/6,x/2)
       -2^(2/3)*bessel_i(-1/6,x/2)*gamma(5/6))
       *x^(1/6)*%e^(x/2)/2


12. Introducing a flag $prefer_gamma_incomplete, when T return results
    in terms of gamma_incomplete and not %gammagreek.

Example:

(%i8) hgfred([a],[a+1],-z),prefer_gamma_incomplete:true;
(%o8) -(a*gamma_incomplete(a,z)-a*gamma(a))/z^a

Maxima has more knowledge about the gamma_incomplete function.
Therefore, it might be preferable to get results in terms of
gamma_incomplete.


The examples in rtesthyp.mac are updated. More examples for the
confluent hypergeometic function have been added.

In rtest_hypgeo.mac problem 61 gives a different result in terms of
bessel_i, because the hypergeometric function hgfred([7/3],[5/3],z) is
known in addition.

In rtest16.mac problem 138 the laguerre function simplifies to a
polynomial.

Dieter Kaiser