# hp41programs

Quat-Jac-Ell-Func

# Quaternionic Jacobian Elliptic Functions for the HP-41

Overview

1°)  Ascending Landen Transformation
2°)  Gauss' Transformation

1°)  Ascending Landen Transformation

"JEFQ" computes sn ( q | m ) , cn ( q | m ) , dn ( q | m )  where m is a real number

-The ascending Landen transformation is used if  0 < m < 1

-If m > 1, the program also uses the relations:

sn ( q | m ) = sn ( q m1/2 | 1/m ) / m1/2
cn ( q | m ) = dn ( q m1/2 | 1/m )
dn ( q | m ) = cn ( q m1/2 | 1/m )

-If m = 1:      sn ( q | m ) = tanh q ; cn ( q | m ) = dn ( q | m ) = sech q

-If m < 0:

sn ( q | m ) = sd ( q (1-m)1/2 | -m/(1-m) ) / (1-m)1/2
cn ( q | m ) = cd ( q (1-m)1/2 | -m/(1-m) )
dn ( q | m ) = nd ( q (1-m)1/2 | -m/(1-m) )

-If m = 0 ,   sn ( q | 0 ) = Sin q  ;   cn ( q | 0 ) = Cos q  ;  dn ( q | 0 ) = 1  are obtained directly.

Data Registers:           •  R00 = m                           ( Register R00 is to be initialized before executing "JEFQ" )

R01 to R04 = sn ( q | m )                      R13 thru R26...... : temp
R05 to R08 = cn ( q | m )
R09 to R12 = dn ( q | m )

Flags:  F06-F07
Subroutines:  "SINQ"  "COSQ"  "CHQ"  "THQ"  "Q*Q"  "1/Q"  ( cf "Quaternions for the HP-41" )

>>>  The number of data registers may reach 40 or more

