Diferenciación numérica

Uso del análisis numérico para estimar derivadas de funciones
Estimación de la derivada mediante diferencias finitas

En el análisis numérico , los algoritmos de diferenciación numérica estiman la derivada de una función matemática o una subrutina de función utilizando valores de la función y quizás otro conocimiento sobre la función.

Diferencias finitas

El método más simple es utilizar aproximaciones de diferencias finitas.

Una estimación simple de dos puntos es calcular la pendiente de una línea secante cercana a través de los puntos ( x , f ( x )) y ( x  +  h , f ( x  +  h )) . [1] Eligiendo un número pequeño h , h representa un pequeño cambio en x , y puede ser positivo o negativo. La pendiente de esta línea es Esta expresión es el cociente de diferencias de Newton (también conocido como diferencia dividida de primer orden ). F ( incógnita + yo ) F ( incógnita ) yo . {\displaystyle {\frac {f(x+h)-f(x)}{h}}.}

La pendiente de esta recta secante difiere de la pendiente de la recta tangente en una cantidad que es aproximadamente proporcional a h . A medida que h se acerca a cero, la pendiente de la recta secante se acerca a la pendiente de la recta tangente. Por lo tanto, la verdadera derivada de f en x es el límite del valor del cociente de diferencias a medida que las rectas secantes se acercan cada vez más a convertirse en una recta tangente: F " ( incógnita ) = límite yo 0 F ( incógnita + yo ) F ( incógnita ) yo . {\displaystyle f'(x)=\lim _{h\to 0}{\frac {f(x+h)-f(x)}{h}}.}

Dado que sustituir inmediatamente 0 por h da como resultado la forma indeterminada , calcular la derivada directamente puede resultar poco intuitivo. 0 0 {\displaystyle {\frac {0}{0}}}

De manera equivalente, la pendiente podría estimarse empleando las posiciones x  −  h y x .

Otra fórmula de dos puntos es calcular la pendiente de una línea secante cercana que pasa por los puntos ( x  −  h , f ( x  −  h )) y ( x  +  h , f ( x  +  h )) . La pendiente de esta línea es F ( incógnita + yo ) F ( incógnita yo ) 2 yo . {\displaystyle {\frac {f(x+h)-f(xh)}{2h}}.}

Esta fórmula se conoce como cociente de diferencias simétricas . En este caso, los errores de primer orden se cancelan, por lo que la pendiente de estas líneas secantes difiere de la pendiente de la línea tangente en una cantidad que es aproximadamente proporcional a . Por lo tanto, para valores pequeños de h, esta es una aproximación más precisa a la línea tangente que la estimación unilateral. Sin embargo, aunque la pendiente se calcula en x , el valor de la función en x no está involucrado. yo 2 Estilo de visualización h^{2}}

El error de estimación se obtiene mediante donde es un punto entre y . Este error no incluye el error de redondeo debido a que los números se representan y los cálculos se realizan con precisión limitada. R = F ( 3 ) ( do ) 6 yo 2 , {\displaystyle R={\frac {-f^{(3)}(c)}{6}}h^{2},} do {\estilo de visualización c} incógnita yo {\estilo de visualización xh} incógnita + yo {\estilo de visualización x+h}

El cociente de diferencias simétricas se emplea como método de aproximación de la derivada en varias calculadoras, incluidas TI-82 , TI-83 , TI-84 y TI-85 , todas las cuales utilizan este método con h  = 0,001 . [2] [3]

Tamaño del paso

Ejemplo que muestra la dificultad de elegir h debido tanto al error de redondeo como al error de fórmula

Una consideración importante en la práctica cuando la función se calcula utilizando aritmética de punto flotante de precisión finita es la elección del tamaño del paso, h . Si se elige demasiado pequeño, la resta producirá un gran error de redondeo . De hecho, todas las fórmulas de diferencias finitas están mal condicionadas [4] y debido a la cancelación producirán un valor de cero si h es lo suficientemente pequeño. [5] Si es demasiado grande, el cálculo de la pendiente de la línea secante se calculará con mayor precisión, pero la estimación de la pendiente de la tangente utilizando la secante podría ser peor. [6]

