Necesito una fórmula/serie para calcular la función error inversa, que es la inversa de $$ \operatorname{erf}(x) = \dfrac{2}{\sqrt{\pi}} \int\limits_{0}^{x} \mathrm{e}^{-t^2} \,\mathrm{d}t. $$
Aparentemente, la serie de Maclaurin para la función error inversa es $$ \operatorname{erf}^{-1}(x) = \sqrt{\pi} \left( \frac{1}{2}x + \frac{1}{24}\pi x^3 + \frac{7}{960}\pi^2 x^5 + \frac{127}{80\,640}\pi^3 x^7 + \ldots \right), $$ pero no tengo idea de cuántos términos necesito para que converja (algo como 4 lugares decimales estaría bien para mí, pero me gustaría saber la respuesta en general). Alternativamente, ¿hay una mejor manera de calcular esta función?
3 votos
people.maths.ox.ac.uk/gilesm/files/gems_erfinv.pdf podría ser de interés para ti.
1 votos
Ver esta referencia
1 votos
Echa un vistazo aquí: naic.edu/~jeffh/inverse_cerf.c
1 votos
Una serie de Taylor probablemente no es la mejor solución, ya que la función tiene asíntotas verticales en $\pm1$, que no pueden ser representadas por un polinomio. El comportamiento cerca de $1$ es como $f(x)=\sqrt{-\ln(1-x))}$. Podría ser interesante considerar la función $\text{erf}^{-1}(f(x))$.
0 votos
¿Hay alguna razón en particular por la que necesitas una fórmula, en lugar de simplemente usar una rutina estándar como norminv de Matlab? En particular, ten en cuenta que erf(x)=2(F(x)-1/2) donde F es la CDF de una variable aleatoria normal con varianza $2$. Entonces, $\operatorname{erf}^{-1}(x)=F^{-1} \left ( \frac{x+1}{2} \right )$ lo cual puedes calcular con norminv.
0 votos
@Ian La razón es que me gustaría una solución genérica, es decir, algo que pueda implementar hipotéticamente en Brainf*ck, en lugar de depender de un lenguaje específico como Matlab.
0 votos
@Bluefire Pero nuevamente, ¿por qué? Realmente no depende del lenguaje: Matlab tiene norminv, Excel tiene norminv, Python tiene scipy.stats.norm que tiene una función para ello, etc. Esto es solo una de esas cosas que se ha hecho. Y la forma en que se ha hecho no es especialmente esclarecedora, cuando abres el código fuente de este tipo de cosas está lleno de constantes codificadas.
0 votos
@Ian Ese no es el punto. Siempre es mejor tener un algoritmo genérico que depender de que tu lenguaje tenga una característica específica. ¿Sabes si la implementación de Matlab o Python tiene su código fuente disponible? No importa si hay constantes, siempre y cuando pueda traducirlo a pseudocódigo.
0 votos
@Bluefire Matlab no lo es. Python sí lo es, pero está suficientemente integrado en scipy que podría ser no trivial extraer este algoritmo en particular. Mirar el código fuente de R podría ser una buena opción, aunque nuevamente encontrará constantes codificadas que originalmente se calcularon utilizando otro método (que tal vez le importe o no le importe).
0 votos
De hecho, esa es una buena pregunta: ¿quieres saber cómo calcular las constantes relevantes, o sería suficiente con solo formular el algoritmo con las constantes incluidas? En este último caso, sería bastante sencillo convertir una implementación de código abierto en un seudocódigo para ti.
0 votos
@Ian, realmente no me preocupa cómo se deriva un método, solo que sea una buena aproximación. Voy a revisar las implementaciones de Python y R, como sugeriste...
1 votos
Otro documento: ams.org/journals/mcom/1974-28-126/S0025-5718-1974-0341812-5/…
0 votos
@YuriyS Gracias, eso es realmente útil.
0 votos
@YuriyS Hay esta fórmula de derivada n-ésima para la función de error inversa. ¿Se puede utilizar para una Serie de Taylor alrededor de un $z$ conveniente?