8 votos

¿Qué es una buena manera de calcular el $f(x) = x / (\exp(x) - 1)$?

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?

7voto

Pedro Tamaroff Puntos 73748

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.

7voto

Andrew Puntos 140

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.

3voto

Anthony Shaw Puntos 858

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} $$

2voto

Shabaz Puntos 403

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.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X