The Museum of HP Calculators


Associated Legendre Functions for the HP-41

This program is Copyright © 2006 by Jean-Marc Baillard and is used here by permission.

This program is supplied without representation or warranty of any kind. Jean-Marc Baillard and The Museum of HP Calculators therefore assume no responsibility and shall have no liability, consequential or otherwise, of any kind arising from the use of this program material or any part thereof.


Overview
 

 1°) Pnm(x)   with 0 <= m <= n  (integer order & degree)   ( new )
 2°) Pnm(x) & Qnm(x)   with 0 <= m <= n  (integer order & degree)
 3°) Associated Legendre Functions Pnm(x) & Qnm(x)  (fractional order & degree)  | x | < 1   ( improved )

 4°) Associated Legendre Functions of the first kind ( fractional order & degree )  with  | x | < 1       ( new )
 5°) Associated Legendre Functions of the first kind ( fractional order & degree )  with  -1 < x  < 3   ( improved )
 6°) Associated Legendre Functions of the first kind ( fractional order & degree )  with   x > 1           ( improved )

 7°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  | x | < 1
 8°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  -1 < x  < 3   ( new )
 9°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  | x | > 1       ( improved )
 
 

1°) Pnm(x)   with 0 <= m <= n  (integer order & degree)
 

Formulae:      (n-m) Pnm(x) = x (2n-1) Pn-1m(x) - (n+m-1) Pn-2m(x)

                                Pmm(x) = (-1)m (2m-1)!!  ( 1-x2 )m/2   if  | x | < 1                   where (2m-1)!! = (2m-1)(2m-3)(2m-5).......5.3.1
                                Pmm(x) =   (2m-1)!!  ( x2-1 )m/2   if  | x | > 1

-If  m = 0 , we have Legendre polynomials ( see also "Orthogonal Polynomials for the HP-41" )

Data Registers: /
Flags: /
Subroutines: /

-Synthetic registers M N O may be replaced by any data registers.
 

01  LBL "PMN"
02  STO O
03  CLX
04   E3
05  /
06  STO N
07  X<>Y
08  STO M
09  ST+ N
10  ST+ X
11  1
12  ST- Y
13  X<>Y
14  LBL 00
15  2
16  -
17  X>0?
18  ST* Y
19  X>0?
20  GTO 00
21  SIGN
22  RCL M
23  Y^X
24  *
25  1
26  RCL O
27  X^2
28  -
29  X>0?
30  GTO 01
31  X<>Y
32  ABS
33  X<>Y
34  ABS
35  LBL 01
36  RCL M
37  2
38  /
39  X=Y?
40  X#0?
41  X<0?
42  ISG Y
43  ""             ( TEXT 0  or another NOP instruction like  STO X  ...  )
44  Y^X
45  *
46  CHS
47  0
48  LBL 02
49  RCL M
50  RCL N
51  INT
52  +
53  1
54  -
55  ABS
56  CHS
57  R^
58  *
59  RCL N
60  INT
61  ST+ X
62  1
63  -
64  RCL O
65  *
66  R^
67  *
68  +
69  RCL N
70  INT
71  RCL M
72  -
73  X=0?
74  SIGN
75  /
76  ISG N
77  GTO 02
78  CLA
79  END

( 110 bytes / SIZE 000 )
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n        Pnm-1(x)
           X             x         Pnm(x)

Examples:

   4  ENTER^
   7  ENTER^
   3  XEQ "PMN"  >>>>  P74(3) =  37920960    X<>Y    P64(3) =  2963520    ( execution time = 6 seconds )

     3   ENTER^
  100  ENTER^
   0.7  XEQ "PMN"  >>>>  P1003(0.7) = -58239.28386   X<>Y    P993(0.7) =  13003.91702   ( in 1mn31s )
 
 

2°) Pnm(x) & Qnm(x) with 0 <= m <= n  (integer order & degree)
 

Formulae:     Pnm(x) = ( x2-1 )m/2 dmPn(x)/dxm  if  | x | > 1           Pnm(x) = (-1)m ( 1- x2 )m/2 dmPn(x)/dxm  if  | x | < 1
                      Qnm(x) = ( x2-1 )m/2 dmQn(x)/dxm  if  | x | > 1         Qnm(x) = (-1)m ( 1- x2 )m/2 dmQn(x)/dxm  if  | x | < 1