-Lines  41-152-226  are three-byte  GTOs

 01  LBL "JEFQ"   02  STO 22   03  RDN   04  STO 23   05  RDN   06  STO 24   07  X<>Y   08  STO 25   09  RCL 00   10  X#0?   11  GTO 00   12  STO 10   13  STO 11   14  STO 12   15  SIGN   16  STO 09   17  RCL 25   18  RCL 24   19  RCL 23   20  RCL 22             21  XEQ "COSQ"   22  STO 05   23  RDN   24  STO 06   25  RDN   26  STO 07   27  X<>Y   28  STO 08   29  RCL 25   30  RCL 24   31  RCL 23   32  RCL 22   33  XEQ "SINQ"   34  STO 01   35  RDN   36  STO 02   37  RDN   38  STO 03   39  X<>Y   40  STO 04   41  GTO 14   42  LBL 00   43  1   44  X<>Y   45  CF 06   46  CF 07   47  X<=Y?   48  GTO 00   49  SF 06   50  SQRT   51  ST* 22   52  ST* 23   53  ST* 24   54  ST* 25 55  LASTX   56  1/X   57  GTO 13   58  LBL 00   59  X>0?   60  GTO 13   61  SF 07   62  1   63  RCL 00   64  -   65  SQRT   66  ST* 22   67  ST* 23   68  ST* 24   69  ST* 25   70  X<> L   71  /   72  CHS   73  LBL 13   74  STO 13             75  25   76  STO 26   77  SIGN   78  STO 02   79  RCL 13   80  -   81  SQRT   82  LBL 01   83  X=0?   84  GTO 00   85  X<>Y   86  SQRT   87  STO 01   88  4   89  *   90  RCL 01   91  3   92  ST+ 26   93  SIGN   94  ST- 01   95  +   96  ST/ 01   97  X^2   98  /   99  RCL 01 100  CHS 101  STO IND 26 102  1 103  ST- 26 104  + 105  ST* 02 106  X<>Y 107  STO IND 26 108  RCL 01 109  GTO 01 110  LBL 00 111  14.001008 112  STO 13 113  .026 114  ST+ 26 115  RCL 02 116  ST/ 22 117  ST/ 23 118  ST/ 24 119  ST/ 25 120  RCL 25 121  RCL 24 122  RCL 23 123  RCL 22 124  XEQ "THQ" 125  STO 14 126  RDN 127  STO 15           128  RDN 129  STO 16  130  X<>Y 131  STO 17 132  RCL 25 133  RCL 24 134  RCL 23 135  RCL 22 136  XEQ "CHQ" 137  XEQ "1/Q" 138  STO 09 139  STO 18 140  RDN 141  STO 10 142  STO 19 143  RDN 144  STO 11 145  STO 20 146  X<>Y 147  STO 12 148  STO 21 149  LBL 02 150  DSE 26 151  FS? 30 152  GTO 00 153  RCL 13 154  REGMOVE 155  XEQ "Q*Q" 156  STO 05 157  RDN 158  STO 06 159  RDN 160  STO 07 161  X<>Y 162  STO 08 163  RCL 12 164  STO 21 165  RCL 11 166  STO 20 167  RCL 10 168  STO 19 169  RCL 09 170  STO 18 171  XEQ "1/Q" 172  STO 01 173  RDN 174  STO 02 175  RDN 176  STO 03 177  X<>Y 178  STO 04 179  XEQ "Q*Q" 180  STO 14 181  RDN 182  STO 15           183  RDN 184  STO 16  185  X<>Y 186  STO 17 187  RCL IND 26 188  ST* 01 189  ST* 02 190  ST* 03 191  ST* 04 192  RCL 01 193  ST+ 09 194  ST- 18 195  RCL 02 196  ST+ 10 197  ST- 19 198  RCL 03 199  ST+ 11 200  ST- 20 201  RCL 04 202  ST+ 12 203  ST- 21 204  1 205  STO Y 206  RCL IND 26 207  ST- Z 208  + 209  ST* 14 210  ST* 15 211  ST* 16 212  ST* 17 213  DSE 26 214  RCL IND 26 215  / 216  ST* 18 217  ST* 19 218  ST* 20 219  ST* 21 220  X<> L 221  / 222  ST* 09 223  ST* 10 224  ST* 11 225  ST* 12 226  GTO 02 227  LBL 00 228  RCL 13 229  REGMOVE 230  FC?C 06 231  GTO 00 232  RCL 00           233  SQRT 234  ST/ 01 235  ST/ 02 236  ST/ 03 237  ST/ 04 238  RCL 09  239  STO 05 240  RCL 10 241  STO 06 242  RCL 11 243  STO 07 244  RCL 12 245  STO 08 246  RCL 18 247  STO 09 248  RCL 19 249  STO 10 250  RCL 20 251  STO 11 252  RCL 21 253  STO 12 254  GTO 14 255  LBL 00 256  FC?C 07 257  GTO 14 258  1 259  RCL 00 260  - 261  SQRT 262  ST/ 14 263  ST/ 15 264  ST/ 16 265  ST/ 17 266  RCL 14 267  STO 01 268  RCL 15 269  STO 02 270  RCL 16 271  STO 03 272  RCL 17 273  STO 04 274  RCL 12 275  RCL 11 276  RCL 10 277  RCL 09 278  XEQ "1/Q" 279  STO 05 280  STO 09 281  RDN 282  STO 06 283  STO 10           284  RDN 285  STO 07 286  STO 11 287  X<>Y 288  STO 08  289  STO 12 290  XEQ "Q*Q" 291  STO 14 292  RDN 293  STO 15 294  RDN 295  STO 16 296  X<>Y 297  STO 17 298  RCL 18 299  STO 01 300  RCL 19 301  STO 02 302  RCL 20 303  STO 03 304  RCL 21 305  STO 04 306  XEQ "Q*Q" 307  STO 18 308  RDN 309  STO 19 310  RDN 311  STO 20 312  X<>Y 313  STO 21 314  RCL 13 315  REGMOVE 316  LBL 14 317  RCL 04 318  RCL 03 319  RCL 02 320  RCL 01 321  END

( 523 bytes /SIZE 027+??? )

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

where     x'+y'.i+z'.j+t'.k = sn ( x+y.i+z.j+t.k | m )      provided  R00 = m

Example1:      m = 1/PI   q = 1 + 2 i + 3 j + 4 k

PI   1/X   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>    1.498262250                    ---Execution time = 52s---
RDN     0.205407205
RDN     0.308110808
RDN     0.410814411

sn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = 1.498262250 + 0.205407205 i + 0.308110808 j + 0.410814411 k    and

cn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = -0.694940084 + 0.442849489 i + 0.664274234 j + 0.885698978 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = -0.719248903 + 0.136199160 i + 0.204298740 j + 0.272398320 k    in R09 to R12

Example2:      m = PI   q = 1 + 2 i + 3 j + 4 k

PI   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>    0.860242323                    ---Execution time = 53s---
RDN    -0.005873620
RDN    -0.008810430
RDN    -0.011747240

sn ( 1 + 2 i + 3 j + 4 k | PI ) = 0.860242323 - 0.005873620 i - 0.008810430 j - 0.011747240 k    and

