hp41programs

DownhillSimplex

Downhill Simplex Method for the HP-41


Overview
 

"DHS" employs the downhill simplex method to minimize a function of n variables  f ( x1 , x2 , ...... , xn )     1 < n < 16
This program is very slow and a good emulator like V41 in turbo mode is recommended !
 

Program Listing
 

-The method is described, for example, in references [1] & [2]

-Before executing "DHS", store the function name in R00 and the initial guesses in R01 thru Rnn
-The accuracy is controlled by the display setting.
-Avoid FIX 9 which could lead to an infinite loop
 
 

Data Registers:           •  R00 = function name                                           ( R00 and R01 to Rnn  are to be initialized before executing "DHS" )

                                      •  R01 = x1  •  R02 = x2  ...........   •  Rnn = xn             R21 = f ( x1 , x2 , ...... , xn )          Rn+1 to R21+4n+n^2: temp
Flags: /
Subroutine:   A program which computes f ( x1 , x2 , ...... , xn ) assuming x1 is in R01 , x2 is in R02 , ............ , xn is in Rnn
 
 
 
 

 01 LBL "DHS"
 02 X<>Y
 03 STO 20
 04 X<>Y
 05 STO 16
 06 STO 17
 07 ST+ X
 08 22
 09 +
 10 RCL 16
 11  E3
 12 /
 13 STO 18
 14 +
 15  E3
 16 /
 17 1
 18 +
 19 ISG 17
 20 LBL 01
 21 REGMOVE
 22 RCL 18
 23 +
 24 DSE 17
 25 GTO 01
 26 RCL 16
 27 X^2
 28 LASTX
 29 3
 30 *
 31 STO 18
 32 +
 33 21
 34 +
 35 STO 17
 36 .1
 37 %
 38 22
 39 +
 40 RCL 18
 41 +
 42 RCL 16
 43 1
 44 +
 45  E5
 46 /
 47 +
 48 SIGN
 49 CLX
 50 RCL 20
 51 LBL 18
 52 ST+ IND L
 53 ISG L
 54 GTO 18
 55 LBL 41
 56 RCL 16
 57 STO 18
 58 21.02
 59 +
 60 STO 19
 61 RCL 17
 62 STO 20
 63 LBL 02
 64 RCL IND 20
 65 STO IND 18
 66 DSE 20
 67 DSE 18
 68 GTO 02
 69 XEQ IND 00
 70 STO IND 19
 71 RCL 16
 72 STO 18
 73 DSE 19
 74 GTO 02
 75 LBL 16
 76 RCL 16
 77 21.02
 78 +
 79 STO L
 80 RCL IND X
 81 ENTER
 82 DSE L
 83 LBL 04
 84 CLX
 85 RCL IND L
 86 X>Y?
 87 GTO 04
 88 X<>Y
 89 CLX
 90 LASTX
 91 STO Z
 92 LBL 04
 93 DSE L
 94 GTO 04
 95 RCL 21
 96 X<> IND T
 97 STO 21
 98 R^
 99 INT