-if  m = 0   Pnm(x) = Pn(x) = Legendre polynomials  ( cf "Orthogonal Polynomials for the HP-41" )
        and   Qnm(x) = Qn(x)  with  Q0(x) = 0.5 Ln | (1+x)/(1-x) |  ;  Q1(x) = x/2 Ln | (1+x)/(1-x) | - 1  and   n.Qn(x) = (2n-1).x.Qn-1(x) - (n-1).Qn-2(x)

-We have employed the recurrence relations:   Pnm+1(x) = | x2-1 |-1/2 [ (n-m).x. Pnm(x) - (n+m). Pn-1m(x) ]   ( the same relation holds for Qnm(x) )

Important note:   If | x | is significantly greater than 1 , Qnm(x) is obtained ( very ) inaccurately and "ALF2C" is preferable ( see 9°) below )
                             ( the recurrende relation is unstable in this case )

Data Registers:      R00 to Rnn: temp
Flags: F05 & F02    if flag F02 is clear "PQMN" calculates  Pnm(x)
                                 if flag F02 is set    "PQMN" ----------  Qnm(x)
Subroutines: /
 

-This program uses 4 synthetic registers M N O P
-Don't interrupt "PQMN": the content of register P could be altered
-These 4 registers may of course be replaced by any unused data registers ( Rpp with p > n )
 

  01  LBL "PQMN"
  02  X<> Z
  03  STO O
  04  RDN
  05  CF 05
  06  X=0?
  07  SF 05
  08   E3
  09  /
  10  1
  11  +
  12  STO M
  13  X<>Y
  14  STO Y
  15  LASTX
  16  STO 00
  17  FC? 02
  18  GTO 01
  19  ST+ Y
  20  RCL Z
  21  -
  22  /
  23  ABS
  24  SQRT
  25  LN
  26  STO 00
  27  LBL 01
  28  STO N
  29  RCL Z
  30  *
  31  STO P
  32  -
  33  RCL M
  34  INT
  35  1/X
  36  ENTER^
  37  SIGN
  38  -
  39  FS? 02
  40  X#0?
  41  GTO 02
  42  SIGN
  43  STO Y
  44  CHS
  45  LBL 02
  46  *
  47  RCL P
  48  +
  49  RCL N
  50  X<>Y
  51  STO IND M
  52  ISG M
  53  GTO 01
  54  RCL Z
  55  1
  56  ST- M
  57  X<> O
  58  X=0?
  59  GTO 04
  60  1
  61  -
  62   E3
  63  /
  64  STO O
  65  X<> M
  66  INT
  67  STO N
  68  STO P
  69  X<>Y
  70  LBL 03
  71  RCL IND N
  72  RCL Y
  73  *
  74  RCL N
  75  RCL M
  76  INT
  77  -
  78  ST* Y
  79  LASTX
  80  ST+ X
  81  +
  82  DSE N
  83  ""                       TEXT0   or another NOP instruction like  LBL 00  STO X  ...  etc  ...
  84  RCL IND N
  85  *
  86  -
  87  X<>Y
  88  X^2
  89  ENTER^
  90  SIGN
  91  ST+ N
  92  -
  93  ABS
  94  SQRT
  95  X=0?
  96  SIGN
  97  /
  98  STO IND N
  99  DSE N
100  ""                       TEXT0   or another NOP instruction like  LBL 00  STO X  ...  etc  ...
101  X<>Y
102  ISG O
103  GTO 03
104  RCL P
105  STO N
106  SIGN
107  RCL O
108  FRC
109  +
110  RCL M
111  INT
112  +
113  STO O
114  X<>Y
115  ISG M
116  GTO 03
117  X<>Y
118  LBL 04
119  RDN
120  SIGN
121  RDN
122  FS?C 05
123  RCL 00
124  CLA
125  END

( 187 bytes / SIZE nnn+1 )
 
 
 
      STACK        INPUTS      OUTPUTS
           Z             m            /
           Y             n             /
           X             x          F(x)
           L             /            x

with  F(x) =  Pnm(x)  if flag F02 is clear  and   F(x) =   Qnm(x)  if flag F02 is set.
 

Example:    Calculate   P74(0.6)  &   Q74(0.6)
 

