# hp41programs

Quternionic Ortho Pol

# Anionic Orthogonal Polynomials for the HP-41

Overview

1°)  Legendre Polynomials
2°)  Generalized Laguerre's Polynomials
3°)  Hermite Polynomials
4°)  Chebyshev Polynomials
5°)  UltraSpherical Polynomials
6°)  Jacobi Polynomials

-The following routines complete the programs listed in "Anionic Special Functions"
-All require a SIZE = 4n+1 , so they can be used with 64-ons, but not with 128-ons.
-I've used quaternions in the examples ( n = 4 ).

1°)  Legendre Polynomials

Formulae:      m.Pm(a) = (2m-1).a.Pm-1(a) - (m-1).Pm-2(a)  ,  P0(a) = 1  ,  P1(a) = a

Data Registers:           •  R00 = n > 1                         ( Registers R00 thru Rnn are to be initialized before executing "LEGA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Pm(a)
R2n+1 ........  R4n = Pm-1(a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flags: /
Subroutines:   "A*A1"  ( cf "Anions for the HP-41" )
"ST*A"   ( cf "Anionic Special Functions" )

 01  LBL "LEGA"  02   E3  03  /  04  STO M  05  RCL 00  06  .1  07  %  08  STO Z  09  ST+ Z  10  ST+ Z  11  ISG X  12  STO T  13  +  14  ST+ Y  15   E3  16  / 17  1  18  +  19  REGMOVE   20  CLX  21  RCL 00  22  +  23  CLRGX  24  SIGN  25  STO IND L  26  X<>Y  27   E3  28  /  29  +  30  RCL 00  31  ST+ X  32  + 33  STO N  34  LBL 01  35  RCL N  36  REGMOVE  37  ISG M  38  X=0?  39  GTO 00  40  XEQ "A*A1"  41  RCL M  42  INT  4 3 ST+ X  44  DSE X  45  XEQ "ST*A"  46  4  47  RCL 00  48  * 49  STO O  50  LASTX  51  ST- Y  52  LBL 02  53  1  54  RCL M  55  INT  56  -  57  RCL IND O   58  *  59  RCL IND Y  60  +  61  RCL M  62  INT  63  /  64  X<> IND Z 65  STO IND O   66  RDN  67  DSE O  68  DSE Y  69  DSE X  70  GTO 02  71  GTO 01  72  LBL 00  73  FRC  74   E3  75  *  76  CLA  77  END

( 133 bytes / SIZE 4n+1 )

 STACK INPUT OUTPUT X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:         m = 7     a = 1 + i/2 + j/3 + k/4                             ( Quaternion ->  4  STO 00 )

1   STO 01
2   1/X  STO 02
3   1/X  STO 03
4   1/X  STO 04

7   XEQ "LEGA"   >>>>  1.004                                          ---Execution time = 28s---

R01 =  36.20819586
R02 = -51.58337291
R03 = -34.38891526
R04 = -25.79168644

P7( 1 + i/2 + j/3 + k/4 ) =  36.20819586 - 51.58337291 i - 34.38891526 j - 25.79168644 k

and in registers R13 thru R16:

P6( 1 + i/2 + j/3 + k/4 ) =  -9.248135373 - 26.20689563 i - 17.47126375 j - 13.10344781 k

2°)  Generalized Laguerre's Polynomials

Formulae:      L0(b) (a) = 1  ,   L1(b) (a) = b+1-a   ,    m Lm(b) (a) = (2.m+b-1-a) Lm-1(b) (a) - (m+b-1) Lm-2(b) (a)

Data Registers:           •  R00 = n > 1                         ( Registers R00 thru Rnn are to be initialized before executing "LAGA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Lm(b) (a)
R2n+1 ........  R4n = Lm-1(b) (a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flags: /
Subroutines:   "A*A1"  ( cf "Anions for the HP-41" )

 01  LBL "LAGA"  02   E3  03  /  04  STO M  05  X<>Y  06  STO N  07  RCL 00  08  .1  09  %  10  STO Z  11  ST+ Z  12  ST+ Z  13  ISG X  14  STO T  15  +  16  ST+ Y  17   E3 18  /  19  1  20  +   21  REGMOVE   22  CLX  23  RCL 00  24  +  25  CLRGX  26  SIGN  27  STO IND L  28  X<>Y  29   E3  30  /  31  +  32  RCL 00  33  ST+ X  34  + 35  STO O  36  LBL 01  37  RCL O  38  REGMOVE   39  ISG M  40  X=0?  41  GTO 00  42  XEQ "A*A1"  43  4  44  RCL 00  45  *  46  STO P  47  LASTX  48  ST- Y  49  LBL 02  50  RCL N  51  PI 52  SIGN  53  -  54  RCL M  55  INT  56  +  57  ST* IND P  58  LASTX  59  +  60  RCL IND Z   61  *  62  RCL IND Y  63  -  64  RCL IND Z  65  X<> IND P  66  -  67  RCL M  68  INT 69  /  70  STO IND Z   71  RDN  72  DSE P  73  DSE Y  74  DSE X  75  GTO 02  76  GTO 01  77  LBL 00  78  FRC  79   E3  80  *  81  CLA  82  END

( 134 bytes / SIZE 4n+1 )

 STACK INPUTS OUTPUTS Y b / X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:        b = sqrt(2)     m = 7     a = 1 + 2 i + 3 j + 4 k                             ( Quaternion ->  4  STO 00 )

1   STO 01
2   STO 02
3   STO 03
4   STO 04

2   SQRT
7    XEQ "LAGA"   >>>>  1.004                                          ---Execution time = 33s---

R01 = 872.2661283
R02 =  47.12527421
R03 =  70.68791129
R04 =  94.25054843

L7sqrt(2) ( 1 + 2 i + 3 j + 4 k ) =  872.2661283 + 47.12527421 i + 70.68791129 j + 94.25054843 k

and in registers R13 thru R16:

L6sqrt(2) ( 1 + 2 i + 3 j + 4 k ) =   335.6848017 + 123.7427960 i + 185.6141940 j + 247.4855920 k

3°)  Hermite Polynomials

Formulae:        H0(a) = 1  ,  H1(a) = 2 a
Hm(a) = 2.a Hm-1(a) - 2 (m-1) Hm-2(a)

Data Registers:           •  R00 = n > 1                         ( Registers R00 thru Rnn are to be initialized before executing "HMTA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Hm(a)
R2n+1 ........  R4n = Hm-1(a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flags: /
Subroutine:   "A*A1"     ( cf "Anions for the HP-41" )

 01  LBL "HMTA"  02   E3  03  /  04  STO M  05  RCL 00  06  .1  07  %  08  STO Z  09  ST+ Z  10  ST+ Z  11  ISG X  12  STO T  13  +  14  ST+ Y 15   E3  16  /   17  1  18  +  19  REGMOVE    20  CLX  21  RCL 00  22  +  23  CLRGX  24  SIGN  25  STO IND L  26  X<>Y  27   E3  28  / 29  +  30  RCL 00  31  ST+ X  32  +  33  STO N  34  LBL 01  35  RCL N  36  REGMOVE    37  ISG M  38  X=0?  39  GTO 00  40  XEQ "A*A1"  41  4  42  RCL 00 43  *  44  STO O  45  LASTX  46  ST- Y  47  LBL 02  48  1  49  RCL M  50  INT  51  -  52  RCL IND Z    53  X<> IND O  54  *  55  RCL IND Y  56  + 57  ST+ X  58  STO IND Z    59  RDN  60  DSE O  61  DSE Y  62  DSE X  63  GTO 02  64  GTO 01  65  LBL 00  66  FRC  67   E3  68  *  69  CLA  70  END

( 118 bytes / SIZE 4n+1 )

 STACK INPUT OUTPUT X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:         m = 7     a = 1 + 2 i + 3 j + 4 k                             ( Quaternion ->  4  STO 00 )

1   STO 01
2   STO 02
3   STO 03
4   STO 04

7    XEQ "HMTA"   >>>>  1.004                                          ---Execution time = 25s---

R01 = -23716432
R02 =  -3653024
R03 =  -5479536
R04 =  -7306048

H7( 1 + 2 i + 3 j + 4 k ) =  -23716432 - 3653024 i - 5479536 j - 7306048 k

and in registers R13 thru R16:

H6( 1 + 2 i + 3 j + 4 k ) =  -1122232 + 682816 i + 1024224 j + 1365632 k

4°)  Chebyshev Polynomials

Formulae:

CF 02          Tm(a) = 2a.Tm-1(a) - Tm-2(a)   ;  T0(a) = 1  ;   T1(a) = a        ( first kind )
SF 02          Um(a) = 2a.Um-1(a) - Um-2(a)  ;  U0(a) = 1  ;  U1(a) = 2a    ( second kind )

Data Registers:      •  R00 = n > 1                              ( Registers R00 thru Rnn are to be initialized before executing "CHBA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Tm(a)  or  Um(a)
R2n+1 ........  R4n = Tm-1(a) or Um-1(a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flag: F02               if F02 is clear, "CHBA" calculates the Chebyshev polynomials of the first kind:   Tm(a)
if F02 is set,    "CHBA" calculates the Chebyshev polynomials of the second kind:   Um(a)

Subroutines:   "A*A1"    ( cf "Anions for the HP-41" )
"ST*A"   ( cf "Anionic Special Functions" )

 01  LBL "CHBA"  02   E3  03  /  04  STO M  05  RCL 00  06  .1  07  %  08  STO Z  09  ST+ Z  10  ST+ Z  11  ISG X  12  STO T  13  +  14  ST+ Y  15   E3  16  / 17  1  18  +  19  REGMOVE    20  CLX  21  RCL 00  22  +  23  CLRGX  24  SIGN  25  STO IND L  26  X<>Y  27   E3  28  /  29  +  30  RCL 00  31  ST+ X  32  + 33  STO N  34  LBL 01  35  RCL N  36  REGMOVE    37  ISG M  38  X=0?  39  GTO 00  40  XEQ "A*A1"  41  SIGN  42  RCL M  43  INT  44  X=Y?  45  FS? 02  46  2  47  XEQ "ST*A"  48  4 49  RCL 00  50  *  51  STO O  52  LASTX  53  ST- Y  54  LBL 02  55  RCL IND X  56  RCL IND Z    57  X<> IND O  58  -  59  STO IND Z  60  RDN  61  DSE O  62  DSE Y  63  DSE X  64  GTO 02 65  GTO 01  66  LBL 00  67  FRC  68   E3  69  *  70  RCL M           71  INT  72  1  73  -  74  X<>Y  75  CLA  76  END

( 130 bytes / SIZE 4n+1 )

 STACK INPUTS OUTPUTS Y / m X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:         m = 7     a = 1 + 2 i + 3 j + 4 k                             ( Quaternion ->  4  STO 00 )

•   CF 02      Chebyshev Polynomials 1st kind

1   STO 01
2   STO 02
3   STO 03
4   STO 04

7    XEQ "CHBA"   >>>>      1.004                                          ---Execution time = 21s---

R01 = -9524759
R02 = -1117678
R03 = -1676517
R04 = -2235356

T7( 1 + 2 i + 3 j + 4 k ) =  -9524759 - 1117678 i - 1676517 j - 2235356 k

•   SF 02      Chebyshev Polynomials 2nd kind

1   STO 01
2   STO 02
3   STO 03
4   STO 04

7    XEQ "CHBA"   >>>>      1.004                                          ---Execution time = 21s---

R01 = -18921448
R02 =  -2198096
R03 =  -3297144
R04 =  -4396192

U7( 1 + 2 i + 3 j + 4 k ) =  -18921448 - 2198096 i - 3297144 j - 4396192 k

Note:

m is saved in Y-register because "USPA" below calls "CHBA" as a subroutine in one case ( to calculate Cm(0) (a) ).

5°)  UltraSpherical Polynomials

Formulae:      C0(b) (a) = 1  ;   C1(b) (q) = 2.b.a   ;    (m+1).Cm+1(b) (a) = 2.(m+b).x.Cm(b) (a) - (m+2b-1).Cm-1(b) (a)      if  b # 0

Cm(0) (a) = (2/m).Tm(a)

Data Registers:           •  R00 = n > 1                         ( Registers R00 thru Rnn are to be initialized before executing "USPA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Cm(b) (a)
R2n+1 ........  R4n = Cm-1(b) (a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flags: /
Subroutines:   "A*A1"  ( cf "Anions for the HP-41" )
"ST*A"   ( cf "Anionic Special Functions" )  &  "CHBA" above if  b = 0

 01  LBL "USPA"  02  X<>Y  03  X#0?  04  GTO 00  05  X<>Y  06  CF 02  07  XEQ "CHBA"  08  2  09  RCL Z  10  /  11  XEQ "ST*A"  12  X<>Y  13  RTN  14  LBL 00  15  STO N  16  X<>Y  17   E3  18  /  19  STO M  20  RCL 00 21  .1  22  %  23  STO Z  24  ST+ Z  25  ST+ Z  26  ISG X  27  STO T  28  +  29  ST+ Y  30   E3  31  /  32  1  33  +  34  REGMOVE     35  CLX  36  RCL 00  37  +  38  CLRGX  39  SIGN  40  STO IND L 41  X<>Y  42   E3  43  /  44  +  45  RCL 00  46  ST+ X  47  +  48  STO O  49  LBL 01  50  RCL O  51  REGMOVE     52  ISG M  53  X=0?  54  GTO 00  55  XEQ "A*A1"  56  RCL M  57  INT  58  1  59  -  60  RCL N 61  +  62  ST+ X  63  XEQ "ST*A"  64  4  65  RCL 00  66  *  67  STO P  68  LASTX  69  ST- Y  70  LBL 02  71  PI  72  SIGN  73  RCL N  74  -  75  ST+ X  76  RCL M  77  INT  78  -  79  RCL IND Z     80  X<> IND P 81  *  82  RCL IND Y  83  +  84  RCL M  85  INT  86  /  87  STO IND Z     88  RDN  89  DSE P  90  DSE Y  91  DSE X  92  GTO 02  93  GTO 01  94  LBL 00  95  FRC  96   E3  97  *  98  CLA  99  END

( 172 bytes / ZIZE 4n+1 )

 STACK INPUTS OUTPUTS Y b / X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:        b = sqrt(2)     m = 7     a = 1 + i/2 + j/3 + k/4                             ( Quaternion ->  4  STO 00 )

1   STO 01
2   STO 02
3   STO 03
4   STO 04

2   SQRT
7   XEQ "USPA"   >>>>      1.004                                          ---Execution time = 32s---

R01 =  324.5443969
R02 = -689.5883616
R03 = -459.7255740
R04 = -344.7941807

C7sqrt(2) ( 1 + i/2 + j/3 + k/4 ) =  324.5443969 - 689.5883616 i - 459.7255740 j - 344.7941807 k

-Likewise,   C7(0) ( 1 + i/2 + j/3 + k/4 ) =  29.24554797 - 33.27910360 i - 22.18606908 j - 16.63955181 k    ( in 22 seconds )

6°)  Jacobi Polynomials

Formulae:      P0(b;c) (a) = 1  ;   P1(b;c) (a) = (b-c)/2 + a (b+c+2)/2

2m(m+b+c)(2m+b+c-2) Pm(b;c) (a) = [ (2m+b+c-1).(b2-c2) + a (2m+b+c-2)(2m+b+c-1)(2m+b+c) ] Pm-1(b;c) (a)
- 2(m+b-1)(m+c-1)(2m+b+c) Pm-2(b;c) (a)

Data Registers:           •  R00 = n > 1                         ( Registers R00 thru Rnn are to be initialized before executing "JCPA" )

•  R01   ......  •  Rnn = the n components of the anion a which are saved in registers  Rn+1 to R2n

Rn+1 ..........  R3n =  Pm(b;c) (a)
R2n+1 ........  R4n = Pm-1(b;c) (a)

>>>  When the program stops:     R01   ......  Rnn = the n components of the result

Flags: /
Subroutines:   "A*A1"  ( cf "Anions for the HP-41" )             ->  For "A*A1" , use a version that does not alter synthetic register P
"ST*A"   ( cf "Anionic Special Functions" )

-Lines 43 and 158 are 3-byte GTO's

 01  LBL "JCPA"   02   E3   03  /   04  STO M   05  RDN   06  STO N   07  X<>Y   08  STO O   09  RCL 00   10  .1   11  %   12  STO Z   13  ST+ Z   14  ST+ Z   15  ISG X   16  STO T   17  +   18  ST+ Y   19   E3   20  /   21  1   22  +   23  REGMOVE    24  CLX   25  RCL 00   26  +   27  CLRGX   28  SIGN 29  STO IND L   30  X<>Y   31   E3   32  /   33  +   34  RCL 00   35  ST+ X   36  +   37  STO P   38  LBL 01   39  RCL P   40  REGMOVE   41  ISG M   42  X=0?   43  GTO 00   44  XEQ "A*A1"   45  RCL M   46  INT   47  ST+ X   48  RCL N   49  +   50  RCL O   51  +   52  ENTER^   53  ENTER^   54  ENTER^   55  CLX   56  SIGN 57  ST- T   58  ST+ X   59  -   60  *   61  *   62  XEQ "ST*A"   63  RCL O   64  RCL M   65  INT   66  +   67  RCL X   68  PI   69  SIGN   70  -   71  RCL M   72  INT   73  RCL N   74  +   75  ST+ Z   76  PI   77  SIGN   78  -   79  *   80  *   81  ST+ X   82  RCL 00   83  RCL 00   84  PI 85  INT   86  *   87  ST+ Y   88  LASTX   89  10^X   90  /   91  +   92  X<>Y   93  LBL 02   94  ST* IND Y    95  DSE Y   96  GTO 02   97  RCL M   98  INT   99  ST+ X 100  DSE X 101  RCL N 102  RCL O 103  + 104  ST+ Y 105  LASTX 106  RCL N 107  - 108  * 109  * 110  SIGN 111  RCL 00 112  ENTER^ 113  ST+ Y 114  ST+ Y 115  LBL 03 116  RCL IND Y  117  LASTX 118  * 119  ST+ IND Y 120  RDN 121  DSE Y 122  DSE X 123  GTO 03 124  RCL M 125  INT 126  ENTER^ 127  DSE X 128  ST+ X 129  RCL O 130  RCL N 131  + 132  ST+ Z 133  + 134  * 135  * 136  ST+ X 137  RCL 00 138  ST+ X 139  ST+ X 140  STO Q 141  RCL 00 142  ST- Y 143  RCL Z 144  SIGN 145  LBL 04 146  CLX 147  RCL IND Y 148  RCL IND Q  149  ST- Y 150  X<> L 151  / 152  X<> IND Z 153  STO IND Q 154  DSE Q 155  DSE Z 156  DSE Y 157  GTO 04 158  GTO 01 159  LBL 00 160  FRC 161   E3 162  * 163  CLA 164  END

( 262 bytes / SIZE 4n+1 )

 STACK INPUTS OUTPUTS Z b / Y c / X m 1.nnn

where      1.nnn  is the control number of the result  and  m is an integer    ( 0 <= m < 1000 )

Example:        b = sqrt(2)     c = sqrt(3)    m = 7      a = 1 + i/2 + j/3 + k/4                            ( Quaternion ->  4  STO 00 )

1   STO 01
2   1/X  STO 02
3   1/X  STO 03
4   1/X  STO 04

2   SQRT
3   SQRT
7   XEQ "JCPA"   >>>>      1.004                                          ---Execution time = 52s---

R01 =  143.5304513
R02 = -310.8681605
R03 = -207.2454399
R04 = -155.4340802

-Whence,        P7sqrt(2);sqrt(3) ( 1 + i/2 + j/3 + k/4 ) =  143.5304513 - 310.8681605 i - 207.2454399 j - 155.4340802 k

Notes:

-This version is probably not the shortest and fastest one !
-Since registers P & Q are used, don't interrupt this program.