This program is Copyright © 2003-2006 by Jean-Marc Baillard and is used here by permission.
This program is supplied without representation or warranty of any kind. Jean-Marc Baillard and The Museum of HP Calculators therefore assume no responsibility and shall have no liability, consequential or otherwise, of any kind arising from the use of this program material or any part thereof.
Overview:
1°) Univariate Interpolation
2°) Bivariate Interpolation
( new )
a) non-synthetic
program (
new )
b) synthetic program
( new )
1°) Univariate Interpolation
-Let be a set of n data points: M1 ( x1
; y1 ) , M2 ( x2 ; y2
) , .......... , Mn ( xn
; yn )
There is a unique polynomial L of degree < n such that:
L(xi) = yi i
= 1 ; 2 ; ..... ; n
-In other words, L is the collocation polynomial for these arguments.
( xi values can be unequally-spaced.)
-The following program calculates L(x) = y1 L1(x) + y2 L2(x) + ..... + yn Ln(x)
where Li(x) = ( x - x1
) ...... ( x - xi-1 ) ( x - xi+1 ) ...... ( x - xn
) / [ ( xi - x1 ) ...... ( xi - xi-1
) ( xi - xi+1 ) ( xi - xn )
]
are the Lagrange's multiplier functions.
-This formula is also applied to an extrapolation to the limit in example2.
Data Registers:
-You have to store the 2n numbers x1 , y1
, x2 , y2 , ........ , xn , yn
into contiguous registers, starting at any register Rbb:
x1 | x2 | ........... | xn |
y1 | y2 | ........... | yn |
into
Rbb | Rbb+2 | ............. | Ree-1 |
Rbb+1 | Rbb+3 | ............. | Ree |
( ee = bb + 2n -1 )
Flags: /
Subroutines: /
-Thanks to synthetic programming, "LAGR" only uses the registers
containing the xi and yi numbers,
but you can replace status registers M N O P Q by the standard
R00 R01 R02 R03 R04 ( in this case, of course, bb > 04 ).
01 LBL "LAGR"
02 CLA
03 STO M
04 X<>Y
05 STO O
06 STO Q
07 LBL 01
08 RCL Q
09 STO N
10 SIGN
11 LBL 02
12 RCL M
13 RCL IND O
14 RCL IND N
15 ST- Z
16 -
17 X#0?
18 GTO 03
19 SIGN
20 STO Y
21 LBL 03
22 /
23 *
24 ISG N
25 ISG N
26 GTO 02
27 ISG O
28 RCL IND O
29 *
30 ST+ P
31 ISG O
32 GTO 01
33 RCL Q
34 RCL M
35 SIGN
36 X<> P
37 CLA
38 END
( 69 bytes / SIZE? )
STACK | INPUTS | OUTPUTS |
Y | bbb.eee | bbb.eee |
X | x | L(x) |
L | / | x |
Example1:
Evaluate y(3) and y(5) for the collocation polynomial that
takes the values prescribed below:
xi | 0 | 1 | 2 | 4 | 7 |
yi | 3 | 2 | 4 | 6 | 5 |
For instance, you store these 10 numbers ( 0 3 1 2 2 4 4 6 7 5 ) into R01 thru R10, then
1.010 ENTER^
3 XEQ "LAGR"
produces: y(3) = 5.847619048 ( in 14 seconds
)
RDN 5 R/S
---------- y(5) = 4.523809520
Example2:
-Lagrange's polynomial can also be used for an extrapolation to the
limit:
Suppose we are using the trapezoidal rule to evaluate the integral:
I = §02 ex dx
The interval [0;2] is divided into n subintervals
and
n = 1 yields I1 = 8.389056101
n = 2 ----- I2 = 6.912809880
n = 4 ----- I4 = 6.521610110
n = 8 ----- I8 = 6.422297820
We would like to know the result with n = infinity! i-e
1/n = 0.
The error of the trapezoidal rule is nearly proportional to 1/n2
, therefore, we can use Lagrange interpolation formula with
x1 = 1 x2 = 1/4
x3 = 1/16 x4 = 1/64
y1 = I1 y2
= I2 y3 = I4
y4 = I8 and
evaluate L (0)
If these 8 numbers are stored in R11 thru R18 for instance,
11.018 ENTER^
0
XEQ "LAGR" produces 6.389056387
Exact result is of course e2 - 1 = 6.389056099 to
ten places
and the error of our Lagrange approximation is only 3. 10-7
although I8 was only exact to 1 decimal!
N.B: 1- If you are using Simpson's rule instead
of the trapezoidal rule, store xn = 1/n4
: it's a 4th order method ( at least far from any singularity )
2- n is usually doubled at every
step, but it's not necessary here.
3- The same idea can be applied to any other
problem of this kind.
2°) Bivariate Interpolation
a) Non-synthetic program
-Now we have a grid of nxm values: f(xi,yj) with i = 1,2,......,n & j = 1,2,.....,m and we want to estimate f(x,y)
-"LAGR2" uses the Lagrange Polynomial in the directions of x-axis and
y-axis.
-You have to store the data in registers Rbb to Ree as shown below
( bb > 10 ):
Data Registers: • R00 = bbb.eeenn ( Registers R00 and Rbb thru Ree are to be initialized before executing "LAGR2" )
R01 = x R03 = f(x,y)
R02 = y R04 thru R10: temp
We must choose bb > 10
x \ y | • Rbb+n
= y1
• Rbb+2n+1 = y2 ..............................
• Ree-n = ym
---------------------------------------------------------------------------------------------------------------------
• Rbb = x1
| • Rbb+n+1 = f(x1,y1)
• Rbb+2n+2 = f(x1,y2) ..............................
• Ree-n+1 = f(x1,ym)
• Rbb+1 = x2 | •
Rbb+n+2 = f(x2,y1) • Rbb+2n+3
= f(x2,y2) ..............................
• Ree-n+2 = f(x2,ym)
.................... | .............................................................................................................................................
|
• Rbb+n-1 = xn | • Rbb+2n
= f(xn,y1) • Rbb+3n+1
= f(xn,y2) ...............................
• Ree = f(xn,ym)
Flags: /
Subroutines: /
01 LBL "LAGR2"
02 STO 01
03 X<>Y
04 STO 02
05 CLX
06 STO 03
07 RCL 00
08 ISG X
09 STO 07
10 INT
11 DSE X
12 .1
13 %
14 RCL 00
15 INT
16 +
17 STO 05
18 STO 06
19 E-5
20 ST+ 07
21 LBL 00
22 RCL 07
23 STO 08
24 STO 09
25 FRC
26 RCL 06
27 INT
28 +
29 ISG X
30 STO 10
31 CLX
32 STO 04
33 LBL 01
34 RCL IND 10
35 LBL 02
36 RCL 02
37 RCL IND 08
38 RCL IND 09
39 ST- Z
40 -
41 X#0?
42 GTO 02
43 SIGN
44 STO Y
45 LBL 02
46 /
47 *
48 ISG 09
49 GTO 02
50 ST+ 04
51 RCL 07
52 STO 09
53 ISG 10
54 CLX
55 ISG 08
56 GTO 01
57 RCL 05
58 STO 10
59 RCL 04
60 LBL 03
61 RCL 01
62 RCL IND 06
63 RCL IND 10
64 ST- Z
65 -
66 X#0?
67 GTO 03
68 SIGN
69 STO Y
70 LBL 03
71 /
72 *
73 ISG 10
74 GTO 03
75 ST+ 03
76 ISG 06
77 GTO 00
78 RCL 01
Lines 78-79-80 are only useful to save y in Y-register and x in L-register
79 SIGN
Otherwise, these lines may be deleted.
80 RCL 02
81 RCL 03
82 END
( 121 bytes / SIZE? )
STACK | INPUTS | OUTPUTS |
Y | y | y |
X | x | f(x,y) |
L | / | x |
Example: A function f(x,y) is only known by the following values ( meaning for example: f(1,4) = 3 f(4,6) = 9 ...etc... )
x \ y | 2 3
4 6
| R14 R18 R22 R26
--------------------------
if, for instance, you choose bb = 11
---------------------------------
1 | 4
3 3 5
store these 19 numbers into
R11 | R15 R19 R23 R27
respectively
2 | 3
1 2 6
R12 | R16 R20 R24 R28
4 | 1
0 4 9
R13 | R17 R21 R25 R29
-The control number of this tableau is 11.02903
so 11.02903 STO 00
( note that nn = 03 is the number of x-values which may be different
from m = the number of y-values ( here m = 4 ) )
-Then, to compute, say f(3,5)
5 ENTER^
3 XEQ "LAGR2" >>>> f(3,5) ~
5.8333 ( in 29 seconds )
-Likewise, to obtain f(1.6,2.7)
2.7 ENTER^
1.6 R/S
>>>> f(1.6,2.7) ~ 1.9038
Note: Execution time is approximately proportional
to nxm
b) Synthetic program
-Synthetic programming allows to store the data into registers R01 thru
Rn.m+n+m
-However, synthetic register a is used, so this program cannot be called
as more than a first level subroutine.
Data Registers:
• R00 = n.mmm = n + m/103
( Registers R00 thru Rnm+m+n are to be initialized before executing
"BVI" )
x \ y | • Rnn+1 =
y1
• R2n+2 = y2 ..............................
• Rnm+m = ym
---------------------------------------------------------------------------------------------------------------------
• R01 = x1 | • Rnn+2 = f(x1,y1)
• R2n+3 = f(x1,y2) ..............................
• Rnm+m+1 = f(x1,ym)
• R02 = x2 | • Rnn+3 = f(x2,y1)
• R2n+4 = f(x2,y2) ..............................
• Rnm+m+2 = f(x2,ym)
........... | .............................................................................................................................................
|
• Rnn = xn | • R2n+1 = f(xn,y1)
• R3n+2 = f(xn,y2) ..............................
• Rnm+m+n = f(xn,ym)
Flags: /
Subroutines: /
01 LBL "BVI"
02 CLA
03 STO M
04 X<>Y
05 STO N
06 RCL 00
07 INT
08 STO P
( synthetic )
09 LBL 01
10 RCL 00
11 INT
12 LASTX
13 FRC
14 ENTER^
15 SIGN
16 10^X
17 CHS
18 10^X
19 SQRT
20 +
21 ST* Y
22 +
23 ISG X
24 STO Q
25 CLX
26 LBL 02
27 RCL Q
28 FRC
29 ISG X
30 STO a
31 SIGN
32 LBL 03
33 RCL N
34 RCL IND a
35 -
36 RCL IND Q
37 ST- L
38 X<> L
39 CHS
40 X#0?
41 GTO 03
42 SIGN
43 STO Y
44 LBL 03
45 /
46 *
47 ISG a
48 GTO 03
49 RCL P
50 RCL Q
51 +
52 RDN
53 RCL IND T
54 *
55 +
56 ISG Q
57 GTO 02
58 RCL 00
59 INT
60 STO Q
61 X<>Y
62 LBL 04
63 RCL M
64 RCL IND P
65 RCL IND Q
66 ST- Z
67 -
68 X#0?
69 GTO 04
70 SIGN
71 STO Y
72 LBL 04
73 /
74 *
75 DSE Q
76 GTO 04
77 ST+ O
78 DSE P
79 GTO 01
80 RCL M
81 SIGN
82 RCL N
83 RCL O
84 CLA
85 END
( 131 bytes / SIZE (n+1)(m+1) )
STACK | INPUTS | OUTPUTS |
Y | y | y |
X | x | f(x,y) |
L | / | x |
Example: With the same data as above:
x \ y | 2 3
4 6
| R04 R08 R12 R16
--------------------------
--------------------------------
1 | 4
3 3 5
are to be stored into
R01 | R05 R09 R13 R17
respectively
2 | 3
1 2 6
R02 | R06 R10 R14 R18
4 | 1
0 4 9
R03 | R07 R11 R15 R19
-Here, n = 3 and m = 4 so 3.004 STO 00
-Then, to compute f(3,5)
5 ENTER^
3 XEQ "BVI" >>>> f(3,5) ~
5.8333 ( in 31 seconds )
-And to obtain f(1.6,2.7)
2.7 ENTER^
1.6 R/S
>>>> f(1.6,2.7) ~ 1.9038
Go back to the HP-41 software library
Go back to the general software library
Go
back to the main exhibit hall