a) SIZE 008  ( or greater )

b) CF 02    4      ENTER^
                  7      ENTER^
                0.6     XEQ "PQMN"  yields   P74(0.6) = 715.3090560   ( in 17 seconds )

c) SF 02    4      ENTER^
                 7      ENTER^
               0.6       R/S          gives     Q74(0.6) = -1011.171802  ( in 17 seconds )

-Similarly:      P74(1.2) = 6327.212011   &   Q74(1.2) = 82.12107441

-For x = 1.2   Q74(x)  is still acceptable ( "ALF2B" produces  82.12107808 )
  but for x = 3 , the errors are too great and "ALF2B" is much better ( cf 7°) below )
 

3°) Associated Legendre Functions Pnm(x) & Qnm(x)  (fractional order & degree)  | x | < 1
 

-Actually, these functions are solutions of the differential equation:  ( 1- x2 ) d2y/dx2 - 2.x.dy/dx + [ n(n+1) - m2/( 1- x2 ) ] y = 0
-Thus, we can seek these solutions by substituting the series  y = a0 + a1.x + a2.x2 + ...... + ak.xk + ...... in this differential equation.
-This approach leads to the recurrence relation:  (k+1)(k+2) ak+2 = [ m2+2k2-n(n+1) ] ak + [ (k-2)(1-k) + n(n+1) ] ak-2        ( a-1= a-2 = 0 )

and  a0 = 2m/pi1/2 cos pi(n+m)/2 . Gam((n+m+1)/2) / Gam((n-m+2)/2)
        a1 = 2m+1/pi1/2 sin pi(n+m)/2 . Gam((n+m+2)/2) / Gam((n-m+1)/2)    for  Pnm(x)

        a0 = -2m-1pi1/2 sin pi(n+m)/2 Gam((n+m+1)/2) / Gam((n-m+2)/2)
        a1 = 2m pi1/2 cos pi(n+m)/2 Gam((n+m+2)/2) / Gam((n-m+1)/2)   for  Qnm(x)
 

Data Registers:      R00 to R09: temp  ( when the program stops, R00 = x & R01 = Pnm(x)  or  Qnm(x) )
Flags:  F02              if flag F02 is clear "ALF" calculates  Pnm(x)
                                 if flag F02 is set    "ALF" ----------  Qnm(x)
Subroutine:  "1/G"  ( Reciprocal of the Gamma Function ) or "1/G+" for a better accuracy.
 

  01  LBL "ALF"
  02  STO 00
  03  RDN
  04  STO 03
  05  X<>Y
  06  STO 02
  07  -
  08  2
  09  ST+ Y
  10  /
  11  STO 05
  12  XEQ "1/G"
  13  STO 06
  14  RCL 02
  15  RCL 03
  16  +
  17  STO 08
  18  1
  19  +
  20  2
  21  /
  22  STO 04
  23  XEQ "1/G"
  24  ST/ 06
  25  RCL 05
  26  .5
  27  ST+ 04
  28  -
  29  XEQ "1/G"
  30  STO 07
  31  RCL 04
  32  XEQ "1/G"
  33  ST/ 07
  34  RCL 08
  35  1
  36  ASIN
  37  *
  38  1
  39  P-R
  40  FS? 02
  41  X<>Y
  42  FS? 02
  43  CHS
  44  ST* 06
  45  X<>Y
  46  ST* 07
  47  2
  48  RCL 02
  49  ST* 02
  50  Y^X
  51  FC? 02
  52  ST+ X
  53  PI
  54  SQRT
  55  FC? 02
  56  1/X
  57  *
  58  ST* 07
  59  2
  60  /
  61  ST* 06
  62  RCL 00
  63  RCL 07
  64  *
  65  STO 07
  66  RCL 06
  67  +
  68  STO 01
  69  CLX
  70  STO 04
  71  STO 05
  72  STO 08
  73  RCL 03
  74  1
  75  +
  76  ST* 03
  77  LBL 01
  78  3
  79  STO 09
  80  LBL 02
  81  RCL 08
  82  2
  83  -
  84  1
  85  RCL 08
  86  -
  87  *
  88  RCL 03
  89  +
  90  RCL 04
  91  *
  92  RCL 00
  93  X^2
  94  *
  95  RCL 02
  96  RCL 08
  97  X^2
  98  ST+ X
  99  +
