Quali tecniche di approssimazione esistono per la funzione quadrata super-radice?


17

Ho bisogno di implementare un'approssimazione all'inverso di , cioè la funzione quadrata super-radice (ssrt). Ad esempio, significa che . Non sono interessato a nessuna particolare precisione / profondità di bit quanto a capire quali sono le mie opzioni in contrasto con approcci più semplici che utilizzano serie di potenze.xxssrt(2)1.561.561.562

Wolfram Alpha offre una bella soluzione simbolica in termini di funzione Lambert W (ovvero ). Wikipedia fornisce la stessa formula , così come l'equivalente . Dato che esiste una quantità ragionevole di informazioni sull'informatica [1] [2], tecnicamente è tutto ciò che serve per implementare qualcosa per una varietà di requisiti. Conosco almeno due libri che approfondiscono l'approssimazione di [3] [4], quindi c'è anche molto spazio per ottimizzare da quella direzione.ln(X)/W(ln(X))eW(ln(X))W(X)ln(X)

Tuttavia, ho due domande:

  1. Le tecniche di approssimazione specifiche di questa funzione sono state pubblicate ovunque?
  2. Va con un altro nome oltre a "super-radice quadrata" che faciliterebbe la ricerca di riferimenti?

Wikipedia / Google ha rivelato alcuni riferimenti dedicati a funzioni di "tetrazione" più generali che includono come un caso speciale, ma la maggior parte sembra essere più orientata all'esplorazione / definizione dei casi generali.SSrt(X)

-

  1. Corless, R .; Gonnet, G .; Lepre, re .; Jeffrey, D .; Knuth, Donald (1996), "Sulla funzione Lambert W" http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf
  2. Biblioteca digitale di funzioni matematiche . http://dlmf.nist.gov/4.13
  3. Crenshaw, Jack W. (2000), Math Toolkit per la programmazione in tempo reale.
  4. Hart, John F. (1978), Computer Approximations.
  5. Chapeau-Blondeau, F. e Monir, A. (2002). Valutazione numerica della funzione di Lambert W e applicazione alla generazione di rumore gaussiano generalizzato con esponente 1/2. Transazioni IEEE sull'elaborazione del segnale 50, 2160-2165. http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
  6. Minero, Paul. Veloce approssimativo Lambert W . http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html

-

Aggiornare

Dopo aver fatto qualche ricerca in più negli ultimi giorni, non ho ancora trovato il tipo di trattamento pratico "Crenshaw style" di che speravo, ma ho trovato un nuovo riferimento degno di essere documentato qui. Nella terza pagina di , c'è una sezione intitolata "Approssimazione rapida" che fornisce dettagli dettagliati sull'approssimazione di nel contesto della generazione del rumore. A parte ciò, la densità di probabilità del "rumore gaussiano con esponente 1/2" [nel documento] appare sorprendentemente simile all'istogramma nella risposta di Kellenjb a questa domanda sul rilevamento del clipping del segnale .[3]SSrt(X)[5]W(X)

Inoltre, il link fornito da rwong nei commenti è un'ottima risorsa per implementare effettivamente , e si collega anche al progetto su licenza BSD dell'autore chiamato fastapprox , che include l'implementazione descritta.O ( x )[6]W(X)



2
Ho chiesto questo su Meta, poiché il campo dei commenti non è pensato per discussioni estese. Per favore, suggerisci come dovremmo gestire queste domande qui: Le domande sull'analisi numerica sono in tema?

@datageist - La conclusione iniziale della meta domanda era che se si desidera utilizzare questa analisi numerica per elaborare i dati DSP, allora è in argomento. Se no, allora no. Come si collega questo con DSP?
Kevin Vermeer,

2
@Kevin È nato nel contesto dello sviluppo di un effetto audio.
datageist

1
Ogni volta che ho bisogno di scrivere una routine per la funzione Lambert, di solito uso le approssimazioni fornite in questo documento e poi perfeziono con Newton-Raphson, Halley o qualsiasi altro metodo iterativo. Potresti adattare questo approccio per invertire ...xx

Risposte:


6

Alcune pugnalate numeriche al buio hanno prodotto quanto segue per un approccio iterativo:

Stiamo cercando la soluzione y = f (x) dove y ^ y = x.

ylny=lnX

y=g(X,y)=elnXy

Il valore per è un punto fisso dell'equazione sopra, ed empiricamente sembra convergere per alcuni valori di x , ma per valori più grandi di x oscilla o diverge.yXX

Quindi ho provato un approccio simile alla radice quadrata iterativa di Newton:

y=yprevious+y2=y+elnxy2

dove y * dovrebbe rappresentare una risposta non convergente ma ottimistica che mantiene l'accuratezza se ti capita di indovinare un valore iniziale accurato (nella radice quadrata y 2 = x, è y * = x / y).

xxmin=(1e)1e

y0=ln(x)+1

Quindi ho pensato che forse c'è una soluzione che converge meglio:

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

Poi ho trovato qualcosa di interessante.

yyy=xy2=g(x,y+ϵ)=eln(x)y+ϵy2yϵ×(ln(y))y1=y+ϵϵy2=g(x,y1)(y2-y)ε×(-ln(y))=(y1-y)×(-ln(y))

yy=y2+ln(y)×y11+ln(y)ln(y1)ln(y)

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])

y=1+ln(X)

(Qualcuno potrebbe probabilmente dimostrare che questo è equivalente a Newton-Raphson in qualche modo, ma penso che sia al di là delle mie capacità.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.