cn ( 1 + 2 i + 3 j + 4 k | PI ) = 0.510825408 + 0.009891315 i + 0.014836972 j + 0.019782630 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | PI ) = -0.037125130 - 0.427571167 i - 0.645356751 j - 0.855142335 k    in R09 to R12

Example3:      m = -PI   q = 1 + 2 i + 3 j + 4 k

PI   CHS   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>   -1.473447254                    ---Execution time = 38s---
RDN    -0.079007897
RDN    -0.118511846
RDN    -0.158015795

sn ( 1 + 2 i + 3 j + 4 k | -PI ) = -1.473447254 - 0.079007897 i - 0.118511846 j - 0.158015795 k    and

cn ( 1 + 2 i + 3 j + 4 k | -PI ) = 0.285290841 - 0.408053646 i - 0.612080469 j - 0.816107292 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | -PI ) = -2.793322256 - 0.130928419 i - 0.196392628 j - 0.261856838 k    in R09 to R12

2°)  Gauss' Transformation

-This method is described in "Jacobian Elliptic Functions for the HP-41"
-Moreover, Gauss' transformation is also applied directly if m < 0

Data Registers:           •  R00 = m                                  ( Register R00 is to be initialized before executing "JEFQ" )

R01 to R04 = sn ( q | m )                      R13 thru R26...... : temp
R05 to R08 = cn ( q | m )
R09 to R12 = dn ( q | m )

Flag:  F10
Subroutines:  "SINQ"  "COSQ"  "CHQ"  "THQ"  "Q*Q"  "1/Q"  ( cf "Quaternions for the HP-41" )

-Line 233 is a three-byte  GTO 03

 01  LBL "JEFQ"   02  CF 10   03  STO 22   04  RDN   05  STO 23             06  RDN   07  STO 24   08  X<>Y   09  STO 25   10  RCL 00   11  STO 21    12  1   13  X>Y?   14  GTO 01   15  X#Y?   16  GTO 00   17  RCL 25    18  RCL 24   19  RCL 23   20  RCL 22   21  XEQ "CHQ"   22  XEQ "1/Q"   23  STO 05    24  STO 09   25  RDN   26  STO 06   27  STO 10    28  RDN   29  STO 07   30  STO 11   31  X<>Y   32  STO 08   33  STO 12   34  RCL 25   35  RCL 24   36  RCL 23    37  RCL 22   38  XEQ "THQ"   39  STO 01   40  RDN   41  STO 02   42  RDN 43  STO 03   44  X<>Y    45  STO 04             46  X<>Y   47  R^   48  R^   49  RTN   50  LBL 00   51  SF 10   52  X<>Y   53  SQRT   54  ST* 22   55  ST* 23   56  ST* 24   57  ST* 25   58  LASTX   59  1/X   60  STO 21   61  LBL 01   62  26.026   63  STO 26   64  SIGN   65  STO 01    66  RCL 21   67  LBL 02   68  ENTER   69  CHS   70  1   71  +   72  SQRT   73  1   74  ST+ 26   75  +   76  ENTER   77  ENTER   78  2   79  /   80  ST* 01   81  RDN   82  X^2   83  /   84  STO IND 26 85  X^2   86  X#0?   87  GTO 02   88  RCL 01             89  ST* 22   90  ST* 23   91  ST* 24   92  ST* 25   93  13.001008   94  STO 21    95  SIGN   96  STO 17   97  CLX   98  STO 18   99  STO 19 100  STO 20 101  RCL 25 102  RCL 24 103  RCL 23 104  RCL 22 105  XEQ "SINQ" 106  STO 09 107  RDN 108  STO 10 109  RDN 110  STO 11 111  X<>Y 112  STO 12 113  RCL 25 114  RCL 24 115  RCL 23 116  RCL 22 117  XEQ "COSQ" 118  STO 13 119  RDN 120  STO 14 121  RDN 122  STO 15 123  X<>Y 124  STO 16 125  LBL 03 126  RCL 21 127  REGMOVE 128  XEQ "Q*Q" 129  STO 13 130  RDN 131  STO 14           132  RDN 133  STO 15 134  X<>Y 135  STO 16 136  RCL 09 137  STO 01 138  STO 05 139  RCL 10 140  STO 02 141  STO 06 142  RCL 11 143  STO 03 144  STO 07 145  RCL 12 146  STO 04 147  STO 08 148  XEQ "Q*Q" 149  STO 05 150  STO 17 151  RDN 152  STO 06 153  STO 18 154  RDN 155  STO 07 156  STO 19 157  X<>Y 158  STO 08 159  STO 20 160  1 161  RCL IND 26 162  + 163  ST* 01 164  ST* 02 165  ST* 03 166  ST* 04 167  LASTX 168  ST* 05 169  ST* 06 170  ST* 07 171  ST* 08 172  CHS 173  ST* 17 174  ST* 18 175  ST* 19 176  ST* 20 177  1 178  ST+ 05 179  ST+ 17 180  RCL 08           181  RCL 07 182  RCL 06 183  RCL 05 184  XEQ "1/Q" 185  STO 05 186  RDN 187  STO 06 188  RDN 189  STO 07 190  X<>Y 191  STO 08 192  XEQ "Q*Q" 193  STO 09 194  RDN 195  STO 10 196  RDN 197  STO 11 198  X<>Y 199  STO 12 200  RCL 13 201  STO 01 202  RCL 14 203  STO 02 204  RCL 15 205  STO 03 206  RCL 16 207  STO 04 208  XEQ "Q*Q" 209  STO 13 210  RDN 211  STO 14 212  RDN 213  STO 15 214  X<>Y 215  STO 16 216  RCL 17 217  STO 01 218  RCL 18 219  STO 02 220  RCL 19 221  STO 03           222  RCL 20 223  STO 04 224  XEQ "Q*Q" 225  STO 17 226  RDN 227  STO 18 228  RDN 229  STO 19 230  X<>Y 231  STO 20 232  DSE 26 233  GTO 03 234  FC?C 10 235  GTO 00 236  13.017004 237  REGSWAP 238  RCL 00 239  SQRT 240  ST/ 09 241  ST/ 10 242  ST/ 11 243  ST/ 12 244  LBL 00 245  9.001012 246  REGMOVE 247  RCL 04 248  RCL 03 249  RCL 02 250  RCL 01 251  END

