LegendreP Evaluation Mystery
- To: mathgroup at smc.vnet.net
- Subject: [mg75055] LegendreP Evaluation Mystery
- From: "Antonio" <aneves at gmail.com>
- Date: Mon, 16 Apr 2007 04:05:23 -0400 (EDT)
Dear all,
I have found that Mathematica v5.2 evaluates BesselJ and LegendreP
differently. Why is this? I have written this test below to illustrate
the timing.
In[11]:=
k=10000;
n=51;
m=Random[Integer,{0,n}];
x=Random[Real,{0,1}];
P[y_]=LegendreP[n,m,y];
J[y_]=BesselJ[n,y];
Timing[Do[LegendreP[n,m,x],{k}]]
Timing[Do[P[x],{k}]]
Timing[Do[BesselJ[n,x],{k}]]
Timing[Do[J[x],{k}]]
Out[17]=
{4.531 Second,Null}
Out[18]=
{0.484 Second,Null}
Out[19]=
{0.61 Second,Null}
Out[20]=
{0.657 Second,Null}
The emphasis here is with the Associated Legendre Function, since it is
a bottel neck of my current calculations for big n's (n>50), used
inside NIntegrate. The form LegendreP[n,m,x] takes longer to evaluate
than in extended form (P[y])? If I try to use the extended form to do
some numerical integration, it results in a wrong result even though
it is faster.
When plotting the functions, it seems to show some numerical
instabilities (for low m):
n = 51; m = 3;
Plot[LegendreP[n, m, x], {x, 0, 1}, PlotRange -> All, PlotPoints ->
100];
Plot[P[x], {x, 0, 1}, PlotRange -> All, PlotPoints -> 100];
And it is worse for m=0. Does Mathematica evaluate LegendreP
differently for high n's, why does it take so long? Is there any way
that I build an array of extended Associated Legendre functions, so as
to speed up calculations and wouldn't fail numerically as above?
Antonio