Hi All,
I am trying to compute the Lauricella function of type FA (n) [a; 1,...,1; b1,...,bn; x1,...xn] using the Burchnall–Chaundy expansion which basically reduces it to the product of Gauss hypergeometric functions. Convergence of the series is guaranteed as |x1| + ... |xn| < 1 always. This approcah seems to give correct result when |x1| + ... |xn| is around 0.9 or less, and any increase above 0.9 results in rapid deviation from the expected value as observed from the output (obtained result is less than the expected value by some orders). Is it an issue due to the convergence or something else?. Can anybody comment on the above issue as my obesrvation above is by repeated trials only. Any views on how I can take care of this issue or atleast increase the range of accurate result?
Also is there any specfic values for Lauricella functions available anywhere so that I can check the accuracy of my computation because as of now I am using some crude method of checking the accuracy of the output.
Thanks a lot in advance.
Best regards,
Vish
Code
There might be some bugs (which may be fixed or not in other Maple versions) - it is hard to tell without seeing an example. It would be easier if you just posted some code that could be tried, and expected results.
Alec
Here is the worksheet
Hi Alec,
Thanks for the reply. Please find the attached file which gives the description and instance of the computation.
Best regards,
VishView 8014_Worksheet.mw on MapleNet or Download 8014_Worksheet.mw
View file details
more likely you have typos
1D-input
I agree with Axel that it would be much easier in the Classic interface with 1D-input, preferably posted on this site in plain text, so that it could be copied and pasted into Maple instead of retyping. Maybe, 2d-input looks nicer for somebody, but it is impossible to use it by copying and pasting from MapleNet. I started retyping it, but it took long time and I didn't finish it. I can't distinguish from the screen whether it is i, or j, or something else.
The loop with the product could, probably, be replaced with a single product command.
Alec
well ...
Running the inner loop with uppercase Hypergeom, an unsigned r and CS=L*C one gets a result, which lets one guess the original formula used here (by varying L): hypergeom([1, 1+L*C],[1+C],r)^L * GAMMA(1+(C+r)*L)/(GAMMA(r+1+L*C)^(L-1))/GAMMA((C+r)*L+1-3*r)*GAMMA(1+L*C)^(L-1); Substituting postive integers for L and C this turns out to be a rational function in r, up to factors involving the Gamma function: subs(L=4, C = 1, %); convert(%,StandardFunctions): factor(%): f:=unapply(%,r); 4 2 4 54 GAMMA(5 + 4 r) (r - 2) (r - 2 r + 2) f := r -> ------------------------------------------ 16 4 (r - 1) GAMMA(r + 5) The outer loop only defines test values, which may be sampled into an Array and applies f to that. Or one does it follows: data:=[a = 1, C = 1, L = 4]; for rangedb from -5 by 5 to 40 do y := 10^((1/10)*rangedb); R := C/y; r := R/(a+L*R); eval(f(r),data); print('f'(r)=evalf[20](%)); #print('f'(eval(r,data))=evalf[20](%)); end do: Whether those are results coinciding with the article now is on you, since that paper is not public available :-) For your series problem: using series for hypergeometrics (if even allowed to be used) becomes quite a mess for inputs x where abs(x) > 2/3 and Maple uses other ways. However usually you do not need to care how Maple does it, just call the function.Refernce paper and the code as text
Hi,
I am sorry about the uploaded file format. I have just included the same piece of code in simple text. I had used the 2D input just to show the behaviour of the function with different input values as the deviation of the result from the expected value is not quite visble for 1D input.
Digits := 50: interface(displayprecision = 3):
a := 1: C := 1.000: L := 4: CS := C*L: result := array(1 .. 10): ind := 1:
for rangedb from -5 by 5 to 40 do
y := 10^((1/10)*rangedb):
R := C/y:
r := R/(a+L*R):
result[ind] := simplify((Product(GAMMA(1+CS)*GAMMA(1+CS+(L-n+1)*r)*hypergeom([1+CS, 1], [1+C], r)/(GAMMA(r+1+CS)*GAMMA(1+CS+(L-n)*r)), n = 1 .. L-1))*hypergeom([1+CS, 1], [1+C], r)):
ind := ind+1:
end do:
print(result)
[17.695 11.074 4.878 2.141 1.333 1.102 1.032 1.010 1.003 1.001]
Expected result by directly computing the series form of Lauricella function is
[108.4473 26.0417 6.2848 2.2387 1.3409 1.1025 1.0319 1.0100 1.0032 1.0010].
Axel, Your previous post was very informative, thanks, but the formula for the original case given by you seeems to be bit different from what I was trying to evaluate in the sense that expression term given by you
GAMMA(1+(C+r)*L)/GAMMA((C+r)*L+1-3*r) is actually
GAMMA(1+(C+r)*L)/GAMMA(1+(C+r)*L-r). Though I could not make out how it was obtained in your case, but the numerical values seems to be bit different.
Regarding the convergence issue, I was commenting on the behaviour of the Lauricella function output from the above method for a range of inputs, i.e. deviation at the values |x1|+|x2|+..+|xL| closer to unity. I am not sure is there some cancellation error as pointed out by you earlier but its not getting healed by increasing the precision. I have just uploaded the article for your reference [Equations 3,5,9 and 10].
Thanks a lot,
Vish
Download 8014_Some decomposition formulas.pdf
View file details
I think you have some coding error