Hypergeometric Function of a Matrix Argument
Back
Current version: 1.3, posted
April 11, 2008.
What's new: Improved algorithms for mhg and mhgi which should
be much faster than the previous versions. logmhg remains unchanged.
Previous versions:
1.0,
1.1,
1.2.
Other languages
You can view this page in:
-
Polish,
courtesy of Valeria Aleksandrova.
-
Romanian,
courtesy of Alexandra Seremina.
Installation instructions:
Download and unzip mhg13.zip. You may want to
recompile the C files (by typing, e.g., "mex mhg.c" at the MATLAB prompt).
How to cite:
Plamen Koev and Alan Edelman,
The efficient evaluation of the
hypergeometric function of a matrix
argument, Math. Comp. 75 (2006), 833-846.
Other software:
See Cy Chan's page for
our latest algorithm for computing the hypergeometric function in the case
alpha=1 (beta=2). It is essentially the same as computing
mhg(M,1,a,b,x,y), but uses a different algorithm (made possible by
exploiting properties of the Schur functions), which is also much faster.
Eventually the plan is to merge all algorithms together in a wizzard which
picks the best algorithm depending on the parameters. See our latest paper for details.
General comments:
- How do these algorithms work? See our
paper.
- Only REAL arguments can be passed. If you need to use COMPLEX or
SYMBOLIC arguments, please contact me.
Function description:
mhg
| Syntax: |
[s,c]=mhg(M,alpha,a,b,x,y) |
| Description: |
Computes the truncated Hypergeometric function of one or
two matrix arguments
pFq(alpha)(
a1,..., ap;
b1,..., bq; X, Y)
as a series of Jack functions, truncated for
partitions of size not exceeding M.
|
| Arguments: |
- alpha is positive real
(typically alpha=2 in settings
involving REAL random matrices, and alpha=1 in settings involving
COMPLEX random matrices);
- a and b are real arrays;
- x and y are real arrays containing
the eigenvalues of the matrix arguments X and Y, respectively;
- The argument y may be omitted.
|
| Output: |
- s is the value of the truncated hypergeometric function
- c is a
vector of size M+1 with the
marginal sums for partitions of size 0,1,...,M
(thus s=sum(c)).
|
| Comments: |
Larger values of M will yield more accurate results. There are no rules
on selecting the optimal M. Start with (say) M=10 and experiment until
you obtain the best value of M for your application. The values of the
output vector c may give you some idea about the convergence.
|
| Example 1: |
mhg(20,2,[0.1,0.2],[0.3,0.4],[0.5 0.6 0.7]) returns
3.1349, which is a good approximation to
2F2(2)(0.1,0.2; 0.3,0.4;
diag(0.5,0.6,0.7)).
|
| Example 2: |
mhg(20,1,[ ],[0.1],[0.2 0.3 0.4],[0.5 0.6 0.7]) returns
6.6265, which is a good approximation to
0F1(1)(0.1;
diag(0.2,0.3,0.4),diag(0.5,0.6,0.7)).
|
mhgi
| Syntax: |
[s,c]=mhgi(M,alpha,a,b,n,x) |
| Description: |
Same as mhg when X=xIn is a multiple of the identity
(but using a much more efficient algorithm available for this special
case).
|
| Arguments: |
- alpha, a, and b are as in mhg
- M can now be a vector with 1 or 2 elements. If M is a vector with one
element, then it serves the same purpose as in mhg above. The second,
optional element in M, call it M(2), is such that the summation is only
over partitions whose parts do not exceed M(2)
- n is the size of the matrix argument
- x is a real number or a vector of real numbers
|
| Output: |
- s is the value of the truncated hypergeometric function evaluated at
each element of the vector x
- Since s is a polynomial in x of degree M, the output vector c contains
the
coefficients of that polynomial. This way
s=c(1)+x*c(2)+x^2*c(3)+...+x^M*c(M+1), which is meant componentwise when
x is a
vector. Equivalently, in MATLAB notation, s=polyval(c(end:-1:1),x).
|
| Comments: |
The output vector c is slightly different in mhg and mhgi.
|
| Example: |
mhgi(20,1,[ ],[0.1],3,[0.5 0.6]) returns
the vector [11.9545, 9.3686], which is a good approximation to
0F1(1)(0.1;
x I3) for x=0.5 and 0.6, respectively.
|
logmhg
| Syntax: |
g=logmhg(M,alpha,a,b,x,y) |
| Description: |
Same as mhg, but computes its natural logarithm. Useful in cases
when mhg overflows and for the moment has only one output argument.
|
Plamen Koev Department of Mathematics, Massachusetts Institute
of Technology
"firstname"@math.mit.edu
|
|