Quiero ser estable cerca de $f(0) = 1$. ¿Hay una función agradable que lo hace ya, como tal vez una función trigonométricas hiperbólica o algo como expm1, o ¿debo chequeen si $x$ está cerca de cero y luego usar una aproximación polinomial?
Respuestas
¿Demasiados anuncios?Considere la posibilidad de los números de Bernoulli, que se define por la fórmula recursiva:
$$B_0=1$$
$$\sum_{k<n} {n\choose k }B_k=0\text{ ; } n\geq 2$$
Esto le da a la secuencia:
$$\{B_n\}_{n\in \Bbb N}=\left\{ 1,-\frac 1 2,\frac 1 6 ,0,\frac 1 {30},0,\dots\right\}$$
Es la generación de la función es
$$ \sum_{n=0}^\infty B_n \frac{x^n}{n!}=\frac{x}{e^x-1}$$
Sus primeros términos son
$$1-\frac x 2 +\frac {x^2}{12}-\frac{x^4}{720}+\cdots$$
Los números de' denominadores crecer muy rápidamente, así que usted no debe tener ningún problema con la convergencia: de hecho, la función es essentialy $=-x$ de las grandes negativo $x$ $=0$ de las grandes positivo $x$, por lo que algunos términos, debería bastar la "cerca origen" de la aproximación.
Si no desea utilizar el expm1()
función por alguna razón, una posibilidad, detallada en el libro de Higham, es dejar que $u=\exp\,x$ y $\log\,u/(u-1)$ para calcular. El truco es atribuido a Velvel Kahan.
Que comentas usando funciones hiperbólicas. Usted podría tratar de $$ \frac{x}{\exp(x)-1}=\frac{x/2}{\exp(x/2)\sinh(x/2)} $$ esto no pierde ninguna precisión si $\sinh$ es computada a precisión por el sistema subyacente.
Tenga en cuenta que $\mathrm{expm1}(x)=2\exp(x/2)\sinh(x/2)$.
Ejemplo: cálculo de dígitos 15
$x=.00001415926535897932$: $$\begin{align} \frac{x}{\exp(x)-1} &=\frac{.00001415926535897932}{1.000014159365602-1}\\ &=\color{#C00000}{.9999929203}73447 \end {Alinee el} $$ $$\begin{align} \frac{x/2}{\exp(x/2)\sinh(x/2)} &=\frac{.00000707963267948966}{1.000005000012500\cdot.00000707963267954879}\\ &=\color{#C00000}{.999992920384028} \end {Alinee el} $$
Si su sistema ofrece expm1(x) debe se han preocupado acerca de errores y estabilidad por lo menos tan bien como usted puede. Es una mejor pregunta si no está disponible. Wolfram alpha da $1-\frac {x}2+\frac {x^2}{12}$ para la segunda serie de orden alrededor de $0$, por lo que podría comprobar si $x$ está cerca de cero y usar ese.