100 19
101 -
102 RCL 16
103 *
104 22
105 +
106 .1
107 %
108 RCL 16
109 ST+ X
110 +
111 22
112 +
113 RCL 16
114  E6
115 /
116 +
117 REGSWAP
118 RCL 16
119 21.02
120 +
121 STO L
122 RCL IND X
123 ENTER
124 DSE L
125 LBL 05
126 CLX
127 RCL IND L
128 X<Y?
129 GTO 05
130 X<>Y
131 CLX
132 LASTX
133 STO Z
134 LBL 05
135 DSE L
136 GTO 05
137 X<> Z
138 RCL 16
139 21
140 +
141 RCL IND Y
142 X<> IND Y
143 STO IND Z
144 X<> Z
145 INT
146 19
147 -
148 RCL 16
149 *
150 22
151 +
152 .1
153 %
154 RCL 16
155 ST+ Y
156 ST+ Y
157 X^2
158 +
159 22
160 +
161 RCL 16
162  E6
163 /
164 +
165 REGSWAP
166 RCL 16
167 20.02
168 +
169 STO L
170 RCL IND X
171 ENTER
172 DSE L
173 LBL 06
174 CLX
175 RCL IND L
176 X<Y?
177 GTO 06
178 X<>Y
179 CLX
180 LASTX
181 STO Z
182 LBL 06
183 DSE L
184 GTO 06
185 X<> Z
186 RCL 16
187 20
188 +
189 RCL IND Y
190 X<> IND Y
191 STO IND Z
192 X<> Z
193 INT
194 19
195 -
196 RCL 16
197 *
198 22
199 +
200 .1
201 %
202 RCL 16
203 ST+ Y
204 X^2
205 +
206 22
207 +
208 RCL 16
209  E6
210 /
211 +
212 REGSWAP
213 VIEW 21
214 RCL 16
215 ST+ X
216 21
217 +
218 .1
219 %
220 +
221 RCL 16
222 +
223 RCL 17
224 STO 18
225 CLX
226 LBL 13
227 RCL IND Y
228 RCL IND 18
229 -
230 ABS
231 X>Y?
232 X<>Y
233 RDN
234 DSE 18
235 DSE Y
236 GTO 13
237 RND
238 X=0?
239 GTO 99
240 22
241 RCL 16
242 ST+ Y
243 ST+ X
244 21
245 +
246  E3
247 /
248 +
249 STO 18
250 LBL 08
251 RCL 18
252 INT
253 .1
254 %
255 +
256 RCL 16
257 X^2
258 +
259 RCL 16
260  E5
261 /
262 +
263 ENTER
264 CLX
265 LBL 09
266 RCL IND Y
267 +
268 DSE Y
269 GTO 09
270 RCL 16
271 /
272 STO IND Y
273 ISG 18
274 GTO 08
275 RCL 16
276 STO 18
277 RCL 17
278 RCL 16
279 ST+ X
280 21
281 +
282 LBL 10
283 RCL IND X
284 ST+ X
285 RCL IND Z
286 -
287 STO IND 18
288 RDN
289 DSE X
290 DSE Y
291 DSE 18
292 GTO 10
293 XEQ IND 00
294 STO 18
295 RCL 21
296 X>Y?
297 GTO 11
298 CLX
299 RCL 16
300 20
301 +
302 X<>Y
303 RCL IND Y
304 X<=Y?
305 GTO 15
306 RCL 16
307 21
308 +
309 RCL 18
310 STO IND Y
311 LBL 17
312 RCL 17
313 1
314 +
315 RCL 16
316 ST- Y
317  E3
318 /
319 +
320 .1
321 %
322 1
323 +
324 REGMOVE
325 GTO 16
326 LBL 11
327 RCL 17
328 1
329 +
330 RCL 16
331  E3
332 /
333 +
334  E3
335 /
336 1
337 +
338 REGMOVE
339 RCL 16
340 ENTER
341 ST+ X
342 21
343 +
344 LBL 07
345 RCL IND Y
346 ST+ X
347 RCL IND Y
348 -
349 STO IND Z
350 RDN
351 DSE X
352 DSE Y
353 GTO 07
354 XEQ IND 00
355 STO 19
356 RCL 18
357 X>Y?
358 GTO 11
359 RCL 16
360 21
361 +
362 X<>Y
363 STO IND Y
364 RCL 17
365 1
366 +
367 STO Y
368 RCL 16
369 -
370  E3
371 /
372 +
373 RCL 16
374  E6
375 /
376 +
377 REGMOVE
378 GTO 16
379 LBL 11
380 RCL 16
381 21
382 +
383 RCL 19
384 STO IND Y
385 GTO 17
386 LBL 15
387 RCL 16
388 STO 20
389 ENTER
390 ST+ X
391 21
392 +
393 RCL 17
394 LBL 12
395 RCL IND Y
396 RCL IND Y
397 +
398 2
399 /
400 STO IND 20
401 RDN
402 DSE X
403 DSE Y
404 DSE 20
405 GTO 12
406 XEQ IND 00
407 STO 18
408 RCL 16
409 21
410 +
411 X<>Y
412 RCL IND Y
413 X<=Y?
414 GTO 11
415 X<>Y
416 STO IND Z
417 GTO 17
418 LBL 11
419 RCL 16
420 STO 18
421 RCL 17
422 STO 19
423 LBL 14
424 RCL 16
425 3
426 *
427 21
428 +
429 STO 20
430 LBL 00
431 RCL IND 20
432 RCL IND 19
433 +
434 2
435 /
436 STO IND 19
437 DSE 19
438 DSE 20
439 DSE 18
440 GTO 00
441 RCL 16
442 ST+ 18
443 RCL 19
444 RCL 20
445 X#Y?
446 GTO 14
447 GTO 41
448 LBL 99
449 RCL 16
450 .1
451 %
452 ISG X
453 LASTX
454 %
455 22
456 +
457 RCL 16
458 ST+ X
459 +
460 REGMOVE
461 RCL 21
462 END

 
      ( 767 bytes / SIZE 22+4n+n^2 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             h            /
           X             n            fmin

  Where  n = number of variables  and  h = initial increment

Example:

-Let's solve the overdetermined system:   x2 + y2 + z2 = 4  ;  x2 - y2 + z = 2 ;  x + y + z2 = 1 ;  x - y - z = 0
  by the least-squares method  ( the system itself has no solution )

-Let  f(x,y,z) = ( x2 + y2 + z2 - 4 )2  + ( x2 - y2 + z - 2 )2 + ( x + y + z2 - 1 )2 + ( x - y - z )2
 
 

 01 LBL "T"
 02 RCL 01
 03 X^2
 04 RCL 02
 05 X^2
 06 +
 07 RCL 03
 08 X^2
 09 +
 10 4
 11 -
 12 X^2
 13 RCL 01
 14 X^2
 15 RCL 02
 16 X^2
 17 -
 18 RCL 03
 19 +
 20 2
 21 -
 22 X^2
 23 +
 24 RCL 01
 25 RCL 02
 26 +
 27 RCL 03
 28 X^2
 29 +
 30 1
 31 -
 32 X^2
 33 +
 34 RCL 01
 35 RCL 02
 36 -
 37 RCL 03
 38 -
 39 X^2
 40 +
 41 RTN
 42 END

 

  "T"  ASTO 00     CLX   STO 01   STO 02    STO 03    if we choose  x = y = z = 0  as initial guesses

-SIZE 043  ( at least )

-For example  FIX 4
-If you choose  h = 1  and since there are 3 variables:

      1  ENTER^
      3  XEQ "DHS"   >>>>  the HP41 displays the successive f-approximations and finally, we get:

                       fmin = 1.4344 = R21

and we have in R01-R02-R03:   x = 1.1055    y = -0.9168    z = 1.2629

-With FIX 6, it yields:    fmin = 1.434377    x = 1.105450    y = -0.916829    z = 1.262964
 

Note:

-It may be wise to execute the program a second time to check or to improve the precision of the results...
 
 

References:

[1]  Press , Vetterling , Teukolsky , Flannery - "Numerical Recipes in C++" - Cambridge University Press - ISBN  0-521-75033-4
[2]  https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method