Polynomials2

# Polynomials(II) for the HP-41

Overview

1°)  Square
2°)  Square-Root
3°)  Cube
4°)  Cubic-Root
5°)  Power of a Polynomial
6°)  N-th Root of a Polynomial
7°)  Derivative of a Polynomial
8°)  Primitive of a Polynomial
9°)  Primitive of Functions: p(x) Exp(A.x)
10°) Primitive of Functions: p(x) Sin(h) (A.x) + q(x) Cos(h) (A.x)

1°)  Square of a Polynomial

-Given a real polynomial   p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0 ,  "P^2"  calculates  [ p(x) ]2

Data Registers:             R00 = BBB.EEE              ( Registers Rbb thru Ree are to be initialized before executing "P^2" )

R01 = bbb.eee
R02-R03-R04-R05: temp              •  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flags: /
Subroutines: /

 01  LBL "P^2"  02  STO 04  03  X<>Y  04  STO 01          05  STO 02   06  FRC  07   E3  08  * 09  RCL 01  10  INT  11  -  12  STO 05          13  ST+ X  14  +  15   E3  16  / 17  RCL 04  18  +  19  STO 00  20  CLRGX  21  LBL 01          22  RCL IND 01  23  RCL IND 02  24  * 25  ST+ IND 04  26  ISG 04  27  CLX  28  ISG 01  29  GTO 01  30  RCL 05          31  ST- 04  32  1 33  +  34  ST- 01  35  ISG 02  36  GTO 01  37  RCL 00          38  END

( 60 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Y bbb.eee / X BBB BBB.EEE

where     bbb.eee  =  control number of p(x)                       all  bbb > 005
and      BBB.EEE = -----------------  [ p(x) ]2

Example:            p(x) = 2 x3 - 4 x2 + 3 x + 7

-If - for instance - you store p(x) in R11 thru R14  ( control number = 11.014 )

2  STO 11      3  STO 13
-4  STO 12      7  STO 14

and if you choose  BBB = 15

11.014   ENTER^
15      XEQ "P^2"   >>>>  15.021                               ---Execution time = 8s---

-And you get  R15 = 4 ,  R16 = -16 ,  R17 = 28 ,  R18 = 4  ,  R19 = -47 ,  R20 = 42  , R21 = 49

Whence,    [ p(x) ]2 = 4 x6 - 16 x5 + 28 x4 + 4 x3 - 47 x2 + 42 x + 49

Note:

-The blocks of registers cannot overlap

2°)  Square-Root of a Polynomial

-Given a polynomial  p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0     with n = deg p is even  and  an  non-negative,
"SQRTP"  finds 2 polynomials  q(x)  &  r(x)  such that

p = q2 + r   ,    deg q = n / 2   ,    deg r < deg q

Data Registers:             R00 = bbb.eee                    ( Registers Rbb thru Ree are to be initialized before executing "SQRTP" )