100  RCL 03
101  -
102  RCL 06
103  *
104  +
105  RCL 00
106  X^2
107  *
108  RCL 08
109  1
110  +
111  STO 08
112  RCL 08
113  LAST X
114  +
115  *
116  /
117  X<> 07
118  X<> 06
119  X<> 05
120  STO 04
121  RCL 07
122  RCL 01
123  +
124  STO 01
125  LASTX
126  X#Y?
127  GTO 01
128  DSE 09
129  GTO 02
130  END

( 177 bytes / SIZE 010 )
 
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n          F(x)
           X             x          F(x)

with  F(x) =  Pnm(x)  if flag F02 is clear  and   F(x) =   Qnm(x) if flag F02 is set.
 

Example:    Calculate   P1.30.4(0.7)  &   Q1.30.4(0.7)

 CF 02    0.4   ENTER^
               1.3   ENTER^
               0.7   XEQ "ALF"  >>>>   P1.30.4(0.7)  =  0.274932821     ( in 1mn59s )

 SF 02    0.4   ENTER^
               1.3   ENTER^
               0.7      R/S          >>>>   Q1.30.4(0.7)  =  -1.317935684    ( in  1mn45s )

 SF 02     3    ENTER^
                1    ENTER^
               0.2     R/S           >>>>   Q13(0.2)  =  -1.701034548    ( in 51s )
 

4°) Associated Legendre Functions of the first kind ( fractional order & degree ) with  | x | < 1
 

Formula:       Pnm(x) = 2m pi1/2  (x2-1)-m/2 [ 1/Gam((1-m-n)/2) / Gam((2-m+n)/2) .  F(-n/2-m/2 ; 1/2+n/2-m/2 ; 1/2 ; x2 )
                                                                     - 2x/Gam((1+n-m)/2) / Gam((-n-m)/2) .  F((1-m-n)/2 ; (2+n-m)/2 ; 3/2 ; x2 )  ]
 

Data Registers:         R00 to R07: temp
Flags: /
Subroutines:  "GAM" or "GAM+"  ( Gamma function )
                         "HGF"   ( Hypergeometric functions )
 

01  LBL "ALF1"
02  STO 04
03  RDN
04  STO 01
05  STO 06
06  X<>Y
07  ST+ 01
08  STO 05
09  -
10  1
11  +
12  .5
13  STO 03
14  *
15  STO 02
16  LASTX
17  CHS
18  ST* 01
19  RCL 04
20  X^2
21  XEQ "HGF"
22  STO 07
23  RCL 01
24  XEQ "GAM+"            or   XEQ "GAM"
25  ST/ 04
26  RCL 02
27  XEQ "GAM+"
28  ST/ 04
29  RCL 03
30  ST+ 01
31  ST+ 02
32  ISG 03
33  RCL 00
34  XEQ "HGF"
35  ST* 04
36  RCL 01
37  XEQ "GAM+"
38  ST/ 07
39  RCL 02
40  XEQ "GAM+"
41  ST/ 07
42  RCL 07
43  RCL 04
44  ST+ X
45  -
46  4
47  ENTER^
48  SIGN
49  RCL 00
50  -
51  /
52  RCL 05
53  Y^X
54  PI
55  *
56  SQRT
57  *
58  END

( 107 bytes / SIZE 008 )
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n             /
           X             x         Pnm(x)

Example:

    0.4   ENTER^
    1.3   ENTER^
    0.7   XEQ "ALF1"  >>>>   P1.30.4(0.7)  =  0.274932822     ( in 58s )
 
 

5°) Associated Legendre Functions of the first kind ( fractional order & degree ) with  -1 < x  < 3
 