( 423 bytes /SIZE 027+??? )

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

where     x'+y'.i+z'.j+t'.k = sn ( x+y.i+z.j+t.k | m )      provided  R00 = m

Example1:      m = 1/PI   q = 1 + 2 i + 3 j + 4 k

PI   1/X   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>    1.498262250                    ---Execution time = 58s---
RDN     0.205407205
RDN     0.308110807
RDN     0.410814409

sn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = 1.498262250 + 0.205407205 i + 0.308110807 j + 0.410814409 k    and

cn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = -0.694940081 + 0.442849491 i + 0.664274237 j + 0.885698982 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | 1/PI ) = -0.719248900 + 0.136199160 i + 0.204298741 j + 0.272398321 k    in R09 to R12

Example2:      m = PI   q = 1 + 2 i + 3 j + 4 k

PI   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>    0.860242322                    ---Execution time = 60s---
RDN    -0.005873618
RDN    -0.008810427
RDN    -0.011747237

sn ( 1 + 2 i + 3 j + 4 k | PI ) = 0.860242322 - 0.005873618 i - 0.008810427 j - 0.011747237 k    and

cn ( 1 + 2 i + 3 j + 4 k | PI ) = 0.510825404 + 0.009891315 i + 0.014836973 j + 0.019782630 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | PI ) = -0.037125130 - 0.427571169 i - 0.645356753 j - 0.855142339 k    in R09 to R12

Example3:      m = -PI   q = 1 + 2 i + 3 j + 4 k

PI   CHS   STO 00

4    ENTER^
3    ENTER^
2    ENTER^
1    XEQ "JEFQ"   >>>>   -1.473447238                    ---Execution time = 68s---
RDN    -0.079007894
RDN    -0.118511841
RDN    -0.158015788

sn ( 1 + 2 i + 3 j + 4 k | -PI ) = -1.473447238 - 0.079007894 i - 0.118511841 j - 0.158015788 k    and

cn ( 1 + 2 i + 3 j + 4 k | -PI ) = 0.285290836 - 0.408053637 i - 0.612080456 j - 0.816107275 k   in  R05 to 508

dn ( 1 + 2 i + 3 j + 4 k | -PI ) = -2.793322223 - 0.130928415 i - 0.196392622 j - 0.261856830 k    in R09 to R12

Notes:

-Here, the "LBL 03 loop" stops when the parameter m = 0
-So, this variant is often slower than the first one, but it's also shorter...

References:

[1]   Abramowitz and Stegun - "Handbook of Mathematical Functions" -  Dover Publications -  ISBN  0-486-61272-4
[2]   http://functions.wolfram.com/