hp41programs

MinMaxParabola Min-Max Polynomial for the HP-41
 

Overview

 1°)  Min-Max Parabola
 2°)  Min-Max Polynomial
 
 

1°) Min-Max Parabola
 

-Given a set of n data points ( x1 , y1 ) ..... ( xn , yn )     ( n > 3 )
  the min-max parabola:  y = a.x2 + b.x + c  minimizes the maximum "error"     h = supi  | yi - a xi2 -  b xi - c |    over the entire set of points.

-The following program uses the "exchange method":

  1°) The min-max parabola is found for the first 4 points.
  2°) The greatest error is computed at all data points for this parabola.
  3°) One of the first 4 points is exchanged with a data point at which the greatest error occurs ( so that the errors are still of alternating sign for this new quadruple )

-The process is repeated until the greatest error occurs at one of the first 4 points ( step 3 is skipped if it happens the first time )
 
 

Data Registers:           •  R00 = n = number of points                         ( Registers R00 thru R2n are to be initialized before executing "MMP2" )

                                      •  R01 = x1   •  R03 = x2    ..........  •  R2n-1 = xn                    ( it's necessary to have x1 < x2 < x3 < x4 )
                                      •  R02 = y1   •  R04 = y2    ..........  •  R2n = yn

Flag:  F10 is cleared at the end
Subroutines: /

-Lines 122-160-175-186-196-206-214  are three-byte GTOs
 
 

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

 
   ( 321 bytes / SIZE 2n+1 )
 
 

      STACK        INPUTS      OUTPUTS
           T             /          +/-h
           Z             /             c
           Y             /             b
           X             /             a

 
Example:     With the following set of n = 11 points    ( 11  STO 00 )
 
 

     x     0     1     2     3     4     5     6     7     8     9    10
     y   1.2     6    9.7   13.7   16.8     20   21.7    24   24.9   25.7    26

-Store these 22 numbers into

               R01      R03     ..............................................................................................      R21
               R02      R04     ..............................................................................................      R22      respectively

           XEQ "MMP2"  yields          a = -0.25          ( in 30 seconds )
                                    RDN          b =  5
                                    RDN          c = 0.975
                                    RDN    +/- h = -0.275

   >>>  whence the equation of the min-max parabola is  y = -0.25 x2 + 5 x + 0.975  and the maximum "error" is  0.275

Notes:

-When the program stops, the order of the points will have probably changed.
-The abscissas can be unequally spaced.
-Due to roundoff errors, it's perhaps not impossible that the algorithm oscillates for ever between 2 very close | h |-values
-Add  VIEW Z  after line 120 to check
-If it ever happens, set flag F21 ( the program will stop each time VIEW Z is executed ) and press XEQ 09 to get the results.
 

2°) Min-Max Polynomial of degree d
 

-The same "exchange method" may also be used to find the min-max polynomial of degree d
-The data must contain at least (d+2) points
 

WARNING:
 

-The set of n data points ( x1 , y1 ) ..... ( xn , yn ) must be stored so that   x1 < x2 < x3 < ............... < xd+2
 

Data Registers:           •  R00 = n = number of points < 45                        ( Registers R00 thru R2n are to be initialized before executing "MMP" )

                                      •  R01 = x1   •  R03 = x2    ..........  •  R2n-1 = xn     with     x1 < x2 < x3 < ............... < xd+2
                                      •  R02 = y1   •  R04 = y2    ..........  •  R2n = yn

                                         R89 to R99: temp                           R100 to R105+d^2+5.d = the coefficients of the successive linear systems

Flag:  CF01  <-> pivoting
           SF 01 <-> no pivoting

Subroutine:  "LS"  ( cf "Linear and non-linear systems for the HP-41" )

-Lines 121-169-214-235-245-273 are three-byte GTOs
 
 
 

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

 
    ( 486 bytes / SIZE 106+d^2+5.d )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /           | h |
           X            d       bbb.eee

   Where       d       =  degree of the polynomial
               bbb.eee  =  control number of the min-max polynomial  ( in fact bbb = 2 n + 1 )
     and        | h |     =  supi  | yi -  p( xi ) |

Example:    With the following set of 7 data points, find the min-max polynomial of degree d = 3
 
 

     x      1      2      4      7      9     10     12
     y      2      5      3      7      6     12     17
 
 
     n = 7   STO 00   CF 01

     1  STO 01   2  STO 03   4  STO 05   7  STO 07  9  STO 09  10  STO 11  12  STO 13
     2  STO 02   5  STO 04   3  STO 06   7  STO 08  6  STO 10  12  STO 12  17  STO 14

     SIZE 130  ( or greater )

     3  XEQ "MMP"   >>>>    The HP-41 displays the successive h-values
                                              ( namely 1.32  -1.506666667  -1.705   1.75 )  and eventually

                                              bbb.eee = 15.018                                                                    ---Execution time = 4mn43s---
                               X<>Y         | h |    = 1.75

-The coefficients of the min-max polynomial of degree 3 are in R15-R16-R17-R18 and we get:

    p(x) = 0.033333333 x3 - 0.45 x2 + 2.016666666 x + 1.75 = x3 / 30 - 0.45 x2 + ( 121 / 60 ) x + 1.75

  and  | h | = 1.75
 

Notes:

-Since R89 is used for temporary data storage, the number of points must be < 45

-When the program stops, the order of the points will have probably changed.

-The abscissas can be unequally spaced.

-Due to roundoff errors and to avoid a possible infinite loop, I've added lines 164-165
-So, the iterations will stop if 2 consecutive h-values differ by less than 0.00001
-Change these lines ( or delete them ) if you prefer another value...

-If you set flag F01 ( SF 01 ), the linear systems will be solved without pivoting.
-With the example above, you will get ( almost ) the same results in 4m15s, thus saving 28 seconds.
-However, there is a risk of more roundoff-errors.

-If d = 2,  "MMP2" is much faster and for d = 1, cf "Min-Max Line for the HP-41" ( though "MMP" will work too... )
 

Reference:

[1]  F. Scheid -  "Numerical Analysis" - Mc Graw Hill   ISBN 07-055197-9