Necesito implementar una aproximación a la inversa de , es decir, la función de superraíz cuadrada (ssrt). Por ejemplo, significa que . No estoy tan interesado en ninguna precisión / profundidad de bits particular como en comprender cuáles son mis opciones en contraste con enfoques más directos que utilizan series de potencia.1.56 1.56 ≈ 2
Wolfram Alpha ofrece una buena solución simbólica en términos de la función Lambert W (es decir, ). Wikipedia da la misma fórmula , así como el equivalente . Dado que hay una cantidad razonable de información sobre la computación [1] [2], técnicamente eso es todo lo necesario para implementar algo para una variedad de requisitos. Sé de al menos dos libros que detallan extensamente acerca de la aproximación de [3] [4], por lo que incluso hay mucho espacio para optimizar desde esa dirección. W ( x )
Sin embargo, tengo dos preguntas:
- ¿Se han publicado en algún lugar técnicas de aproximación específicas para esta función?
- ¿Tiene otro nombre además de "superraíz cuadrada" que facilitaría un poco la búsqueda de referencias?
Wikipedia / Google ha encontrado algunas referencias dedicadas a funciones de "tetración" más generales que incluyen como un caso especial, pero la mayoría de ellas parecen estar más orientadas a explorar / definir los casos generales.
-
- Corless, R .; Gonnet, G .; Liebre, D .; Jeffrey, D .; Knuth, Donald (1996), "Sobre la función Lambert W" http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf
- Biblioteca digital de funciones matemáticas . http://dlmf.nist.gov/4.13
- Crenshaw, Jack W. (2000), Math Toolkit for Real-Time Programming.
- Hart, John F. (1978), Aproximaciones informáticas.
- Chapeau-Blondeau, F. y Monir, A. (2002). Evaluación numérica de la función Lambert W y aplicación a la generación de ruido gaussiano generalizado con exponente 1/2. Transacciones IEEE sobre procesamiento de señales 50, 2160-2165. http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
- Minero, Paul. Fast aproximado W de Lambert . http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html
-
Actualizar
Después de investigar un poco más en los últimos días, todavía no he encontrado el tipo de tratamiento práctico "estilo Crenshaw" de que esperaba, pero encontré un nueva referencia que vale la pena documentar aquí. En la página tres en , hay una sección titulada "Aproximación rápida" que entra en gran detalle acerca de la aproximación de en el contexto de la generación de ruido. Como comentario interesante, la densidad de probabilidad de "ruido gaussiano con exponente 1/2" [en el artículo] se ve sorprendentemente similar al histograma en la respuesta de Kellenjb a esta pregunta sobre la detección de recorte de señal .s s r t ( x ) [ 5 ] W ( x )
Además, el enlace proporcionado por rwong en los comentarios es un gran recurso para implementar realmente , e incluso se vincula al proyecto con licencia BSD del autor llamado fastapprox , que incluye la implementación descrita.W ( x )
fuente
Respuestas:
Algunas puñaladas numéricas en la oscuridad arrojaron lo siguiente para un enfoque iterativo:
Estamos buscando la solución y = f (x) donde y ^ y = x.
El valor para es un punto fijo de la ecuación anterior, y empíricamente parece converger para algunos valores de x , pero para valores mayores de x oscila o diverge.y X X
Luego probé un enfoque similar a la raíz cuadrada iterativa de Newton:
donde se supone que y * representa una respuesta no convergente pero optimista que mantiene la precisión si adivina un valor inicial preciso (en raíz cuadrada y 2 = x, es y * = x / y).
Esto parece converger, pero muy lentamente en el extremo inferior de (cerca de x m i n = ( 1X )Xmin=(1e)1e
También parece que una buena suposición inicial es .y0=ln(x)+1
Así que pensé que tal vez hay una solución mejor convergente:
para algún valor de a que es función de x .y= ( 1 - a ) × y+ a × g( x , y) un X
Entonces encontré algo interesante.
Si obtengo una respuesta convergente del enfoque anterior para y y = x , y luego calculo y 2 = g ( x , y + ϵ ) = e ln ( x )y yy= x ,parecequey2-y= aproximadamenteϵ×(-ln(y)).... por ejemplo, si teníamos una conjeturay1=y+ϵpara algún desconocidoϵ, y calculamosy2=g(x,y1), luego(y2-y)≈ϵ×(-ln(y2= g( x , y+ ϵ ) = eEn( x )y+ ϵ y2- y ϵ × ( - ln( y) ) y1= y+ ϵ ϵ y2= g( x , y1) . (Solo para aclarar, no tengo análisis para verificar esto, pero los números simplemente salieron de alguna evaluación numérica que realicé).( y2- y) ≈ ϵ × ( - ln( y) ) = ( y1- y) × ( - ln( y) )
Resuelve los términos lineales en , y obtienes y = y 2 + ln ( y ) × y 1y ... useln(y1)en lugar deln(y)y obtendrá esta aproximación iterativa:y= y2+ ln( y) × y11 + ln( y) En( y1) En( y)
(Alguien probablemente podría mostrar que esto es equivalente a Newton-Raphson de alguna manera, pero creo que está más allá de mi capacidad).
fuente