Minmaxline

# The Min-Max Line for the HP-41

Overview:

1°) Program#1
2°)
Program#2

Latest Update:  paragraph 2°)

1°) Program#1

-Let be a set of n points ( x1 ; y1 ) ..... ( xn ; yn )
The min-max line:  y = m.x + p  minimizes the maximum "error"     h = supi  | yi - m xi - p |    over the entire set of points.

-This program uses the "exchange method":

1°) The Chebyshev line is found for the first 3 points.
2°) The greatest error is computed at all data points for this Chebyshev line.
3°) One of the first 3 points is exchanged with a data point at which the greatest error occurs ( so that errors are of alternating sign for this new triple )

-The process is repeated until the greatest error occurs at one of the first 3 points: this is always achieved and only a few exchanges are usually needed.

Data Registers:        Registers R00 thru R2n are used and all of them are to be initialized before executing MML

R00 = n = the number of point

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

Flags and subroutines:  none.

-Synthetic registers M N O P  can be replaced by any unused standard registers:
for instance R41 R42 R43 R44  if  n < 21.

-Lines 52-106-120 are three-byte GTOs

 01  LBL "MML"   02  LBL 01   03  RCL 02   04  RCL 04   05  +   06  RCL 06   07  RCL 02   08  -   09  RCL 05   10  RCL 01   11  -   12  /   13  STO M   14  RCL 01   15  RCL 03   16  +   17  *   18  -   19  2   20  /   21  STO N   22  RCL 00   23  ST+ X   24  0   25  LBL 02 26  DSE Y   27  RCL IND Y   28  RCL M   29  *   30  RCL N   31  +   32  ISG T   33  CLX   34  RCL IND T   35  -   36  ABS   37  XY   42  LAST X   43  STO P   44  LBL 03   45  RDN   46  DSE Y   47  GTO 02   48  RCL O   49  PI   50  ST+ X 51  X>Y?   52  GTO 10      53  RCL IND O   54  ISG O   55  CLX   56  RCL P   57  LAST X   58  *   59  X<0?   60  GTO 06   61  CLX   62  RCL 03   63  X>Y?   64  GTO 05   65  RCL 06   66  X<> IND O   67  STO 06   68  DSE O   69  RCL 05   70  LBL 04   71  X<> IND O   72  STO 05   73  GTO 01   74  LBL 05   75  RCL 02 76  X<> IND O   77  STO 02   78  DSE O   79  RCL 01   80  GTO 09   81  LBL 06   82  CLX   83  RCL 05   84  X>Y?   85  GTO 07   86  RCL 06   87  X<> 04   88  X<> IND O   89  STO 06   90  DSE O   91  RCL 05   92  X<> 03   93  GTO 04   94  LBL 07   95  CLX   96  RCL 01   97  X>Y?   98  GTO 08   99  RCL 04 100  X<> IND O 101  STO 04 102  DSE O 103  RCL 03 104  X<> IND O 105  STO 03 106  GTO 01   107  LBL 08 108  RCL 02 109  X<> 04 110  X<> 06 111  X<> IND O 112  STO 02 113  DSE O 114  RCL 01 115  X<> 03 116  X<> 05 117  LBL 09 118  X<> IND O 119  STO 01 120  GTO 01   121  LBL 10 122  RCL N 123  RCL M 124  CLA 125  END

( 186 bytes / SIZE 2n+1 )

 STACK INPUTS OUTPUTS T / 1 or 3 or 5 Z / 2*pi Y / p X / m L / +h or -h

Example:       Find the min-max line for the following data:

 xi 1 3 4 7 10 12 16 19 24 37 41 49 51 61 yi 1 2 3 6 8 9 12 14 20 31 38 41 48 57

1-   SIZE 029                        ( or greater )

2-  14 STO 00                       ( there are 14 points )

3-   1  STO 01       STO 02
3  STO 03   2  STO 04
..............................
61  STO 27   57 STO 28

4- XEQ "MML"  >>>>  m =  0.94                                             ---Execution time = 36s---
RDN   p =  -2.5

-The min-max line is  y = 0.94 x - 2.5

and the maximum error is  h = 2.56
( L-register contains -2.56 )

-Note that the least squares line is  0.9275 x - 1.4785 in this example.

2°) Program#2

-The following program doesn't use synthetic registers and the registers Rbb to Ree are not modified.

Data Registers:          R00 = bbb.eee    R01 to R09: temp        bb > 09                       ( Registers Rbb thru Ree  are to be initialized before executing "MML" )

•  Rbb   = x1     •  Rb+2 = x2      .......    •  Re-1  = xn                   ( it's necessary to have x1 < x2 < x3 )
•  Rb+1 = y1     •  Rb+3 = y2      .......    •  Reee  = yn
Flags: /
Subroutines: /

-Lines 107-113-117 are three-byte GTOs

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

( 170 bytes / SIZE eee+1 )

 STACK INPUTS OUTPUTS Z / +h or -h Y / p X bbb.eee m

Example:
Find the min-max line for the following data:

 xi 1 3 4 7 10 12 16 19 24 37 41 49 51 61 yi 1 2 3 6 8 9 12 14 20 31 38 41 48 57

-If we choose to store the data in R11 , R12 , .....

1  STO 11       STO 12
3  STO 13   2  STO 14
..............................

61  STO 37   57 STO 38

11.038   XEQ "MML"  >>>>  m =  0.94 = R04                                            ---Execution time = 36s---
RDN   p =  -2.5  = R05
RDN  -h =  -2.56 = R08

-The min-max line is  y = 0.94 x - 2.5 and the maximum error is   h  = 2.56

Reference:

[1]  "Numerical Analysis" - Francis Scheid - McGraw-Hill  ISBN 07-055197-9