Formula:      Pnm(x) = |(x+1)/(x-1)|m/2  F(-n ; n+1 ; 1-m ; (1-x)/2 ) / Gamma(1-m)        (  x # 1 )
 

Data Registers:         R00 to R06: temp
Flags: /
Subroutines:  "GAM"  ( Gamma function )
                         "HGF"   ( Hypergeometric functions )
 

01  LBL "ALF1B"
02  STO 04
03  RDN
04  STO 02
05  CHS
06  STO 01
07  1
08  ENTER^
09  ST+ 02
10  R^
11  STO 05
12  -
13  STO 03
14  CLX
15  RCL 04
16  -
17  2
18  ST/ 05
19  /
20  XEQ "HGF"
21  X<> 03
22  XEQ "GAM"
23  ST/ 03
24  RCL 03
25  RCL 04
26  1
27  +
28  RCL 04
29  LASTX
30  -
31  /
32  ABS
33  RCL 05
34  Y^X
35  *
36  END

( 58 bytes / SIZE 006 )
 
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n             /
           X             x         Pnm(x)

Example:    Calculate   P1.30.4(1.9)

    0.4  ENTER^
    1.3  ENTER^
    1.9  XEQ "ALF1B"  gives   2.980130385  ( in 26 seconds )

-This program will not work if m = 1,2,3,4, ..... unless you replace line 20 by  XEQ "HGF2"  and line 22 by  FC? 00  XEQ "GAM"  FC?C 00

-With this modification, you'll find, for example:   P73(1.7) = 102985.1588   ( in 9 seconds )
 
 

6°) Associated Legendre Functions of the first kind ( fractional order & degree )  with   x > 1
 

Formula:      Pnm(x) = 2-n-1pi-1/2Gam(-1/2-n) x-n+m-1/ ((x2-1)m/2Gam(-n-m)) F(1/2+n/2-m/2;1+n/2-m/2;n+3/2;1/x2)
                                    +2npi-1/2Gam(1/2+n) xn+m/ ((x2-1)m/2Gam(1+n-m)) F(-n/2-m/2;1/2-n/2-m/2;1/2-n;1/x2)

( The factor pi-1/2 in the second term is omitted by mistake in the "Handbook of Mathematical Functions" page 332 )
 

Data Registers:         R00 to R08: temp
Flags: /
Subroutines:  "GAM"  ( Gamma function )
                         "HGF"   ( Hypergeometric functions )
 

01  LBL "ALF1C"
02  STO 04
03  RDN
04  STO 05
05  X<>Y
06  STO 06
07  -
08  .5
09  ST* Y
10  +
11  STO 01
12  LASTX
13  +
14  STO 02
15  1.5
16  RCL 05
17  +
18  STO 03
19  RCL 04
20  X^2
21  1/X
22  XEQ "HGF"
23  STO 07
24  1
25  RCL 03
26  -
27  XEQ "GAM"
28  ST* 07
29  RCL 05
30  RCL 06
31  +
32  CHS
33  STO 01
34  XEQ "GAM"
35  ST/ 07
36  .5
37  ST* 01
38  RCL 01
39  X<>Y
40  +
41  STO 02
42  LASTX
43  RCL 05
44  -
45  STO 03
46  RCL 00
47  XEQ "HGF"
48  2
49  ST/ 07
50  RCL 05
51  Y^X
52  ST/ 07
53  *
54  RCL 04
55  ST/ 07
56  RCL 05
57  Y^X
58  ST/ 07
59  *
60  STO 02
61  RCL 05
62  RCL 06
63  -
64  1
65  +
66  XEQ "GAM"
67  ST/ 02
68  1
69  RCL 03
70  -
71  XEQ "GAM"
72  RCL 02
73  *
74  RCL 07
75  +
76  RCL 04
77  X^2
78  ENTER^
79  ENTER^
80  SIGN
81  -
82  /
83  RCL 06
84  2
85  /
86  Y^X
87  *
88  PI
89  SQRT
90  /
91  END

( 138 bytes / SIZE 008 )
 
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n             /
           X             x         Pnm(x)

Example:    Calculate   P1.7-0.6(4.8)

  -0.6  ENTER^
   1.7  ENTER^
   4.8  XEQ "ALF1C"  >>>>>  10.67810283    ( in 38 seconds )

-Many other relations between the Legendre Functions and the hypergeometric Functions may be found  in the "Handbook of Mathematical Functions".
 
 

7°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  | x | < 1
 

Formula:      Qnm(x) = 2m pi1/2  (1-x2)-m/2 [ -Gam((1+m+n)/2)/(2.Gam((2-m+n)/2)) . sin pi(m+n)/2 .  F(-n/2-m/2 ; 1/2+n/2-m/2 ; 1/2 ; x2 )
                                                                     + x.Gam((2+n+m)/2) / Gam((1+n-m)/2) . cos pi(m+n)/2 . F((1-m-n)/2 ; (2+n-m)/2 ; 3/2 ; x2 )  ]
 
 