R01 thru R04: temp                   •  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flag:  F10
Subroutines: /

 01  LBL "SQRTP"   02  STO 00   03  RCL IND X   04  SQRT   05  STO IND 00   06  0   07  RCL 00            08  ISG T   09  X=0?   10  RTN   11  FRC   12   E3   13  *   14  RCL 00    15  INT   16  -   17  2   18  /   19  FRC   20  X#0?   21  SF 41   22  LASTX   23  RCL 00 24  INT   25  STO Z   26  +   27  DSE X   28   E3   29  /   30  +   31  STO 01            32  SF 10   33  LBL 01   34  RCL 01   35  INT   36  STO 03   37  RCL 00    38  INT   39  1   40  ST+ Z   41  +   42  RCL 03   43   E3   44  /   45  +   46  STO 02 47  RCL IND Y   48  FS?C 10   49  GTO 00   50  LBL 02   51  RCL IND 02   52  RCL IND 03   53  *   54  -   55  DSE 03   56  ISG 02   57  GTO 02   58  LBL 00    59  RCL IND 00   60  ST+ X   61  /   62  STO IND 02   63  ISG 01   64  GTO 01   65  RCL 00            66  FRC   67  RCL 02   68  INT   69  STO 02 70  +   71  1   72  +   73  STO 01   74  RCL 02   75  RCL 03   76  -   77  STO 04   78  RCL 00   79  INT   80  RCL 02            81   E3   82  /   83  +   84  STO 03    85  ISG 03   86  LBL 03   87  RCL IND 01   88  LBL 04   89  RCL IND 02   90  RCL IND 03   91  *   92  - 93  DSE 02   94  ISG 03   95  GTO 04   96  STO IND 01   97  RCL 04   98  ST+ 02   99  DSE X 100  STO 04 101  ST- 03 102  ISG 01 103  GTO 03 104  RCL 03          105  INT 106  RCL 00  107  FRC 108  + 109  RCL 03 110  FRC 111  RCL 00 112  INT 113  + 114  END

( 162 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Y / bbb.eee(r) X bbb.eee bbb.eee(q)

where     bbb.eee  =  control number of p(x)                          bbb > 004

Example1:         p(x) =  4 x6 - 16 x5 + 28 x4 + 4 x3 - 47 x2 + 42 x + 49

-Store, for example, these 7 coefficients into  R05 thru R11

5.011   XEQ "SQRTP"  >>>>   5.008                       ---Execution time = 9s---
X<>Y   9.011

-You get in R05 thru R08   q(x) = 2 x3 - 4 x2 + 3 x + 7
and    in R09 thru R11   r(x) = 0

Example2:         p(x) =  4 x6 - 16 x5 + 28 x4 + 4 x3 - 46 x2 + 44 x + 52

-Store, for example, these 7 coefficients into  R05 thru R11

5.011   XEQ "SQRTP"  >>>>   5.008                       ---Execution time = 9s---
X<>Y   9.011

-You get in R05 thru R08   q(x) = 2 x3 - 4 x2 + 3 x + 7
and    in R09 thru R11   r(x) =   x2 + 2 x + 3

Notes:

-You could use "DEL" to delete the zero dominant elements in r(x)  ( cf "Polynomials for the HP-41" )
-The coefficients of q(x) and r(x) overwrite the coefficients of p(x)
-There is also another solution:  - q(x)

-Lines 01 to 64 calculate the square-root q(x). So, if you are sure that p(x) is the square of a real polynomial, the other lines are useless !
-If deg p is odd, you'll get  NONEXISTENT line 21
-If p(x) is a non-negative constant, Y-output = 0

3°)  Cube of a Polynomial

-Given a real polynomial   p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0 ,  "P^3"  calculates  [ p(x) ]3

Data Registers:             R00 = BBB.EEE              ( Registers Rbb thru Ree are to be initialized before executing "P^3" )

R01 = bbb.eee
R02-R03-R04-R05-R06: temp              •  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flags: /
Subroutines: /

 01  LBL "P^3"  02  STO 05  03  X<>Y  04  STO 01  05  STO 02          06  STO 03   07  FRC  08   E3  09  *  10  RCL 01 11  INT  12  -  13  STO 06          14  3  15  *  16  +  17   E3  18  /  19  RCL 05  20  + 21  STO 00          22  CLRGX  23  LBL 01  24  RCL IND 01  25  RCL IND 02  26  RCL IND 03  27  *  28  *  29  ST+ IND 05  30  ISG 05 31  CLX  32  ISG 01  33  GTO 01  34  RCL 06          35  ENTER^  36  ST- 05  37  1  38  +  39  ST- 01  40  ISG 02 41  GTO 01  42  ST- 02  43  X<>Y  44  ST- 05  45  ISG 03  46  GTO 01  47  RCL 00          48  END

