1 votos

Evitar la sustracción para la diferencia finita con log y exp

Quiero aproximar la derivada de f(x)

Diferencia finita

$f'(x) \approx \frac{f(x+h)-f(x)}{h}$

Me han enseñado que el error de la sustracción se dispara para h pequeños, lo que puedo comprobar con MATLAB.

Método Smartass

Así que pensé que lo siguiente podría solucionar el problema:

$f'(x) \approx \frac{\log{\frac{\exp(f(x+h))}{\exp(f(x))}}}{h}$

Sin embargo, obtengo los mismos errores relativos. (Que también comienzan a aumentar para h menor que aprox. $\epsilon_{mach}/2$

¿Por qué?

1voto

Zorgoth Puntos 88

Su solución no ayuda ya que es esencialmente lo mismo. $\log \frac{\exp(f(x+h))}{\exp(f(x))}$ no va a ser una representación más exacta de $f(x+h)-f(x)$ que evaluarlo directamente (en promedio, me imagino que será menos preciso).

Realmente no hay mucho que se pueda hacer cuando se trabaja tan cerca del error de la máquina afaik. En la práctica, no es necesario utilizar un $h$ con funciones razonables; la solución práctica es que cuando estés dividiendo por un número pequeño, no dejes que ese número se acerque a $\epsilon_{mach}$ .

1voto

Mark Fischler Puntos 11615

En primer lugar, siempre hay que tener cuidado de elegir $h$ con una muy ligera dependencia de $x$ tal que $x \pm h$ es exactamente representable por la máquina. Por ejemplo, si $x = 1$ entonces debería redondear al menos el $h$ al múltiplo más cercano de $2^{-22}$ para una precisión de 32 bits o $2^{-51}$ para los dobles de 64 bits.

Entonces, como señala Manazoni, la fórmula simétrica es superior; consigue una precisión de unos dos órdenes de magnitud mejor trabajando con números de 64 bits. Hay que elegir un $h$ en algún lugar cerca de $x \epsilon^{1/3}$ , donde $\epsilon$ es la precisión fraccionaria de la máquina (por tanto, en dobles de 64 bits, $h$ de aproximadamente $10^{-5}x$ es bueno. El error fraccionario en la derivada debe ser de aproximadamente $\epsilon^{2/3}$ .

Sin embargo, mejor, a menos que sospeche un comportamiento realmente extraño cerca de $x$ es utilizar la siguiente fórmula simétrica de orden superior $$ f^{\prime}(x) = \frac{ f(x-2h) -4 f(x-h) + 4 f(x+h) - f(x+2h)}{6} + O\left(h^4 f{\prime\prime\prime\prime}(x) \right) $$ utilizando $h \approx x \epsilon^{1/5}$ , lo que da una precisión fraccionaria de aproximadamente $\epsilon^{4/5}$ .

Los métodos de orden superior empiezan a sondear con demasiada sensibilidad el comportamiento ligeramente irregular de las funciones y empiezan a depender demasiado de la precisión de las evaluaciones de las funciones. Desgraciadamente, a diferencia del caso de la integración, en el que existen métodos de tamaño de paso adaptativo, no existe un método robusto para elegir el orden y el tamaño de paso que proporcione de forma fiable la mejor estimación posible de la derivada. estimación de la derivada. Pero hay métodos que son aún mejores que el que he mostrado aquí, véase el capítulo 5.7 de Recetas numéricas.

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