Processing math: 100%

13 votos

¿Cálculo de la función Lambert-W?

Tengo una ecuación de la forma:

nlogn=x

Al buscar encontré el término "Función Lambert-W" pero no pude encontrar un método adecuado para la evaluación, ni tampoco ningún código de computadora para su evaluación.

¿Alguna idea de cómo puedo evaluarlo?

0 votos

¿Te refieres a una evaluación de la función para un argumento específico? Lo siento, solo estoy tratando de asegurarme de entender tu pregunta.

0 votos

Bueno, esto es más una pregunta de programación, pero me preguntaba si se podría resolver manualmente. Para un valor dado de x, ¿podemos encontrar n?

0 votos

mathworld.wolfram.com/LambertW-Function.html da varias expansiones en series. Consulta las ecuaciones (11), (13) y (14).

8voto

Claude Leibovici Puntos 54392

Consideremos la función f(x)=xlog(x)a Efectivamente, la solución de f(x)=0 está dada por x=aW(a) y, si entendí correctamente, estás buscando un método de cálculo para obtener W(a).

Según la definición, W(a) se define de tal manera que a=W(a)eW(a), por lo que el método de Newton parece ser (y es) muy bueno.

Te sugiero que eches un vistazo en http://en.wikipedia.org/wiki/Lambert_W_function. En el párrafo titulado "Evaluación numérica", dan las fórmulas de Newton y Halley (esta última ha sido ampliamente utilizada por Corless y otros para calcular W(a).

En la misma página de Wikipedia, encontrarás aproximaciones muy buenas y eficientes de W(a) para valores pequeños y grandes. Estas estimaciones te permitirán empezar muy cerca de la solución.

Si puedo resaltar algo que es realmente bueno: todas las derivadas de W(a) se expresan como funciones de a y W(a) mismo, y esto es extremadamente conveniente.

Podrías estar interesado en http://people.sc.fsu.edu/~jburkardt/cpp_src/toms443/toms443.html donde el código fuente está disponible.

4voto

Ahmed S. Attaalla Puntos 1196

Aunque sea una publicación antigua, me sorprende que nadie haya mencionado esto:

nlogn=(elogn)logn=x

Ahora debería ser obvio cómo proceder.

W(x)=logn

eW(x)=n

Y como W(x)eW(x)=x, eW(x)=xW(x) entonces,

xW(x)=n

4voto

Asad Mehasi Puntos 18

Aunque esto ya ha sido respondido, creo que una explicación paso a paso es más informativa que una general.

Lo siguiente es mi intento:

nln(n)=xlnnn=xnn=exn=ex/nn×xn=xnex/nx=xnex/nW(x)=W(xnex/n)W(x)=xnn=xW(x)n=xx/eW(x)(since W(x)eW(x)=x)n=eW(x)

0 votos

¿Cómo reemplazamos log(x) con ln(x)?

0 votos

@Mathrix A menudo se utiliza \log como \ln. A veces (principalmente en calculadoras) se usa para \log_{10}.

3voto

solusipse Puntos 145

Si estás usando Matlab o quieres ver una implementación robusta (pero simple) de la función Lambert W (solo la rama W0) utilizando el método de Halley, mira mi respuesta aquí.

Como alternativa a la respuesta más general de @ClaudeLeibovici, una ecuación específicamente de la forma nln(n)=x podría resolverse y analizarse mejor utilizando la función Wright ω más simple:

n=xω(ln(1/x))

Matlab tiene wrightOmega y Maple tiene Wrightomega para evaluar esta función de manera simbólica. Consulta a Corless y Jeffrey, 2002, La función omega de Wright (PDF) para más detalles. Desafortunadamente, parece que no hay soporte para esta función en SciPy o SymPy.

La función Wright ω también se puede evaluar numéricamente. Consulta a Lawrence, et al., 2012, Algoritmo 917: Evaluación en doble precisión de la función Wright. He implementado este algoritmo en Matlab, puedes encontrarlo en GitHub aquí. Evaluar esto numéricamente es 3+ órdenes de magnitud más rápido que evaluarlo de manera simbólica. Si tu parámetro x está restringido de ciertas maneras (por ejemplo, de valor real), podrías simplificar tu algoritmo – consulta el paper de Lawrence, et al. y los comentarios en mi código wrightOmega.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X