5 votos

Integración numérica

Estoy tratando de calcular numéricamente la no-elemental de la función a continuación : $$ \frac{1}{x} \int_0^x \frac{t}{e^t-1}\mathrm{d}t $$

Traté de evaluar la integral con el quad algoritmo, pero en los valores de x < 1, el resultado es inexacto en comparación con el presentado valores, tal vez a causa de la indeterminación de el integrando en $t=0$.

También traté de calcular la integral con el método de Simpson en el que me reemplazar manualmente el primer término de el integrando vector por el valor del límite : $$ \lim_{t\to 0} \frac{t}{e^t-1} = \lim_{t \to 0} \frac{1}{e^t}=1 $$ Se necesita sin embargo un gran número de intervalos para alcanzar una precisión de tan solo 3 dígitos, y tiene un rendimiento deficiente.

Cualquier idea para calcular esta función de manera más eficiente? O tal vez esta función ya está calculada en un Scipy algoritmo?

Gracias por su ayuda

7voto

Simple Art Puntos 745

Recordar la utilidad de Riemann zeta función:

$$\int_0^\infty\frac t{e^t-1}\ dt=\zeta(2)\Gamma(2)=\frac{\pi^2}6$$

Por lo tanto, sabemos que

$$\frac1x\int_0^x\frac t{e^t-1}\ dt=\frac1x\left(\frac{\pi^2}6-\int_x^\infty\frac t{e^t-1}\ dt\right)$$

Esto es mucho más fácil, ya que, es la serie geométrica, podemos ver que

$$\int_x^\infty\frac t{e^t-1}\ dt=\sum_{n=1}^\infty\int_x^\infty te^{-nt}\ dt=\sum_{n=1}^\infty\frac{e^{-nx}(nx+1)}{n^2}=-x\ln(1-e^{-x})+\sum_{n=1}^\infty\frac{e^{-nx}}{n^2}=-x\ln(1-e^{-x})+\operatorname{Li}_2(e^{-x})$$

Y para grandes valores de $x$, los primeros valores de esta serie es suficiente.

$$\frac1x\int_0^x\frac t{e^t-1}\ dt=\frac1x\left(\frac{\pi^2}6-\sum_{n=1}^\infty\frac{e^{-nx}}{n^2}\right)+\ln(1-e^{-x})$$

Todo esto se puede encontrar al final de la Polylogarithm: Relaciones con otras funciones de la sección de Wikipedia.

5voto

Roger Hoover Puntos 56

$$\int_{0}^{x}\frac{t\,dt}{e^t-1}=\frac{\pi^2}{6}-\int_{e^x}^{+\infty}\frac{\log(t)\,dt}{t(t-1)}=\frac{\pi^2}{6}+\int_{0}^{e^{-x}}\frac{\log(t)}{1-t}\,dt$ $ es igual a %#% $ de #% donde la serie truncada proporciona buenas aproximaciones para los valores grandes de $$ \frac{\pi^2}{6}+\int_{1-e^{-x}}^{1}\frac{\log(1-t)}{t}\,dt =\text{Li}_2(1-e^{-x})=\sum_{n\geq 1}\frac{(1-e^{-x})^n}{n^2}$.
Para cualquier $x$ es mucho mejor utilizar la serie de Taylor truncada: $x\in(0,1)$ $

3voto

Mark Fischler Puntos 11615

Una forma inteligente es romper la integral en dos partes, y el masaje de la función en la pieza de tener $t<1$ para evitar el error numérico de acumulación: $$ \int_0^x\frac{t}{e^t-1}= \int_0^1\frac{t}{e^t-1}+ \int_1^x\frac{t}{e^t-1} $$ No están teniendo ningún problema con la segunda pieza. Para la primera pieza, el truco es Taylor ampliar acerca de $t=0$: $$ \frac{t}{e^t-1}= 1-\frac12 t+\frac1{12}t^2-\frac1{6!}t^4+\frac1{6\cdot 7!}t^6-\frac1{60\cdot 8!}t^8+\frac1{132\cdot9!}t^{10}+ \cdots $$ La integración de este de cero a uno, es muy fácil.

2voto

Felix Marin Puntos 32763