( 74 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Y bbb.eee / X BBB BBB.EEE

where     bbb.eee  =  control number of p(x)                       all  bbb > 006
and      BBB.EEE = -----------------  [ p(x) ]3

Example:            p(x) = 2 x3 - 4 x2 + 3 x + 7

-If - for instance - you store p(x) in R11 thru R14  ( control number = 11.014 )

2  STO 11      3  STO 13
-4  STO 12      7  STO 14

and if you choose  BBB = 15

11.014   ENTER^
15      XEQ "P^3"   >>>>  15.024                               ---Execution time = 35s---

-And you get in registers  R15 thru R24

[ p(x) ]3 = 8 x9 - 48 x8 + 132 x7 - 124 x6 - 138 x5 + 480 x4 - 183 x3 - 399 x2 + 441 x + 343

Note:

-The blocks of registers cannot overlap

4°)  Cubic-Root of a Polynomial

-Given a polynomial  p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0     with n = deg p is a multiple of 3 ,
"CBRTP"  finds 2 polynomials  q(x)  &  r(x)  such that

p = q3 + r   ,    deg q = n / 3   ,    deg r < 2 deg q

Data Registers:             R00 = bbb.eee                    ( Registers Rbb thru Ree are to be initialized before executing "CBRTP" )

R01 thru R05: temp                   •  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flag:  F10
Subroutines: /

-Line 62 is a three-byte GTO

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

( 238 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Y / bbb.eee(r) X bbb.eee bbb.eee(q)

where     bbb.eee  =  control number of p(x)                          bbb > 005

Example1:         p(x) =  8 x9 - 48 x8 + 132 x7 - 124 x6 - 138 x5 + 480 x4 - 183 x3 - 399 x2 + 441 x + 343

-Store, for example, these 10 coefficients into  R06 thru R15

6.015   XEQ "CBRTP"  >>>>   6.009                       ---Execution time = 59s---
X<>Y  10.015

-You get in R06 thru R09   q(x) = 2 x3 - 4 x2 + 3 x + 7
and    in R10 thru R15   r(x) = 0

Example2:         p(x) =  8 x9 - 48 x8 + 132 x7 - 124 x6 - 136 x5 + 480 x4 - 183 x3 - 400 x2 + 440 x + 340

-Store, for example, these 10 coefficients into  R06 thru R15

6.015   XEQ "CBRTP"  >>>>   6.009                       ---Execution time = 59s---
X<>Y  10.015

-You get in R06 thru R09   q(x) = 2 x3 - 4 x2 + 3 x + 7
and    in R10 thru R15   r(x) =  2 x5 - x2 - x - 3

Notes:

-You could use "DEL" to delete the zero dominant elements in r(x)  ( cf "Polynomials for the HP-41" )
-The coefficients of q(x) and r(x) overwrite the coefficients of p(x)

-If  an < 0 , you'll get a DATAERROR line 06, so lines 05-06 could be replaced by an M-code routine ( or a focal subroutine )  XROOT
that works for negative arguments too...

-Lines 01 to 114 calculate the cubic-root q(x). So, if you are sure that p(x) is the cube of a real polynomial, the other lines are useless !
-If deg p is not a multiple of 3, you'll get  NONEXISTENT line 26
-If p(x) is a constant, Y-output = 0

5°)  Power of a Polynomial

-Given a positive integer n and a real polynomial   p(x) = am.xm+am-1.xm-1+ ... + a1.x+a0 ,  "P^N"  calculates  [ p(x) ]n

Data Registers:             R00 = deg p              ( Registers Rbb thru Ree are to be initialized before executing "P^N" )

R01 ...... Rnn: temp            •  Rbb = am  •  Rbb+1 = am-1  ................  •  Ree = a0
Flags: /
Subroutines: /

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

( 109 bytes / SIZE nnn+1+??? )

 STACK INPUTS OUTPUTS Z bbb.eee / Y n / X BBB BBB.EEE

