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 e^{x}

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. *