$\newcommand{\bbx}[1]{\,\bbox[8px,border:1px groove armada]{\displaystyle{#1}}\,} \newcommand{\llaves}[1]{\left\lbrace\,{#1}\,\right\rbrace} \newcommand{\bracks}[1]{\left\lbrack\,{#1}\,\right\rbrack} \newcommand{\dd}{\mathrm{d}} \newcommand{\ds}[1]{\displaystyle{#1}} \newcommand{\expo}[1]{\,\mathrm{e}^{#1}\,} \newcommand{\ic}{\mathrm{i}} \newcommand{\mc}[1]{\mathcal{#1}} \newcommand{\mrm}[1]{\mathrm{#1}} \newcommand{\pars}[1]{\left(\,{#1}\,\right)} \newcommand{\partiald}[3][]{\frac{\partial^{#1} #2}{\parcial #3^{#1}}} \newcommand{\raíz}[2][]{\,\sqrt[#1]{\,{#2}\,}\,} \newcommand{\totald}[3][]{\frac{\mathrm{d}^{#1} #2}{\mathrm{d} #3^{#1}}} \newcommand{\verts}[1]{\left\vert\,{#1}\,\right\vert}$ Con el fin de realizar una integración numérica se debe tener cuidado de la $\ds{t \over \expo{t} - 1}$ 'integrable singularidad'. Tenga en cuenta que $\ds{{t \over \expo{t} - 1} \sim 1 - {1 \over 2}\,t + {1 \over 12}\,t^{2} - {1 \over 720}\,t^{4} + \,\mrm{O}\pars{t^{6}}}$. $$ \mbox{Reemplazar}\quad {t \\expo{t} - 1}\quad\mbox{por}\quad\mrm{f}\pars{t} \equiv \left\{\begin{array}{lcl} \ds{-1} & \mbox{if} & \ds{\phantom{|,}t\phantom{\,|} <\ \texttt{TOL_0}} \\[2mm] \ds{\phantom{-}0} & \mbox{if} & \ds{\phantom{|\,}t\phantom{\,|} >\ \texttt{-TOL_0}} \\[2mm] \ds{t \over \expo{t} - 1} & \mbox{if} & \ds{\verts{t} > \texttt{TOL_1}} \\[2mm] \ds{1.0 - 0.5\,t\pars{1.0 - {t \over 6.0}}} && \mbox{Otherwise} \end{array}\right. $$

$\ds{\texttt{TOL_0}}$ $\ds{\texttt{TOL_1}}$ se definen en términos de la Precisión De La Máquina$\texttt{MP}$ de la siguiente manera:

$$ \texttt{TOL_0} \equiv \ln\pars{\texttt{MP}}/1.05\,;\qquad \texttt{TOL_1} \equiv 1.05\pars{720.0\,\,\,\texttt{MP}}^{1/4} $$ El $\ds{1.05}$-factor se incluye para evitar errores de redondeo$\ds{\pars{~namely,\ 5\ \% ~}}$. $$\bbox[#ffe,10px,border:1px groove armada]{\ds{% \mbox{Con}\ \,\mrm{f}\pars{t}\mbox{, como se indica más arriba, usted puede utilizar}\ seguridad\ \mbox{la}\ Simpson\ Método.}} $$

Para el propósito de este ejemplo, voy a incluir un $\texttt{javascript}$ código $\ds{\pars{~\mbox{se puede ejecutar en una}\ terminal\ \mbox{con}\ \texttt{nodo}: \texttt{nodo integ0.js}~}}$:

// integ0.js

"use strict";
var MACHINEPRECISION = (function() // Precisión de la Máquina ( por definición )
{
 var machPrec = 1.0
 var temp = 1.0;

 while((1.0 + temp) > 1.0) {
 machPrec = temp;
 temp /= 2.0;
}

 volver machPrec;
})();


var f = (function ()
{
 var TOL_0 = Matemáticas.log(MACHINEPRECISION)/1.05;
 var TOL_1 = 1.05*Matemáticas.pow(720.0*MACHINEPRECISION,0.25);

 la consola.log("\nTOL_0 = " + TOL_0 + "\nTOL_1 = " + TOL_1);

 función de devolución (t)
{
 if (t < TOL_0) de retorno de t;
 if (t > -TOL_0) return 0;
 if (Math.abs(t) > TOL_1) de retorno de t/(Math.exp(t) - 1.0);
 volver 1.0 - 0.5*t*(1.0 - t/6.0);
};
})();

la consola.log("\nMACHINE PRECISIÓN = " + MACHINEPRECISION + "\n");

El resultado es:

$\begin{array}{l} \ds{\texttt{TOL_0 = -34.32728894201634}} \\ \ds{\texttt{TOL_1 = 0.0006639455730754197}} \\ \ds{\texttt{MACHINE PRECISION = 2.220446049250313e-16}} \\ \end{array}$

Intentar poner en práctica la Regla de Simpson.

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