where     bbb.eee  =  control number of p(x)                       all  bbb > nnn
and      BBB.EEE = -----------------  [ p(x) ]n

Example:            p(x) = 2 x3 - 4 x2 + 3 x + 7   ,    n = 4

-If - for instance - you store p(x) in R11 thru R14  ( control number = 11.014 )

2  STO 11      3  STO 13
-4  STO 12      7  STO 14

and if you choose  BBB = 15

11.014   ENTER^
4       ENTER^
15      XEQ "P^N"   >>>>  15.027                               ---Execution time = 5m27s---

-And you get in registers  R15 thru R27

[ p(x) ]4 = 16 x12 - 128 x11 + 480 x10 - 864 x9 + 280 x8 + 2064 x7 - 3568 x6 + 408 x5 + 5289 x4 - 3556 x3 - 2842 x2 + 4116 x + 2401

Notes:

-The blocks of registers cannot overlap
-This method is surely not the fastest way to compute the n-th power of a polynomial !
-On the other hand, it uses less data registers.

6°)  N-th Root of a Polynomial

-Given a positive integer n and a real polynomial   p(x) = am.xm+am-1.xm-1+ ... + a1.x+a0   where  m is a multiple of n

"P^1/N"  calculates q(x) & r(x) such that

deg q = m / n    deg r < (n-1) deg q     p = qn + r

-If  r = 0 ,  q(x) = [ p(x) ] 1/n

Data Registers:             R00 = deg p              ( Registers Rbb thru Ree are to be initialized before executing "P^1/N" )

R01 ...... Rnn: temp            •  Rbb = am  •  Rbb+1 = am-1  ................  •  Ree = a0
Flag:  F10
Subroutines: /

-Lines 48 & 141 are three-byte  GTO's

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

( 329 bytes / SIZE nnn+1+??? )

 STACK INPUTS OUTPUTS Y bbb.eee bbb.eee(r) X n bbb.eee(q)

where     bbb.eee  =  control number of p(x)                          bbb > nnn

Example:         p(x) =  32 x10 - 320 x9 + 1520 x8 - 44792 x7 + 9040 x6 - 13024 x5 + 13560 x4 - 10080 x3 + 5130 x2 - 1620 x + 245  ,   n = 5

-Store, for example, these 11 coefficients into  R11 thru R21

11.021   ENTER^
5        XEQ "P^1/N"  >>>>   11.013                       ---Execution time = 11m55s---
X<>Y   14.021

-You get in R11 thru R13   q(x) = 2 x2 - 4 x + 3
and    in R14 thru R21   r(x) =     x7 + 2

Notes:

-You could use "DEL" to delete the zero dominant elements in r(x)  ( cf "Polynomials for the HP-41" )
-The coefficients of q(x) and r(x) overwrite the coefficients of p(x)

-If  am < 0 , you'll get a DATAERROR line 08, so lines 07-08 could be replaced by an M-code routine ( or a focal subroutine )  XROOT
that works for negative arguments too ( if n is odd )...

-Or replace line 06 to 08 by

CF 10           STO 00       CF 10            X<>Y          1/X
X<0?            2                  X<> 00          ABS            Y^X
SF 10           MOD           FC? 10          X<>Y          FS? 10
RCL Z          X=0?           GTO 00         LBL 00         CHS

-Lines 01 to 142 calculate the n-th root q(x). So, if you are sure that p(x) is the n-th power of a polynomial, the other lines are useless !
-If deg p is not a multiple of n, you'll get  NONEXISTENT line 26
-If p(x) is a constant, Y-output = 0

-This method is surely not the fastest way to compute the n-th root of a polynomial, especially to find the remainder !
-On the other hand, it only uses the data registers employed by p(x) , plus R00 thru Rnn

7°)  Derivative of a Polynomial

"DER" calculates the coefficients of a given polynomial p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0