Data Registers:         R00 to R07: temp
Flags: /
Subroutines:  "1/G"  ( 1/Gamma function )
                        "HGF"   ( Hypergeometric functions )
 
 

01  LBL "ALF2"
02  STO 04
03  RDN
04  STO 05
05  X<>Y
06  STO 06
07  +
08  .5
09  STO 03
10  *
11  CHS
12  STO 01
13  1
14  RCL 05
15  +
16  RCL 06
17  -
18  RCL 03
19  *
20  STO 02
21  RCL 04
22  X^2
23  XEQ "HGF"
24  STO 07
25  RCL 02
26  RCL 03
27  +
28  XEQ "1/G"
29  2
30  /
31  ST* 07
32  RCL 02
33  RCL 06
34  +
35  XEQ "1/G"
36  ST/ 07
37  RCL 03
38  ST+ 01
39  ST+ 02
40  ISG 03
41  RCL 00
42  XEQ "HGF"
43  ST* 04
44  RCL 01
45  RCL 05
46  +
47  XEQ "1/G"
48  ST* 04
49  RCL 02
50  RCL 06
51  +
52  XEQ "1/G"
53  ST/ 04
54  RCL 05
55  RCL 06
56  +
57  1
58  ASIN
59  *
60  SIN
61  ST* 07
62  LASTX
63  COS
64  RCL 04
65  *
66  RCL 07
67  -
68  PI
69  SQRT
70  *
71  4
72  1
73  RCL 00
74  -
75  /
76  RCL 06
77  2
78  /
79  Y^X
80  *
81  END

( 125 bytes / SIZE 008 )
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n             /
           X             x         Qnm(x) 

Examples:       0.4  ENTER^   1.3   ENTER^   0.7   XEQ "ALF2"   >>>>     Q1.30.4(0.7) =  -1.317935680   ( in 66 seconds )
                         2.4  ENTER^   0.4   ENTER^   0.1        R/S            >>>>      Q0.42.4(0.1) =   0.102528105   ( in 30 seconds )
 
 

8°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  -1 < x < 3
 

Formula:      Qnm(x) =  A  (1/2)  [  Gam(1+m+n) Gam(-m) / Gam(1+n-m)  |(x-1)/(x+1)|m/2  F(-n ; n+1 ; 1+m ; (1-x)/2 )
                                                            + Gam(m)  |(x+1)/(x-1)|m/2 B  F(-n ; n+1 ; 1-m ; (1-x)/2 )  ]

  where    A = ei.m.pi   &  B = 1                 if  x > 1       ( the result is a complex number in this case )
   and       A =  1        &  B = cos(m.pi)     if  x < 1

-Since Gam(m) and Gam(-m) appear in this formula, it cannot be used if m is an integer.
 

Data Registers:         R00 to R07: temp
Flag:   F07
Subroutines:  "GAM+"  or  "GAM"  ( Gamma function )
                        "HGF"                        ( Hypergeometric functions )
 

01  LBL "ALF2B"
02  STO 04
03  CLX
04  SIGN
05  STO 03
06  X<>Y
07  CHS
08  STO 01
09  -
10  STO 02
11  X<>Y
12  STO 05
13  ST+ 03
14  1
15  RCL 04
16  -
17  2
18  /
19  XEQ "HGF"
20  STO 06
21  RCL 03
22  RCL 01
23  -
24  XEQ "GAM+"       or    XEQ "GAM"
25  ST* 06
26  RCL 05
27  CHS
28  XEQ "GAM+"
29  ST* 06
30  RCL 02
31  RCL 05
32  -
33  XEQ "GAM+"
34  ST/ 06
35  1
36  RCL 05
37  -
38  STO 03
39  RCL 00
40  XEQ "HGF"
41  STO 03
42  RCL 05
43  XEQ "GAM+"
44  ST* 03
45  RCL 04
46  RCL 04
47  1
48  ST- Z
49  +
50  /
51  SF 07
52  X>0?
53  CF 07
54  ABS
55  RCL 05
56  Y^X
57  SQRT
58  ST/ 03
59  RCL 06
60  *
61  RCL 03
62  FC? 07
63  +
64  1
65  CHS
66  ACOS
67  RCL 05
68  *
69  X<>Y
70  P-R
71  0
72  FS? 07
73  STO Z
74  FS?C 07
75  X<> T
76  +
77  2
78  ST/ Z
79  /
80  END

