hp41programs

QuatSphFunc

Quaternionic Spheroidal Wave Functions for the HP-41


Overview
 

-The following program generalizes a routine that is listed in "Spheroidal Harmonics for the HP-41" to quaternionic variables.
-However, the parameters  m , n , c2 , Lmn remain real.

  •   m & n must be non-negative integers, n = m , m+1 , m+2 , ... ,  c2 may be positive or negative or equal to zero,
      and the eigenvalues Lmn must be calculated first  ( see for example the 1st routine listed in "Spheroidal Harmonics for the HP-41" )
  •   If c = 0 , the eigenvalues are simply  n(n+1)
 

Program Listing
 

-We assume that  | q | <= 1  and  Smn(q) is computed by      Smn(q) = ( 1 - q2 )m/2   Sumk=0,1,.... ak qk

     with     (k+1)(k+2) ak+2 - [ k ( k + 2m + 1 ) - Lmn + m ( m + 1 ) ] ak  - c2  ak-2 = 0
 

Data Registers:            R00 thru R08 & R13 thru R18: temp                ( Registers R09 thru R12 are to be initialized before executing "SWFQ" )

                                   •  R09 = m      •  R11 = c2
                                   •  R10 = n       •  R12 = Lmn
Flag:  F00

   CF 00        Flammer's Scheme      Smn(0) = Pmn(0)  &  S'mn(0) = P' mn(0)   where  Pmn(x)  =  Associated Legendre Functions of the first kind

      a0 = [ (-1)(n+m)/2 (n+m)! ] / [ 2n ((n-m)/2)! ((n+m)/2)! ]                   a1 = 0                if  n - m is even
      a1 = [ (-1)(n+m-1)/2 (n+m+1)! ] / [ 2n ((n-m-1)/2)! ((n+m+1)/2)! ]    a0 = 0                 if  n - m is odd

   SF 00         Non-Normalized Functions

      a0 = 1          a1 = 0         if  n - m is even
      a0 = 0          a1 = 1         if  n - m is odd

Subroutines:  "Q*Q"  "Q^R"  ( cf "Quaternions for the HP-41" )
 
 

  01  LBL "SWFQ"
  02  STO 01         
  03  STO 05
  04  RDN
  05  STO 02
  06  STO 06
  07  RDN
  08  STO 03
  09  STO 07
  10  X<>Y
  11  STO 04
  12  STO 08
  13  XEQ "Q*Q"
  14  STO 01
  15  RDN
  16  STO 02
  17  RDN
  18  STO 03
  19  X<>Y
  20  STO 04
  21  RCL 10
  22  RCL 09
  23  -
  24  STO 13
  25  2
  26  MOD
  27  STO 00
  28  X#0?
  29  GTO 00
  30  STO 06
  31  STO 07
  32  STO 08
  33  SIGN
  34  STO 05         
  35  LBL 00
  36  CLX
  37  STO 17
  38  SIGN
  39  FS? 00
  40  GTO 00
  41  CHS
  42  RCL 09
  43  RCL 10
  44  +
  45  STO 14
  46  RCL 00
  47  ST- 13
  48  ST+ 14
  49  -
  50  2
  51  /
  52  Y^X
  53  RCL 14
  54  FACT
  55  *
  56  2
  57  ST/ 13
  58  ST/ 14
  59  RCL 10
  60  Y^X
  61  /
  62  RCL 13
  63  FACT
  64  RCL 14
  65  FACT
  66  *
  67  /
  68  LBL 00         
  69  STO 18 
  70  RCL 05
  71  X<>Y
  72  *
  73  STO 13
  74  RCL 06
  75  LASTX
  76  *
  77  STO 14
  78  RCL 07
  79  LASTX
  80  *
  81  STO 15
  82  RCL 08
  83  LASTX
  84  *
  85  STO 16
  86  LBL 01
  87  RCL 11
  88  RCL 17
  89  *
  90  RCL 09
  91  ST+ X
  92  RCL 00
  93  ST+ Y
  94  ST* Y
  95  +
  96  RCL 09
  97  ST+ Y
  98  X^2
  99  +