Data Registers:             R00-R01: temp                   ( Registers Rbb thru Ree are to be initialized before executing "DER" )

•  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flags:  /
Subroutines: /

 01  LBL "DER"  02  ENTER^  03  STO 00  04  FRC  05   E3  06  *  07  RCL 00  08  INT  09  -  10  STO 01  11  LBL 01  12  RCL IND Y  13  RCL Y  14  *  15  STO IND Z  16  CLX  17  SIGN  18  -  19  ISG Y  20  GTO 01  21  RCL 00  22   E-3  23  RCL 01  24  X#0?  25  SIGN  26  *  27  -  28  END

( 44 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS X bbb.eee bbb'.eee

where     bbb.eee  =  control number of p(x)   ,     bbb'.eee  =  control number of p'(x)      bbb > 001

Example:         p(x) =  4 x3 + 7 x2 - 3 x + 1

-Store these 4 coefficients in  R11-R12-R13-R14 ( for instance )

11.014   XEQ "DER"  >>>>   12.014

R11 = 12   R12 = 14  R13 = -3       so     p'(x) = 12 x2 + 14 x - 3

8°)  Primitive of a Polynomial

-Given a polynomial p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0   "PRIM"  calculates the coefficient of the primitive P(x) of p(x) that vanishes for x = 0

Data Registers:             R00: temp                   ( Registers Rbb thru Ree are to be initialized before executing "PRIM" )

•  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0            Ree+1 is used too
Flags:  /
Subroutines: /

 01  LBL "PRIM"  02  ENTER^  03  STO 00  04  FRC  05   E3  06  *  07  RCL 00  08  INT  09  -  10  ISG X  11  LBL 01  12  RCL IND Y  13  RCL Y  14  /  15  STO IND Z  16  CLX  17  SIGN  18  -  19  ISG Y  20  GTO 01  21  STO IND Y  22  X<>Y  23  INT  24   E3  25  /  26  RCL 00  27  INT  28  +  29  END

( 47 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS X bbb.eee bbb.eee'

where     bbb.eee  =  control number of p(x)   ,     bbb.eee'  =  control number of P(x)      bbb > 000

Example:         p(x) =  8 x3 + 9 x2 - 4 x + 7

-Store these 4 coefficients in  R01-R02-R03-R04 ( for instance )

1.004   XEQ "PRIM"  >>>>   1.005

R01 = 2   R02 = 3  R03 = -2  R04 = 7  R05 = 0     so     P(x) = 2 x4 + 3 x3 - 2 x2 + 7 x

9°)  Primitive of Functions:   p(x) Exp(A.x)

-"PEX" returns a primitive F(x) of the form  P(x) Exp(A.x) where P(x) has the same degree as p(x)

p(x) = an.xn+an-1.xn-1+ ... + a1.x+a0

-The coefficients of P(x) overwrite the coefficients of p(x)

Data Registers:             R00-R01-R02:   temp                   ( Registers Rbb thru Ree are to be initialized before executing "PEX" )

•  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0
Flags:  /
Subroutines: /

-Line 23 is a synthetic TEXT0  ( NOP instruction )
-It may be replaced by LBL 01

 01  LBL "PEX"  02  X<>Y  03  STO 01  04  STO 02  05  INT  06  LASTX  07  FRC  08   E3  09  *  10  -  11  STO 00  12  CLX  13  DSE 00  14  LBL 01  15  RCL 00  16  *  17  RCL IND 02  18  +  19  X<>Y  20  /  21  STO IND 02  22  ISG 00  23  ""  24  ISG 02  25  GTO 01  26  RCL 01  27  END

