nag_lambertW (c05bac) (PDF version)
c05 Chapter Contents
c05 Chapter Introduction
NAG Library Manual

NAG Library Function Document

nag_lambertW (c05bac)

+ Contents

    1  Purpose
    7  Accuracy

1  Purpose

nag_lambertW (c05bac) returns the real values of Lambert's W function Wx.

2  Specification

#include <nag.h>
#include <nagc05.h>
double  nag_lambertW (double x, Integer branch, Nag_Boolean offset, NagError *fail)

3  Description

nag_lambertW (c05bac) calculates an approximate value for the real branches of Lambert's W function (sometimes known as the ‘product log’ or ‘Omega’ function), which is the inverse function of
fw = wew   for   wC .
The function f is many-to-one, and so, except at 0, W is multivalued. nag_lambertW (c05bac) restricts W and its argument x to be real, resulting in a function defined for x-exp-1 and which is double valued on the interval -exp-1,0. This double-valued function is split into two real-valued branches according to the sign of Wx+1. We denote by W0 the branch satisfying W0x-1 for all real x, and by W-1 the branch satisfying W-1x-1 for all real x. You may select your branch of interest using the argument branch.
The precise method used to approximate W is described fully in Barry et al. (1995). For x close to -exp-1 greater accuracy comes from evaluating W-exp-1+Δx rather than Wx: by setting offset=Nag_TRUE on entry you inform nag_lambertW (c05bac) that you are providing Δx, not x, in x.

4  References

Barry D J, Culligan–Hensley P J, and Barry S J (1995) Real values of the W-function ACM Trans. Math. Software 21(2) 161–171

5  Arguments

1:     xdoubleInput
On entry: if offset=Nag_TRUE, x is the offset Δx from -exp-1 of the intended argument to W; that is, Wβ is computed, where β=-exp-1+Δx.
If offset=Nag_FALSE, x is the argument x of the function; that is, Wβ is computed, where β=x.
Constraints:
  • if branch=0, -exp-1β;
  • if branch=-1, -exp-1β<0.0.
2:     branchIntegerInput
On entry: the real branch required.
branch=0
The branch W0 is selected.
branch=-1
The branch W-1 is selected.
Constraint: branch=0 or -1.
3:     offsetNag_BooleanInput
On entry: controls whether or not x is being specified as an offset from -exp-1.
4:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

6  Error Indicators and Warnings

NE_INT
On entry, branch=value.
Constraint: branch=0 or -1.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NE_REAL
On entry, branch=-1, offset=Nag_FALSE and x=value.
Constraint: if branch=-1 and offset=Nag_FALSE then x<0.0.
On entry, branch=-1, offset=Nag_TRUE and x=value.
Constraint: if branch=-1 and offset=Nag_TRUE then x<exp-1.0.
On entry, offset=Nag_TRUE and x=value.
Constraint: if offset=Nag_TRUE then x0.0.
On entry, offset=Nag_FALSE and x=value.
Constraint: if offset=Nag_FALSE then x-exp-1.0.
NW_REAL
For the given offset x, W is negligibly different from -1: x=value.
x is close to -exp-1. Enter x as an offset to -exp-1 for greater accuracy: x=value.

7  Accuracy

For a high percentage of legal x on input, nag_lambertW (c05bac) is accurate to the number of decimal digits of precision on the host machine (see nag_decimal_digits (X02BEC)). An extra digit may be lost on some implementations and for a small proportion of such x. This depends on the accuracy of the base-10 logarithm on your system.

8  Parallelism and Performance

Not applicable.

9  Further Comments

None.

10  Example

This example reads from a file the values of the required branch, whether or not the arguments to W are to be considered as offsets to -exp-1, and the arguments x themselves. It then evaluates the function for these sets of input data x and prints the results.

10.1  Program Text

Program Text (c05bace.c)

10.2  Program Data

Program Data (c05bace.d)

10.3  Program Results

Program Results (c05bace.r)


nag_lambertW (c05bac) (PDF version)
c05 Chapter Contents
c05 Chapter Introduction
NAG Library Manual

© The Numerical Algorithms Group Ltd, Oxford, UK. 2014