[R] Optimization problem with nonlinear constraint

Ravi Varadhan rvaradhan at jhmi.edu
Wed Jul 28 17:49:21 CEST 2010


For those interested in esoteric of special functions, here is a nice
reference on the Lambert W function:

http://www.cs.uwaterloo.ca/research/tr/1993/03/W.pdf

Ravi.

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Hans W Borchers
Sent: Wednesday, July 28, 2010 11:11 AM
To: r-help at stat.math.ethz.ch
Subject: Re: [R] Optimization problem with nonlinear constraint

Uli Kleinwechter <u.kleinwechter <at> uni-hohenheim.de> writes:

> 
> Dear Ravi,
> 
> As I've already written to you, the problem indeed is to find a solution 
> to the transcendental equation y = x * T^(x-1), given y and T and the 
> optimization problem below only a workaround.


I don't think optimization is the right approach for simply inverting
a simple function.

The inverse of the function  x \to x * e^x  is the Lambert W function.
So the solution in your case is:

    W(log(T)*y*T) / log(T)  # hope I transformed it correctly.

Now, how to compute Lambert's W ? Well, look into the 'gsl' package
and, alas, there is the function lambert_W0.

Your example:
----
    y <-   3
    T <- 123

    library(gsl)
    lambert_W0(log(T)*y*T)/log(T)
    # [1] 1.191830
----

Regards,  Hans Werner


> 
> John C. Nash has been so kind to help me on here. In case anyone faces a 
> similar problem in the future, the solution looks as follows:
> 
> *****
> 
> func1 <- function(y,x,T){
>      out <- x*T^(x-1)-y
>      return(out)
> }
> 
> # Assign the known values to y and T:
> y <-   3
> T <- 123
> 
> root <- uniroot(func1,c(-10,100),y=y,T=T)
> print(root)
> 
> ********
> 
> Somewhat simpler than I thought....
> 
> Thanks again!
> 
> Uli
>

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list