I have found a way to compute the the Lambert W function without using the solver, but only in the range (-1/e, 1]. However, the method allows the second branch to be computed all through the valid range, as shown below:
--------------------Lambert W (2nd branch), -1/e =< x < 0
01 CHS
02 1/x
03 STO 0
04 ENTER
05 ENTER
06 ENTER
07 STO 1
08 LN
09 *
10 RCL 1
11 x<>y
12 -
13 x=0
14 GTO 19
15 CLx
16 RCL 0
17 LST x
18 GTO 07
19 LST x
20 RCL 0
21 /
22 CHS
23 GTO 00
12C+ actual-0.367879441 R/S -> -1.000000000 -1.000030530
-0.367 R/S -> -1.070791879 -1.070791887
-0.3 R/S -> -1.781337023 -1.781337023
-0.000000001 R/S -> -23.897019580 -23.897019585(actual results obtained with Egan Ford's LAMBERTWB function in his special functions library - See message #6 in
this thread).W-1(-1/x) = -(...x*ln(x*ln(x*ln(x*ln(x))))...)/x (yet to be proved)
--------------------
The principal branch, at least in the range (-1/e, 1], can be computed with the following program:
--------------------
Lambert W (principal branch), -1/e > x >= 1
24 STO 0
25 ENTER
26 ENTER
27 ENTER
28 STO 1
29 ex
30 /
31 RCL 1
32 x<>y
33 -
34 x=0
35 GTO 40
36 CLx
37 RCL 0
38 LST x
39 GTO 28
40 LSX x
41 GTO 0012C+ actual
0.999999999 GTO 24 R/S -> 0.567143290 0.567143290
0.5 GTO 24 R/S -> 0.351733711 0.351733711
0.000000000 GTO 24 R/S -> 0.000000000 0.000000000
-0.3 GTO 24 R/S -> -0.489402227 -0.489402227
-0.367 GTO 24 R/S -> -0.932399183 -0.932399185(occasionally the program will loop for certain arguments, as for 1, due to rounding errors - in this case stop the program, the answer should be in register 1)
--------------------
Except for arguments whose convergences are very slow, these should work on the 12C as well. Also, by filling the stack with the desired argument and iterating two keystrokes until convergence is reached, this should work even on a non-programmable RPN calculator. The method may not be so practical but is somewhat interesting.
Gerson.
Edited: 8 Nov 2009, 7:12 a.m.