( 42 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Y bbb.eee / X A bbb.eee

where     bbb.eee  =  control number of p(x)  =  control number of P(x)      bbb > 002

Example:         f(x) = ( 7 x6 - 3 x5 + 4 x4 + 2 x3 + 8 x2 + 5 x + 1 ) exp ( -x/2 )

-Store - for instance - these 7 coefficients into R11 to R17

7  STO 11     2  STO 14      1  STO 17
-3 STO 12     8  STO 15
4  STO 13     5  STO 16

-Here,     A = -1/2   so,

11.017  ENTER^
-0.5     XEQ "PEX"   >>>>    11.017                              ---Execution time = 4s---

-And we find in R11 thru R17:    -14   -162   -1628   -13028   -78184   -312746   -625494

-Thus,   F(x) = ( -14 x6 - 162 x5 - 1628 x4 - 13028 x3 - 78184 x2 - 312746 x - 625494 ) exp ( -x/2 )

Notes:

-As usual, add an arbitrary constant to get all the primitives
-The costant A is saved in L-register

10°) Primitive of Functions: p(x) Sin(h) (A.x) + q(x) Cos(h) (A.x)

-If flag F01 is clear, "PS+QC"  gives a primitive F(x) = P(x) Sin (A.x) + Q(x) Cos (A.x) of the function f(x) = p(x) Sin (A.x) + q(x) Cos (A.x)

-If flag F01 is set,    "PS+QC"  gives a primitive F(x) = P(x) Sinh (A.x) + Q(x) Cosh (A.x) of the function f(x) = p(x) Sinh (A.x) + q(x) Cosh (A.x)

where  p , q  , P , Q  are polynomials

-We assume that p & q  have the same degree.
-However, it's easy to use this program even if  deg p # deg q  ( cf example 2 )

Data Registers:             R00-R01-R02:   temp                   ( Registers Rbb thru Ree are to be initialized before executing "PS+QC" )

•  Rbb = an  •  Rbb+1 = an-1  ................  •  Ree = a0    coefficients of p(x)
•  Rbb' = a'n •  Rbb'+1 = a'n-1  ..............  •  Ree' = a'0   coefficients of q(x)

Flags:  F01                     CF 01 = Sin & Cos
SF 01 = Sinh & Cosh
Subroutines: /

-Lines 35-37 are synthetic TEXT0  ( NOP instruction )
-They may be replaced by LBL 01

 01  LBL "PS+QC"  02  STO 00  03  RDN  04  STO 01            05  STO 02  06  X<>Y  07  STO 03 08  STO 04            09  INT  10  LASTX  11  FRC  12   E3  13  *  14  - 15  STO 05  16  CLST  17  DSE 05  18  LBL 01  19  RCL 05            20  ST* Z  21  * 22  RCL IND 02  23  +  24  RCL 00            25  /  26  STO Z  27  X<> IND 04  28  + 29  RCL 00            30  /  31  FC? 01  32  CHS  33  STO IND 02  34  ISG 05  35  "" 36  ISG 02  37  ""  38  ISG 04  39  GTO 01  40  RCL 01            41  RCL 03  42  END

( 64 bytes / SIZE ??? )

 STACK INPUTS OUTPUTS Z bbb.eee(p) / Y bbb.eee(q) bbb.eee(Q) X A bbb.eee(P)

where      bbb > 005

Example1a:   Calculate the indefinite integral    I = §  [ ( 2 x4 + 5 x3 + 3 x2 - 4 x + 7 ) Sin ( x/2 ) + ( 3 x4 - 2 x2 - 4 x - 1 ) Cos ( x/2 )  ] dx

-Store, for example, the coefficients of p(x) into R11 thru R15 and the coeficients of q(x) into R21 thru R25

2   STO 11                 3   STO 21
5   STO 12                 0   STO 22
3   STO 13                -2   STO 23
-4  STO 14                -4   STO 24
7   STO 15                -1  STO 25

-Here,     A = 1/2   so,

CF  01                     ( Sin & Cos )

11.015  ENTER^
21.025  ENTER^
0.5     XEQ "PS+QC"  >>>>  11.015                                     ---Execution time = 4s---
X<>Y  21.025

