Series for the HP-41
Overview
1°) Simple Series
a) Un = f(n)
b) Un+1 = f(Un)
c) Euler Transformation
2°) Double Series
3°) Triple Series
4°) Multiple Series
Warning:
-In these programs, the iterations stop when 2 consecutive partial sums
are equal.
-Therefore, wrong results may be obtained if one term is negligible
and the next one is not !
1°) Simple Series
a) Un = f(n)
-The following program calculates S = uk + uk+1
+ uk+2 + uk+3 + .........
= Sigma un for n >= k
defined by un = f(n) where
f is a known function.
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "SIGMA1" )
R01 = S
R02 = n
Flags: /
Subroutine: a program which computes
un = f(n) assuming n is in X-register upon entry
| 01 LBL "SIGMA1"
02 STO 02 03 CLX 04 STO 01 05 LBL 01 06 RCL 02 07 XEQ IND 00 08 ISG 02 09 LBL 02 10 RCL 01 11 + 12 STO 01 13 LASTX 14 X#Y? 15 GTO 01 16 END |
( 30 bytes / SIZE 003 )
| STACK | INPUTS | OUTPUTS |
| Y | / | S |
| X | k | S |
Example: Calculate S = 1 + 1/4 + 1/27 + ....... + 1/nn + .........
-Here we have f(n) = 1/nn and k = 1 and this function may be obtained by
LBL "T"
ENTER^
CHS
Y^X
RTN
-Then,
"T" ASTO 00
1 XEQ "SIGMA1" yields
X = 1.291285997 = R01 ( in 9 seconds )
b) Un+1 = f(Un)
-The following program calculates S = uk + uk+1
+ uk+2 + uk+3 + .........
= Sigma un for n >= k
when uk is given and un+1
= f(un;n) where f is a known function.
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "SIGMAR" )
R01 = S
R02 = n
R03 = un
Flags: /
Subroutine: a program which computes
un+1 = f(un;n) assuming un is in
X-register and n is in Y-register upon entry
| 01 LBL "SIGMAR"
02 STO 01 03 STO 03 04 X<>Y 05 STO 02 06 LBL 01 07 RCL 02 08 RCL 03 09 XEQ IND 00 10 STO 03 11 ISG 02 12 LBL 02 13 RCL 01 14 + 15 STO 01 16 LASTX 17 X#Y? 18 GTO 01 19 END |
( 33 bytes / SIZE 004 )
| STACK | INPUTS | OUTPUTS |
| Y | k | S |
| X | uk | S |
Example: Calculate S = 1 + 1/2!
+ 1/3! + ....... + 1/n! + .........
-It may be obtained with the first program but we can also define u1 = 1 and un+1 = un/(n+1)
LBL "T"
X<>Y
1
+
/
RTN
"T" ASTO 00
1 ENTER^ ( k = 1 = u1
)
XEQ "SIGMAR" produces
X = 1.718281830 = R01 in 7 seconds ( the exact
result is e-1 )
c) The Euler Transformation
-The Euler transformation is an acceleration method developed for alternating series: S = u0 - u1 + u2 - u3 + ...... + (-1)n un + .......
-The sum is rewritten: S = a0/2 + ( C11 a0 - C10 a1 ) / 22 + ( C22 a0 - C21 a1 + C20 a2 ) / 23 + ( C33 a0 - C32 a1 + C31 a2 - C30 a3 ) / 24 + ................
where Cnp = n! / ( p! ( n-p )! ) are the binomial coefficients.
-This may produce superb acceleration but it can also fail...
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "EULER" )
R01 = S
R02 thru R05: temp
Flags: /
Subroutine: a program which computes
un = f(n) assuming n is in X-register upon entry
| 01 LBL "EULER"
02 CLX 03 XEQ IND 00 04 2 05 / 06 STO 01 07 1 08 STO 02 09 LBL 01 10 RCL 02 11 STO 03 12 SIGN |
13 STO 04
14 CLX 15 STO 05 16 LBL 02 17 RCL 02 18 RCL 03 19 - 20 XEQ IND 00 21 RCL 04 22 * 23 ST+ 05 24 LASTX |
25 CHS
26 RCL 03 27 * 28 RCL 02 29 LASTX 30 - 31 1 32 + 33 / 34 STO 04 35 DSE 03 36 GTO 02 |
37 RCL 02
38 XEQ IND 00 39 RCL 04 40 * 41 RCL 05 42 + 43 2 44 RCL 02 45 1 46 + 47 STO 02 48 Y^X |
49 /
50 RCL 01 51 + 52 STO 01 53 LASTX 54 VIEW X 55 X#Y? 56 GTO 01 57 END |
( 75 bytes / SIZE 006 )
| STACK | INPUTS | OUTPUTS |
| X | / | S |
Example: Compute S = 1 - 2-1/2
+ 3-1/2 - 4-1/2 + ....... + (-1)n
(n+1)-1/2 + ......
-Here, we have f(n) = (n+1)-1/2
LBL "T"
SIGN
LASTX
+
SQRT
1/X
RTN
"T" ASTO 00
XEQ "EULER" the successive approximations are displayed
and 6mn27s later, X = 0.6048986431 = R01
-The error is -3 10-10 (!)
-Actually, only 28 terms are calculated
-Without an acceleration method, more than 1018 terms would
be necessary to achieve the same accuracy...
( execution time would be much greater than the age of the Universe!
)
Notes:
-This program computes the different f(n) several times and this may
be time-consuming if f is a complicated function.
-An alternative is to store the successive terms into data registers:
Add ST+ 06
after line 45
Add STO IND 06 after line 38
Replace line 20 by 7 + RCL
IND X
Add 8 STO 06
after line 08
Add STO 07
after line 03
-The same result is now obtained in 5mn19s ( but the SIZE must be at least 035 in this example )
-It is often better to sum the first terms and apply the Euler transformation
to the rest:
-In the example above, if you sum u0 - u1
+ u2 - u3 + ...... - u9 =
1 - 2-1/2 + 3-1/2 - 4-1/2 + .......
- 10-1/2
and execute "EULER" with
LBL "T"
11
+
SQRT
1/X
RTN
-Execution time becomes: 1mn22s
2°) Double Series
-The following program calculates S = Sigma un;m
for n >= n0 ; m >= m0
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "SIGMA2" )
R01 = n0 R03 = S R05 = m
R02 = m0 R04 = n
Flags: /
Subroutine: a program which computes
un;m = f(n;m) assuming n is in X-register and m is in
Y-register upon entry
| 01 LBL "SIGMA2"
02 STO 01 03 STO 04 04 X<>Y 05 STO 02 06 STO 05 07 CLX |
08 STO 03
09 DSE 05 10 LBL 01 11 ISG 05 12 CLX 13 RCL 05 14 RCL 04 |
15 XEQ IND 00
16 RCL 03 17 + 18 STO 03 19 LASTX 20 X#Y? 21 GTO 01 |
22 ISG 04
23 CLX 24 RCL 02 25 STO 05 26 RCL 04 27 XEQ IND 00 28 RCL 03 |
29 +
30 STO 03 31 LASTX 32 X#Y? 33 GTO 01 34 END |
( 52 bytes / SIZE 006 )
| STACK | INPUTS | OUTPUTS |
| Y | m0 | S |
| X | n0 | S |
Example: Calculate S = Sigma
1 / ( nn m! ) with n >=
1 and m >= 1
-Here, we have f(n;m) = 1 / ( nn m! ) and this function may be obtained by
LBL "T"
ENTER^
Y^X
X<>Y
FACT
*
1/X
RTN
-Then
"T" ASTO 00
1 ENTER^
XEQ "SIGMA2" and 1mn18s
later X = 2.218793264 = R03
Note:
-If the series converges too slowly, execution time becomes prohibitive.
-Lines 16 to 19 and 28 to 31 may then be replaced by
X<> 03 ST+ 03 RND RCL 03 RND
and the accuracy will be determined by the display format.
-Similar modifications apply to the other programs listed in this page.
3°) Triple Series
-The following program calculates S = Sigma un;m;p
for n >= n0 ; m >= m0 ; p >= p0
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "SIGMA3" )
R01 = n0 R04 = S
R07 = p
R02 = m0 R05 = n
R03 = p0 R06 = m
Flags: /
Subroutine: a program which computes
un;m;p = f(n;m;p) assuming n is in X-register ; m is in
Y-register and p is in Z-register upon entry.
| 01 LBL "SIGMA3"
02 STO 01 03 STO 05 04 RDN 05 STO 02 06 STO 06 07 X<>Y 08 STO 03 09 STO 07 10 CLX 11 STO 04 |
12 DSE 07
13 LBL 01 14 ISG 07 15 CLX 16 RCL 07 17 RCL 06 18 RCL 05 19 XEQ IND 00 20 RCL 04 21 + 22 STO 04 |
23 LASTX
24 X#Y? 25 GTO 01 26 ISG 06 27 CLX 28 RCL 03 29 STO 07 30 RCL 06 31 RCL 05 32 XEQ IND 00 33 RCL 04 |
34 +
35 STO 04 36 LASTX 37 X#Y? 38 GTO 01 39 ISG 05 40 CLX 41 RCL 03 42 STO 07 43 RCL 02 44 STO 06 |
45 RCL 05
46 XEQ IND 00 47 RCL 04 48 + 49 STO 04 50 LASTX 51 X#Y? 52 GTO 01 53 END |
( 74 bytes / SIZE 008 )
| STACK | INPUTS | OUTPUTS |
| Z | p0 | / |
| Y | m0 | S |
| X | n0 | S |
Example: Calculate S = Sigma
1 / ( nn m! (p!)2 )
with n >= 1 ; m >= 1 ; p >= 1
-Here, we have f(n;m;p) = 1 / ( nn m! (p!)2 ) and this function may be obtained by
LBL "T"
ENTER^
Y^X
X<>Y
FACT
*
X<>Y
FACT
X^2
*
1/X
RTN
-Then,
"T" ASTO 00
1 ENTER^ ENTER^
XEQ "SIGMA3" and 6mn53s later,
X = 2.839135243 = R04 ( error = -7 10-9 )
4°) Multiple Series
-The following program calculates S = Sigma u(n1;n2;
..... ;nk) with n1>= 0 ;
n2>= 0 ; ........ ; nk>= 0
Data Registers: • R00 = f name ( Register R00 is to be initialized before executing "SIGMA" )
R01 = n1 R02 = n2 .........
Rkk = nk
Flags: /
Subroutine: a program which computes
u(n1;n2; ..... ;nk) = f( n1;n2;
..... ;nk) assuming n1is in R01 ; n2
is in R02 ; ..... ; nk is in Rkk upon entry.
-Synthetic registers M N O may be replaced by
any unused data registers.
-If you don't have an HP-41CX , replace line 08 with 0
LBL 00 STO IND Y ISG Y GTO 00
| 01 LBL "SIGMA"
02 CLA 03 STO N 04 STO O 05 E3 06 / 07 ISG X 08 CLRGX 09 DSE IND N |
10 LBL 01
11 ISG IND N 12 CLX 13 XEQ IND 00 14 RCL M 15 + 16 STO M 17 LASTX 18 X#Y? |
19 GTO 01
20 LBL 02 21 CLX 22 STO IND N 23 DSE N 24 X<0? 25 GTO 03 26 ISG IND N 27 CLX |
28 XEQ IND 00
29 RCL M 30 + 31 STO M 32 LASTX 33 X=Y? 34 GTO 02 35 RCL O 36 STO N |
37 GTO 01
38 LBL 03 39 X<>Y 40 CLA 41 END |
( 73 bytes / SIZE kkk+1 )
| STACK | INPUTS | OUTPUTS |
| X | k | S |
With k = 1 for simple series ; 2 for double series ; 3 for triple series ; 4 for quadruple series ... etc ...
Example: Let's take once again the triple series S = Sigma 1 / ( nn m! (p!)2 ) for n >= 1 ; m >= 1 ; p >= 1
-We make a change of arguments to reduce to the standard: n >= 0 ; m >= 0 ; p >= 0 by replacing n with (n+1) ; m with (m+1) ; p with (p+1)
LBL "T"
RCL 01
1
+
ENTER^
Y^X
RCL 02
1
+
FACT
*
RCL 03
1
+
FACT
X^2
*
1/X
RTN
-Then
3 XEQ "SIGMA" yields X = 2.839135243
( in 8mn39s )