100  RCL 12         
101  -
102  RCL 18
103  STO 17
104  *
105  +
106  RCL 00
107  1
108  +
109  ST/ Y
110  LASTX
111  +
112  STO 00
113  /
114  STO 18
115  XEQ "Q*Q"
116  STO 05
117  RDN
118  STO 06
119  RCL 18
120  *
121  RCL 14
122  +
123  STO 14
124  LASTX
125  -
126  ABS
127  X<>Y
128  STO 07
129  RCL 18
130  *
131  RCL 15         
132  +
133  STO 15 
134  LASTX
135  -
136  ABS
137  +
138  X<>Y
139  STO 08
140  RCL 18
141  *
142  RCL 16
143  +
144  STO 16
145  LASTX
146  -
147  ABS
148  +
149  RCL 05
150  RCL 18
151  *
152  RCL 13
153  +
154  STO 13
155  LASTX
156  -
157  ABS
158  +
159  X#0?
160  GTO 01
161  RCL 09
162  2
163  /
164  STO 00         
165  1
166  RCL 01
167  -
168  RCL 04
169  CHS
170  RCL 03
171  CHS
172  RCL 02
173  CHS
174  R^
175  XEQ "Q^R"
176  STO 01
177  RDN
178  STO 02
179  RDN
180  STO 03
181  X<>Y
182  STO 04
183  RCL 13
184  STO 05
185  RCL 14
186  STO 06
187  RCL 15
188  STO 07
189  RCL 16
190  STO 08
191  XEQ "Q*Q"
192  END

 
    ( 244 bytes / SIZE 019 )
 
 

      STACK        INPUTS      OUTPUTS
           T             t             t'
           Z             z             z'
           Y             y             y'
           X             x             x'

  with   Smn( x + y i + z j + t k ) = x' + y' i + z' j + t' k  ,   |  x + y i + z j + t k | <= 1

Example1:     m = 0 ,  n = 1 ,  c2 = 2 ,   Lmn = 3.172127920       These 4 numbers are to be stored in  R09 thru R12

   CF 00

   0.4   ENTER^
   0.3   ENTER^
   0.2   ENTER^
   0.1   XEQ "SWFQ"  >>>>    0.117347028                   ---Execution time = 34s---
                                    RDN     0.210312365
                                    RDN     0.315468547
                                    RDN     0.420624729

   S( 0.1 + 0.2 i + 0.3 j + 0.4 k ) = 0.117347028 + 0.210312365 i + 0.315468547 j + 0.420624729 k

Example2:     m = n = 2  ,  c2 = 3  ,  Lmn =  6.412006610           These 4 numbers are to be stored in  R09 thru R12

   CF 00

   0.4   ENTER^
   0.3   ENTER^
   0.2   ENTER^
   0.1   XEQ "SWFQ"  >>>>    4.058321831                   ---Execution time = 39s---
                                    RDN   -0.160164520
                                    RDN   -0.240246780
                                    RDN   -0.320329040

   S( 0.1 + 0.2 i + 0.3 j + 0.4 k ) = 4.058321831 - 0.160164520 i - 0.240246780 j - 0.320329040 k

Notes:

-If you set F00 you get the same result in the 1st example, and the same result divided by 3 in the 2nd example.
-If it is possible, use an M-Code routine that returns 0^0 = 1 to compute "Q^R"
-If m > 0   Smn(1) = Smn(-1) = 0  so you could add

 RCL 09  X=0?  GTO 00  RCL 04   ABS  RCL 03  ABS  +  RCL 02  ABS +  X#0?  GTO 00  RCL 01  ABS  1  X#Y?  GTO 00  CLST  RTN  LBL 00

   after line 12

-"SWFQ" may also be used to compute Legendre Functions provided | q |  does not exceed 1:
-Store 0 in R11 and  n(n+1) in R12
 

Reference:

[1]   Abramowitz & Stegun , "Handbook of Mathematical Functions" -  Dover Publications -  ISBN  0-486-61272-4