Register to reply

Need help with a fortran-routine that calculates the associated Laguerre function

Share this thread:
d4n1el
#1
Aug10-11, 04:33 PM
P: 3
Hi!
Im trying to do some rather easy QM-calculations in Fortran.
To do that i need a routine that calculates the generalized Laguerre polynomials.

I just did the simplest implementation of the equation:
[tex]L^l_n(x)=\sum_{k=0}^n\frac{(n+l)!(-x^2)^k}{(n-k)!k!}[/tex]

I implemented this in the following way:
      SUBROUTINE LAGUERRE(n,l,r,u,arraylength)
      Implicit none
      INTEGER, INTENT(IN) :: arraylength,n
      real(kind=kind(0.d0)), INTENT(IN) :: l
      REAL(kind=kind(0.d0)), INTENT(IN),DIMENSION(arraylength) :: r
      REAL(kind=kind(0.d0)), INTENT(OUT),DIMENSION(arraylength) :: u
      REAL(kind=kind(0.d0)), DIMENSION(arraylength) :: temp
      Integer :: m
   
      temp=0.d0
      do m=0,n
         temp=temp+gamma(real(n)+l+1.0)*(-r)**m/
     +        (gamma(real(n)-real(m)+1.0)*gamma(l+real(m)+1.0)
     +        *gamma(real(m)+1.0))
      end do
      u=temp
      END SUBROUTINE LAGUERRE
The code is running and i do get results, but when i compare them with the results given in for example Mathematica, they seems quite strange.
So my questions are: Do you see some obvious mistakes? Do you think there are possibilities for numerical errors? (In such a case, do you have any advices on improvments?)

When i have been googling around, it looks like alot of the numerical implementations are using recursive relations. What are the pro's and con's for doing this kind of calculation in such a manner?
Phys.Org News Partner Science news on Phys.org
Experts defend operational earthquake forecasting, counter critiques
EU urged to convert TV frequencies to mobile broadband
Sierra Nevada freshwater runoff could drop 26 percent by 2100
SteamKing
#2
Aug12-11, 06:42 AM
Emeritus
Sci Advisor
HW Helper
Thanks
PF Gold
P: 6,559
What is gamma? Is it an array, a function, a subroutine?
uart
#3
Aug12-11, 08:44 AM
Sci Advisor
P: 2,751
Quote Quote by SteamKing View Post
What is gamma? Is it an array, a function, a subroutine?
It looks like he's using it for factorial so it must the special function gamma (which reduces to factorial for integer values of the argument : gamma(n+1) = n! ).


I just did the simplest implementation of the equation:
[tex]L^l_n(x)=\sum_{k=0}^n\frac{(n+l)!(-x^2)^k}{(n-k)!k!}[/tex]

I implemented this in the following way:
      SUBROUTINE LAGUERRE(n,l,r,u,arraylength)
      Implicit none
      INTEGER, INTENT(IN) :: arraylength,n
      real(kind=kind(0.d0)), INTENT(IN) :: l
      REAL(kind=kind(0.d0)), INTENT(IN),DIMENSION(arraylength) :: r
      REAL(kind=kind(0.d0)), INTENT(OUT),DIMENSION(arraylength) :: u
      REAL(kind=kind(0.d0)), DIMENSION(arraylength) :: temp
      Integer :: m
   
      temp=0.d0
      do m=0,n
         temp=temp+gamma(real(n)+l+1.0)*(-r)**m/
     +        (gamma(real(n)-real(m)+1.0)*gamma(l+real(m)+1.0)
     +        *gamma(real(m)+1.0))
      end do
      u=temp
      END SUBROUTINE LAGUERRE
Do you see some obvious mistakes?
Why are "r" and "u" declared as arrays yet you don't index them like arrays?

Where did the (l+k)! term come from?
Why isn't "r" squared.


Register to reply

Related Discussions
Fortran Routine calling a Python Function Programming & Computer Science 2
Function with calculates the profit in terms of qty sold! Calculus & Beyond Homework 3
Dot product calculates what exactly? General Math 14
Determine a function that calculates the nth weight factor of a wave function Advanced Physics Homework 0
Calculates a moment of inertia for Circle General Math 1