( 133 bytes / SIZE 007 )
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n            B
           X             x            A

                     with   Qnm(x) =  A + i.B
 

Examples:

    0.7   ENTER^
    1.2   ENTER^
    1.9   XEQ "ALF2B"  >>>>    -0.081513574
                                     X<>Y    0.112193809     thus,     Q1.20.7(1.9) = -0.081513574 + 0.112193809 . i      ( in 53 seconds )

   0.4   ENTER^
   1.3   ENTER^
   0.7      R/S    >>>>     Q1.30.4(0.7) =  -1.317935682   ( in 37 seconds )      ( B is always equal to zero if  | x | < 1 )
 
 

9°) Associated Legendre Functions of the second kind ( fractional order & degree ) with  | x | > 1
 

Formula:      Qnm(x) = ei.mpi 2-n-1 pi1/2 x-n-m-1 (x2-1)m/2 F(1+n/2+m/2 ; 1/2+n/2+m/2 ; n+3/2 ; 1/x2 )  Gamma(1+n+m) / Gamma(n+3/2)

    ( the result is a complex number )

-If  x < -1 and  -n-m-1 is not an integer, there will be a "DATA ERROR" message.
 

Data Registers:         R00 to R07: temp
Flags: /
Subroutines:  "GAM"  ( Gamma function )
                        "HGF"   ( Hypergeometric functions )
 

01  LBL "ALF2C"
02  STO 04
03  CLX
04  SIGN
05  +
06  STO 03
07  STO 05
08  X<>Y
09  STO 06
10  +
11  .5
12  ST+ 03
13  *
14  STO 02
15  LASTX
16  +
17  STO 01
18  RCL 04
19  X^2
20  1/X
21  XEQ "HGF"
22  STO 01
23  RCL 05
24  RCL 06
25  +
26  XEQ "GAM"
27  ST* 01
28  RCL 03
29  XEQ "GAM"
30  ST/ 01
31  RCL 01
32  1
33  RCL 00
34  -
35  RCL 06
36  Y^X
37  PI
38  *
39  SQRT
40  *
41  RCL 04
42  ST+ X
43  RCL 05
44  Y^X
45  /
46  1
47  CHS
48  ACOS
49  RCL 06
50  *
51  X<>Y
52  P-R
53  END

( 80 bytes / SIZE 007 )
 
 
 
      STACK        INPUTS      OUTPUTS
           Z             m             /
           Y             n            B
           X             x            A

                     with   Qnm(x) =  A + i.B
 

Examples:    Compute    Q1.20.7(1.9)

    0.7   ENTER^
    1.2   ENTER^
    1.9   XEQ "ALF2C"  yields    -0.081513570
                                     X<>Y    0.112193804     thus,     Q1.20.7(1.9) = -0.081513570 + 0.112193804 . i      ( in 29 seconds )

-Similarly, we find  Q74(3) = 0.004063232  ( in 18 seconds )  ( "PQMN" would give a wrong result! )

-This program will not work if  n+3/2 = 0,-1,-2,-3,-4, ..... unless you replace line 21 by  XEQ "HGF2"  ( cf "Hypergeometric Function for the HP-41" )
  and line 29 by  FC? 00  XEQ "GAM"  FC?C 00

-With this modification, you'll find, for example:   Q -1.52(7) = 0.114719166   ( in 16 seconds )

-If you need  | Qnm(x) | only, delete lines 54 to 60 and for instance:   |  Q1.20.7(1.9) | = 0.138679169   ( this real result is in L-register otherwise )
 
 

References:    Abramowitz and Stegun , "Handbook of Mathematical Functions" -  Dover Publications -  ISBN  0-486-61272-4
                          Press , Vetterling , Teukolsky , Flannery , "Numerical Recipes in C++" - Cambridge University Press - ISBN  0-521-75033-4
 

Go back to the HP-41 software library
Go back to the general software library
Go back to the main exhibit hall