R11-R12-R13-R14-R15 =  [ 6  32  -232  -752  1838 ]
R21-R22-R23-R24-R25 =  [ -4  38  186  -920  -1518 ]

-Thus,  I = ( 6 x4 + 32 x3 - 232 x2 - 752 x + 1838 ) Sin ( x/2 ) + ( -4 x4 + 38 x3 + 186 x2 - 920 x - 1518 ) Cos ( x/2 ) + Cste

Example1b:   Calculate the indefinite integral    I = §  [ ( 2 x4 + 5 x3 + 3 x2 - 4 x + 7 ) Sinh ( x/2 ) + ( 3 x4 - 2 x2 - 4 x - 1 ) Cosh ( x/2 )  ] dx

-Store, for example, the coefficients of p(x) into R11 thru R15 and the coeficients of q(x) into R21 thru R25

2   STO 11                 3   STO 21
5   STO 12                 0   STO 22
3   STO 13                -2   STO 23
-4  STO 14                -4   STO 24
7   STO 15                 -1  STO 25

-Here,     A = 1/2   so,

SF  01                     ( Sinh & Cosh )

11.015  ENTER^
21.025  ENTER^
0.5     XEQ "PS+QC"  >>>>  11.015                                     ---Execution time = 4s---
X<>Y  21.025

R11-R12-R13-R14-R15 =  [ 6  -32  224  -800  1806 ]
R21-R22-R23-R24-R25 =  [ 4  -38  198  -904  1614 ]

-Thus,  I = ( 6 x4 - 32 x3 + 224 x2 - 800 x + 1806 ) Sinh ( x/2 ) + ( 4 x4 - 38 x3 + 198 x2 - 904 x + 1614 ) Cosh ( x/2 ) + Cste

Example2:

-If  deg p # deg q , "PS+QC" will return wrong results.
-But simply add zeros on the left and use control numbers as if the degrees were the same:

-Calculate    I = §  [ ( 2 x4 + 5 x3 + 3 x2 - 4 x + 7 ) Sin ( x/2 ) + ( - 2 x2 - 4 x - 1 ) Cos ( x/2 )  ] dx

-Store, for example, the coefficients of p(x) into R11 thru R15 and the coeficients of q(x) into R21 thru R25 as if deg q = 4

2   STO 11                 0   STO 21
5   STO 12                 0   STO 22
3   STO 13                -2   STO 23
-4  STO 14                -4   STO 24
7   STO 15                -1  STO 25

-Here,     A = 1/2   so,

CF  01                     ( Sin & Cos )

11.015  ENTER^
21.025  ENTER^
0.5     XEQ "PS+QC"  >>>>  11.015                                     ---Execution time = 4s---
X<>Y  21.025

R11-R12-R13-R14-R15 =  [ 0  32  56  -752  -466 ]
R21-R22-R23-R24-R25 =  [ -4  -10  186  232  -1518 ]

-Thus,  I = ( 32 x3 + 56 x2 - 752 x - 466 ) Sin ( x/2 ) + ( -4 x4 - 10 x3 + 186 x2 + 232 x - 1518 ) Cos ( x/2 ) + Cste

-Likewise, you will find ( with SF 01 ):

I = §  [ ( 2 x4 + 5 x3 + 3 x2 - 4 x + 7 ) Sinh ( x/2 ) + ( - 2 x2 - 4 x - 1 ) Cosh ( x/2 )  ] dx

=  ( -32 x3 - 64 x2 - 800 x - 498 ) Sinh ( x/2 ) + ( 4 x4 + 10 x3 + 198 x2 + 248 x + 1614 ) Cosh ( x/2 ) + Cste

Note:

-It could be useful to add the following instructions after line 15

RCL 01       FRC        -
INT              E3         X#Y?
LAST           *           SF 99

to produce an error message ( NONEXISTENT ) if deg p # deg q