HP Forums
"Play it again, ZSam..." - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP-41C Software Library (/forum-11.html)
+--- Thread: "Play it again, ZSam..." (/thread-7775.html)



"Play it again, ZSam..." - Ángel Martin - 02-15-2017 07:59 AM

a.k.a. Solving systems of non-linear equations using the successive approximations method (SAM)... in the complex domain (Z).

Now that we got the long title done and over with, the actual description should be a breeze...

First off, this routine adapts to the 41Z platform the method published by JM Baillard (see here). A few program lines needed changing, mainly to adjust the registers mapping to the convention used by the 41Z. Using 41Z functions also reduced the code size, which is always welcome.

This program includes routines for data entry and output of results - so it's a "driver"of the core routine published in JM's page. This provides a convenient way to use it.

This method requires one equation in explicit form for each of the n-variables, thus n-equations in total as global labels in RAM. The global label names are prompted, as well as n guess (complex) values to start the iterative process. It's not a fast approach, so don't expect blasting speed - yet should be a reliable method with sensible initial guesses.

Using the same example given in the above reference:

z1 = ( z1^2 - z2 )^1/3 ,
z2 = ( z2^2 - z1 )^1/4

programmed as follows:

Code:
01  LBL "Z1="    11  LBL "Z2="
02  ZRCL 01      12  ZRCL 02
03  Z^2          13  Z^2
04  ZRCL 02      14  ZRCL 01
05  Z-           15  Z-
06  3            16  4
07  Z^1/X        17  Z^1/X
08  RTN          18  END

Using (1+i) as initial guesses for both z1 and z2, the results are obtained in a few seconds on the 41-CL, or with an emulator in Turbo mode.

z1 = R02 + i R03 = 1.038322757 + 0.715596476 i
z2 = R04 + i R05 = 1.041713085 - 0.462002405 i

And here's the program code in all its glorious splendor:-

Code:
01    LBL "ZSAM" 
02    SIZE?
03    "N=?" 
04    PROMPT
05    STO 00
06    3
07    *
08    E 
09    +
10    X>Y?
11    PSIZE
12    XEQ 00
13    RCL 00
14    E3/E+
15    ZINPT
16    LBL 01
17    VIEW 02
18    CLA
19    RCL 00
20    ST+ X
21    STO M
22    LBL 02
23    RCL 00
24    ST+ X
25    E
26    +
27    RCL M
28    +
29    RCL IND X
30    RDN
31    XEQ IND T
32    ZENTER^
33    ZRCL IND M(5)
34    Z-
35    ZMOD
36    ST+ N(6)
37    DSE M(5)
38    GTO 02
39    X<>N
40    E-8
41    RCL 00
42    *
43    X<Y?
44    GTO 01
45    RCL 00
46    E3/E+
47    ZOUPT
48    RTN
49    LBL 00
50    RCL 00
51    ST+ X
52    2.1
53    +
54    STO 02
55    RCL 00
56    E3/E+
57    STO 01
58    AON
59    CF 23
60    LBL 05
61    "F#" 
62    ARCLI 01
63    " |-? " 
64    ARCL IND 02
65    STOP
66    FS?C 23
67    ASTO IND 02
68    ISG 02
69    ISG 01
70    GTO 05
71    AOFF
72    END

E3/E+ is of course a shortcut for {1 E3, / , 1, +}
ARCLI 01 is a shortcut for {FIX 0, CF 29, ARCL 01, SF 29, FIX 3}

The updated 41Z_Deluxe module - including the ZSAM program in it is now in the DFT posting.

Happy ZSAM'ing folks!

Cheers,
ÁM