Que técnicas de aproximação existem para a função de super raiz quadrada?


17

Eu preciso implementar uma aproximação ao inverso de xx , ou seja, a função quadrada de super raiz (ssrt). Por exemplo, ssrt(2)1.56 meios que 1.561.562 . Não estou tão interessado em nenhuma precisão / profundidade de bits em particular quanto em entender quais são minhas opções em contraste com abordagens mais diretas usando séries de potência.

O Wolfram Alpha fornece uma boa solução simbólica em termos da função Lambert W (ou seja, ln(x)/W(ln(x)) ). Wikipedia dá a mesma fórmula , bem como o equivalente eW(ln(x)) . Dado que há uma quantidade razoável de informações sobre o cálculo de para uma variedade de requisitos. Conheço pelo menos dois livros que detalham detalhadamente a aproximação de ln ( x )W(x) [1] [2], tecnicamente isso é tudo o que é necessário para implementar algoln(x) [3] [4], então há muito espaço para otimizar a partir dessa direção.

No entanto, tenho duas perguntas:

  1. As técnicas de aproximação específicas para esta função foram publicadas em algum lugar?
  2. Ele tem outro nome além de "super raiz quadrada" que tornaria a busca por referências um pouco mais fácil?

O Wikipedia / Google encontrou algumas referências dedicadas a funções mais gerais de "tetração" que incluem ssrt(x) como um caso especial, mas a maioria deles parecem ser mais orientada para explorar / definindo os casos gerais.

-

  1. Corless, R .; Gonnet, G .; Hare, D .; Jeffrey, D .; Knuth, Donald (1996), "Sobre a função Lambert W" http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf
  2. Biblioteca Digital de Funções Matemáticas . http://dlmf.nist.gov/4.13
  3. Crenshaw, Jack W. (2000), Math Toolkit for Real-Time Programming.
  4. Hart, John F. (1978), Computer Approximations.
  5. Chapeau-Blondeau, F. e Monir, A. (2002). Avaliação numérica da função Lambert W e aplicação na geração de ruído gaussiano generalizado com expoente 1/2. Transações IEEE no processamento de sinais 50, 2160-2165. http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
  6. Minero, Paul. Rápido aproximado Lambert W . http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html

-

Atualizar

Depois de fazer mais algumas pesquisas ao longo dos últimos dias, eu ainda não encontrei o tipo de hands-on "estilo Crenshaw" tratamento de s s r t ( x ) que eu estava esperando, mas eu encontrar um novo referência que vale a pena documentar aqui. Na página três em [ 5 ] , há uma seção intitulada "Aproximação rápida", que detalha a aproximação de W ( x ) no contexto da geração de ruído. Como um aparte interessante, a densidade de probabilidade do "ruído gaussiano com expoente 1/2" [no artigo] parece surpreendentemente semelhante ao histograma na resposta de Kellenjb para[3]ssrt(x)[5]W(x)esta pergunta sobre a detecção de recorte de sinal .

Além disso, o link fornecido por rwong nos comentários é um excelente recurso para realmente implementar o W ( x ) , e até vincula ao projeto licenciado por BSD do autor chamado fastapprox , que inclui a implementação descrita.[6]W(x)



2
Perguntei sobre isso no Meta, já que o campo de comentários não se destina a discussões prolongadas. Por favor, sugira como devemos lidar com estas questões aqui: As perguntas sobre análise numérica estão relacionadas ao tópico?

@ datageist - A conclusão inicial da meta questão foi que, se você quiser usar essa análise numérica para processar dados DSP, então estará no tópico. Se não, então não. Como isso se relaciona com o DSP?
21711 Kevin Vermeer

2
@ Kevin Ele surgiu no contexto do desenvolvimento de um efeito de áudio.
datageist

1
Sempre que preciso escrever uma rotina para a função Lambert, costumo usar as aproximações fornecidas neste artigo e depois aperfeiçoar com Newton-Raphson, Halley ou qualquer outro método iterativo. Você pode adaptar esta abordagem para inverter ...xx

Respostas:


6

Algumas facadas numéricas no escuro renderam o seguinte para uma abordagem iterativa:

Estamos procurando a solução y = f (x) onde y ^ y = x.

ylny=lnx

y=g(x,y)=elnxy

O valor para é um ponto fixo da equação acima e, empiricamente, parece convergir para alguns valores de x , mas para valores maiores de x ele oscila ou diverge.yxx

Depois, tentei uma abordagem semelhante à raiz quadrada iterativa de Newton:

y=yprevious+y2=y+elnxy2

onde y * deve representar uma resposta não-convergente, mas otimista, que mantém a precisão se você adivinhar um valor inicial preciso (na raiz quadrada y 2 = x, é y * = x / y).

Parece convergir, mas muito lentamente na extremidade inferior de (próximo de x m i n = ( 1x )xmin=(1e)1e

Também parece que um bom palpite inicial é .y0=ln(x)+1

Então imaginei que talvez houvesse uma solução com melhor convergência:

y=(1a)×y+a×g(x,y)ax

Então eu encontrei algo interessante.

yyy=xy2=g(x,y+ϵ)=eln(x)y+ϵy2yϵ×(ln(y))y1=y+ϵϵy2=g(x,y1)(y2y)ϵ×(ln(y))=(y1y)×(ln(y)). (Just to clarify, I have no analysis to verify this, but the numbers just popped out of some numerical evaluation I performed.)

Solve for the linear terms in y, and you get y=y2+ln(y)×y11+ln(y)... use ln(y1) in place of ln(y) and you get this iterative approximation:

y[n+1]=g(x,y[n])+ln(y[n])×y[n]1+ln(y[n])=eln(x)y[n]+ln(y[n])×y[n]1+ln(y[n])

This appears to work very well, with the initial guess y=1+ln(x), and appears to converge within 4 or 5 iterations.

(Someone could probably show that this is equivalent to Newton-Raphson in some way, but I think it's beyond my capability.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.