Para diferencias centrales básicas, el paso óptimo es la raíz cúbica de la épsilon de máquina . [7] Para la fórmula de la derivada numérica evaluada en x y x + h , una opción para h que es pequeña sin producir un gran error de redondeo es (aunque no cuando x  = 0), donde la épsilon de máquina ε es típicamente del orden de mi incógnita {\displaystyle {\sqrt {\varepsilon }}x} 2,2 × 10 −16 para doble precisión . [8] Una fórmula para h que equilibra el error de redondeo contra el error secante para una precisión óptima es [9] (aunque no cuando ), y para emplearla será necesario conocer la función. yo = 2 mi | F ( incógnita ) F " ( incógnita ) | {\displaystyle h=2{\sqrt {\varepsilon \izquierda|{\frac {f(x)}{f''(x)}}\derecha|}}} F " ( incógnita ) = 0 {\displaystyle f''(x)=0}

En el caso de los cálculos por ordenador, los problemas se agravan porque, aunque x necesariamente contiene un número de punto flotante representable con cierta precisión (32 o 64 bits, etc. ), x + h casi con certeza no será exactamente representable con esa precisión. Esto significa que x + h se cambiará (por redondeo o truncamiento) a un número cercano representable por máquina, con la consecuencia de que ( x  +  h ) −  x no será igual a h ; las dos evaluaciones de la función no estarán exactamente separadas por h . En este sentido, dado que la mayoría de las fracciones decimales son secuencias recurrentes en binario (así como 1/3 lo es en decimal), un paso aparentemente redondo como h  = 0,1 no será un número redondo en binario; es 0,000110011001100... 2 Un posible enfoque es el siguiente:

h := raíz cuadrada (eps) * x;xph := x + h;dx := xph - x;pendiente := (F(xph) - F(x)) / dx;

Sin embargo, en el caso de las computadoras, las herramientas de optimización del compilador pueden no prestar atención a los detalles de la aritmética informática real y, en su lugar, aplicar los axiomas de las matemáticas para deducir que dx y h son iguales. En el caso de C y lenguajes similares, una directiva que indique que xph es una variable volátil evitará esto.

Otros métodos

Métodos de orden superior

Existen métodos de orden superior para aproximar la derivada, así como métodos para derivadas superiores.

A continuación se presenta el método de cinco puntos para la primera derivada ( plantilla de cinco puntos en una dimensión): [10] donde . F " ( incógnita ) = F ( incógnita + 2 yo ) + 8 F ( incógnita + yo ) 8 F ( incógnita yo ) + F ( incógnita 2 yo ) 12 yo + yo 4 30 F ( 5 ) ( do ) , {\displaystyle f'(x)={\frac {-f(x+2h)+8f(x+h)-8f(x-h)+f(x-2h)}{12h}}+{\frac {h^{4}}{30}}f^{(5)}(c),} c [ x 2 h , x + 2 h ] {\displaystyle c\in [x-2h,x+2h]}

Para otras configuraciones de plantilla y órdenes de derivadas, la Calculadora de coeficientes de diferencias finitas es una herramienta que se puede utilizar para generar métodos de aproximación de derivadas para cualquier plantilla con cualquier orden de derivada (siempre que exista una solución).

Derivadas superiores

