Subject: Work on the Confluent hypergeometric function
From: Dieter Kaiser
Date: Sun, 03 Jan 2010 03:10:42 +0100
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