Re: calling Legendre function

From: Arthur E. Snyder <snyder_at_slac.stanford.edu>
Date: Fri, 18 Mar 2011 12:58:37 -0700


As I had rouble with getting |mathmore| I wrote my own simple-minded one:

double leg(int m,double x) {

   if(m==0) return 1.0;

   else if(m==1) return x;
   else if(m==2) return (3*x*x-1)/2;
   else if(m==3) return (5*TMath::Power(x,3)-3*x)/2;
   else if(m==4) return (35*TMath::Power(x,4)-30*x*x+3)/8;
   else if(m==5) return
 		  (63*TMath::Power(x,5)-70*TMath::Power(x,3)+15*x)/8;
   else if(m==6) return
 		  (231*TMath::Power(x,6)
 		   -315*TMath::Power(x,4)
 		   +105*x*x
 		   -5)/16;

   double temp=0;
   double sign=1.0;
   int mp=m/2;

   for(int i=0; i<=mp; i++) {

     double term=TMath::Factorial(2*m-2*i);
     term/=TMath::Power(2,m);
     term/=TMath::Factorial(i);
     term/=TMath::Factorial(m-i);
     term/=TMath::Factorial(m-2*i);
     term*=TMath::Power(x,m-2*i);

     temp+=sign*term;


     sign=-sign;

   }

   return temp;

This has numerical problems for large m, so officially available versions are likely better. This works ok for m=10 or so.

-Arthur

A.E. Snyder, Group ?                         \!c*p?/
SLAC Mail Stop #95                          ((.   .))
Box 4349                                        |
Stanford, Ca, USA, 94309                      '\|/`
e-mail:snyder_at_slac.stanford.edu                 o
phone:650-926-2701                              _
http://www.slac.stanford.edu/~snyder          BaBar
FAX:707-313-0250                          Collaboration
                                                 &
                                            Fermi/GLAST



On Thu, 17 Mar 2011, Erkcan Ozcan wrote:

> Hi Nevzat,
>
> I know I am writing the obvious, but have you tried the following?
>
> gSystem->Load("libMathMore")
> ROOT::Math::legendre( ... )
>
> I think for this to work, you must have compiled ROOT with mathmore enabled.
>
> Cheers,
> e.
>
> On 18 Mar 2011, at 00:17, <nguler_at_jlab.org>
> <nguler_at_jlab.org> wrote:
>
>> Dear root users,
>> I could not figure out how to call Legendre functions in a code, without using
>> TF1 object. I don't want to plot it or use it in a fit, I just want to use it
>> in a calculation such that:
>>
>> S(x) = A1*Legendre(1,x) + A2*Legendre(2,x) + ...
>>
>> I appreciate your guidance.
>> Thank you,
>>
>> - Nevzat Guler
>> (757) 553-8318
>>
>
> --
>
> In case they are not written explicitly, please be aware that my greetings and farewell are inherently implied in this email.
>
> V. Erkcan Özcan, PhD
> Assistant Professor
> Bogazici University
> Department of Physics
>
>
>
>
Received on Fri Mar 18 2011 - 20:58:48 CET

This archive was generated by hypermail 2.2.0 : Fri Mar 18 2011 - 23:50:01 CET