Utilizando el cociente diferencial de Newton, se puede demostrar lo siguiente [11] (para n > 0 ): f ( x ) = lim h 0 f ( x + h ) f ( x ) h {\displaystyle f'(x)=\lim _{h\to 0}{\frac {f(x+h)-f(x)}{h}}} f ( n ) ( x ) = lim h 0 1 h n k = 0 n ( 1 ) k + n ( n k ) f ( x + k h ) {\displaystyle f^{(n)}(x)=\lim _{h\to 0}{\frac {1}{h^{n}}}\sum _{k=0}^{n}(-1)^{k+n}{\binom {n}{k}}f(x+kh)}

Métodos de variables complejas

Las aproximaciones clásicas de diferencias finitas para la diferenciación numérica están mal condicionadas. Sin embargo, si es una función holomorfa , de valor real en la recta real, que puede evaluarse en puntos del plano complejo cerca de , entonces existen métodos estables . Por ejemplo, [5] la primera derivada puede calcularse mediante la fórmula de la derivada compleja en pasos: [12] [13] [14] f {\displaystyle f} x {\displaystyle x} f ( x ) = ( f ( x + i h ) ) h + O ( h 2 ) , i 2 := 1. {\displaystyle f'(x)={\frac {\Im (f(x+\mathrm {i} h))}{h}}+O(h^{2}),\quad \mathrm {i^{2}} :=-1.}

El tamaño de paso recomendado para obtener derivadas precisas para un rango de condiciones es . [6] Esta fórmula se puede obtener mediante la expansión de la serie de Taylor : h = 10 200 {\displaystyle h=10^{-200}} f ( x + i h ) = f ( x ) + i h f ( x ) 1 2 ! h 2 f ( x ) i 3 ! h 3 f ( 3 ) ( x ) + . {\displaystyle f(x+\mathrm {i} h)=f(x)+\mathrm {i} hf'(x)-{\tfrac {1}{2!}}h^{2}f''(x)-{\tfrac {\mathrm {i} }{3!}}h^{3}f^{(3)}(x)+\cdots .}

La fórmula de la derivada de paso complejo solo es válida para calcular derivadas de primer orden. Una generalización de lo anterior para calcular derivadas de cualquier orden emplea números multicomplejos , lo que da como resultado derivadas multicomplejas. [15] [16] [17] donde denotan las unidades imaginarias multicomplejas; . El operador extrae el componente n de un número multicomplejo de nivel , p. ej., extrae el componente real y extrae el último componente, el "más imaginario". El método se puede aplicar a derivadas mixtas, p. ej. para una derivada de segundo orden. f ( n ) ( x ) C n 2 1 ( n ) ( f ( x + i ( 1 ) h + + i ( n ) h ) ) h n {\displaystyle f^{(n)}(x)\approx {\frac {{\mathcal {C}}_{n^{2}-1}^{(n)}(f(x+\mathrm {i} ^{(1)}h+\cdots +\mathrm {i} ^{(n)}h))}{h^{n}}}} i ( k ) {\displaystyle \mathrm {i} ^{(k)}} i ( 1 ) i {\displaystyle \mathrm {i} ^{(1)}\equiv \mathrm {i} } C k ( n ) {\displaystyle {\mathcal {C}}_{k}^{(n)}} k {\displaystyle k} n {\displaystyle n} C 0 ( n ) {\displaystyle {\mathcal {C}}_{0}^{(n)}} C n 2 1 ( n ) {\displaystyle {\mathcal {C}}_{n^{2}-1}^{(n)}} 2 f ( x , y ) x y C 3 ( 2 ) ( f ( x + i ( 1 ) h , y + i ( 2 ) h ) ) h 2 {\displaystyle {\frac {\partial ^{2}f(x,y)}{\partial x\,\partial y}}\approx {\frac {{\mathcal {C}}_{3}^{(2)}(f(x+\mathrm {i} ^{(1)}h,y+\mathrm {i} ^{(2)}h))}{h^{2}}}}

Está disponible una implementación en C++ de aritmética multicompleja. [18]

En general, las derivadas de cualquier orden se pueden calcular utilizando la fórmula integral de Cauchy : [19] donde la integración se realiza numéricamente . f ( n ) ( a ) = n ! 2 π i γ f ( z ) ( z a ) n + 1 d z , {\displaystyle f^{(n)}(a)={\frac {n!}{2\pi i}}\oint _{\gamma }{\frac {f(z)}{(z-a)^{n+1}}}\,\mathrm {d} z,}

El uso de variables complejas para la diferenciación numérica fue iniciado por Lyness y Moler en 1967. [20] Su algoritmo es aplicable a derivadas de orden superior.

Abate y Dubner desarrollaron un método basado en la inversión numérica de una transformada de Laplace compleja. [21] Fornberg desarrolló un algoritmo que se puede utilizar sin necesidad de tener conocimientos sobre el método o el carácter de la función. [4]

Cuadratura diferencial

La cuadratura diferencial es la aproximación de las derivadas mediante el uso de sumas ponderadas de los valores de una función. [22] [23] La cuadratura diferencial es de interés práctico porque permite calcular derivadas a partir de datos ruidosos. El nombre es análogo a la cuadratura , que significa integración numérica , donde las sumas ponderadas se utilizan en métodos como el método de Simpson o la regla trapezoidal . Existen varios métodos para determinar los coeficientes de peso, por ejemplo, el filtro Savitzky-Golay . La cuadratura diferencial se utiliza para resolver ecuaciones diferenciales parciales . Existen otros métodos para calcular derivadas a partir de datos ruidosos. [24]

Véase también

Referencias

  1. ^ Richard L. Burden, J. Douglas Faires (2000), Análisis numérico , (7.ª edición), Brooks/Cole. ISBN  0-534-38216-9 .
  2. ^ Katherine Klippert Merseth (2003). Ventanas a la enseñanza de las matemáticas: casos de aulas de enseñanza media y secundaria . Teachers College Press. pág. 34. ISBN 978-0-8077-4279-2.
  3. ^ Tamara Lefcourt Ruby; James Sellers; Lisa Korf; Jeremy Van Horn; Mike Munn (2014). Kaplan AP Calculus AB & BC 2015. Kaplan Publishing. pág. 299. ISBN 978-1-61865-686-5.
  4. ^ ab Diferenciación numérica de funciones analíticas, B Fornberg – ACM Transactions on Mathematical Software (TOMS), 1981.
  5. ^ ab Uso de variables complejas para estimar derivadas de funciones reales, W. Squire, G. Trapp – SIAM REVIEW, 1998.
  6. ^ ab Martins, Joaquim RRA; Ning, Andrew (1 de octubre de 2021). Optimización del diseño de ingeniería (PDF) . Cambridge University Press. ISBN 978-1108833417.
  7. ^ Sauer, Timothy (2012). Análisis numérico . Pearson. pág. 248.
  8. ^ Siguiendo recetas numéricas en C , Capítulo 5.7.
  9. ^ pág. 263.
  10. ^ Abramowitz y Stegun, Tabla 25.2.
  11. ^ Shilov, George. Análisis real y complejo elemental .
  12. ^ Martins, JRRA; Sturdza, P.; Alonso, JJ (2003). "La aproximación de la derivada de pasos complejos". ACM Transactions on Mathematical Software . 29 (3): 245–262. CiteSeerX 10.1.1.141.8002 . doi :10.1145/838250.838251. S2CID  7022422. 
  13. ^ Diferenciación sin diferencia por Nicholas Higham
  14. ^ Artículo del blog de MathWorks , publicado por Cleve Moler
  15. ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 9 de enero de 2014. Consultado el 24 de noviembre de 2012 .{{cite web}}: CS1 maint: archived copy as title (link)
  16. ^ Lantoine, G.; Russell, RP; Dargent, Th. (2012). "Uso de variables multicomplejas para el cálculo automático de derivadas de orden superior". ACM Trans. Software de matemáticas . 38 (3): 1–21. doi :10.1145/2168773.2168774. S2CID  16253562.
  17. ^ Verheyleweghen, A. (2014). "Cálculo de derivadas de orden superior utilizando el método de pasos multicomplejos" (PDF) .
  18. ^ Bell, IH (2019). «mcx (biblioteca de álgebra multicompleja)». GitHub .
  19. ^ Ablowitz, MJ, Fokas, AS, (2003). Variables complejas: introducción y aplicaciones. Cambridge University Press . Comprobación del teorema 2.6.2
  20. ^ Lyness, JN; Moler, CB (1967). "Diferenciación numérica de funciones analíticas". SIAM J. Numer. Anal . 4 (2): 202–210. Bibcode :1967SJNA....4..202L. doi :10.1137/0704019.
  21. ^ Abate, J; Dubner, H (marzo de 1968). "Un nuevo método para generar expansiones de funciones en series de potencias". SIAM J. Numer. Anal . 5 (1): 102–112. Bibcode :1968SJNA....5..102A. doi :10.1137/0705008.
  22. ^ Cuadratura diferencial y su aplicación en ingeniería: Aplicaciones de ingeniería, Chang Shu, Springer, 2000, ISBN 978-1-85233-209-9 . 
  23. ^ Métodos avanzados de cuadratura diferencial, Yingyan Zhang, CRC Press, 2009, ISBN 978-1-4200-8248-7 . 
  24. ^ Ahnert, Karsten; Abel, Markus (2007). "Diferenciación numérica de datos experimentales: métodos locales versus globales". Computer Physics Communications . 177 (10): 764–774. Bibcode :2007CoPhC.177..764A. CiteSeerX 10.1.1.752.3843 . doi :10.1016/j.cpc.2007.03.009. ISSN  0010-4655. S2CID  15129086. 
  • Diferenciación numérica de wolfram.com
  • Rutinas de diferenciación numérica de la biblioteca NAG
  • Impulso. Diferenciación numérica matemática, incluidas las diferencias finitas y la derivada escalonada compleja.
  • Diferenciación sin (ninguna) diferencia por Nicholas Higham , SIAM News.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Numerical_differentiation&oldid=1231138833"