⚙️ Módulo 4: Derivación Numérica #
⚡ Derivación Numérica: Análisis de Cambio y Movimiento #
La Derivación Numérica se enfoca en aproximar la derivada de una función, \(f'(x)\), utilizando valores discretos. Es fundamental cuando la función es demasiado compleja para derivar analíticamente o, más comúnmente en ingeniería, cuando solo se dispone de datos experimentales discretos.
Esta técnica es la base del análisis de la cinemática (movimiento):
$$\text{Velocidad} = \frac{d(\text{Posición})}{dt} \quad \text{Aceleración} = \frac{d(\text{Velocidad})}{dt}$$Fundamento Teórico: El Equilibrio de Errores #
La aproximación numérica de la derivada se basa en truncar la Serie de Taylor. Al usar un tamaño de paso finito (\(h\)), introducimos dos errores opuestos:
- Error de Truncamiento (\(O(h^n)\)): Disminuye a medida que \(h\) disminuye.
- Error de Redondeo: Aumenta cuando \(h\) es extremadamente pequeño debido a la cancelación catastrófica al restar valores casi idénticos en la precisión finita de la computadora.
El objetivo es encontrar el valor óptimo de \(h\) que minimiza la suma de estos dos errores.
📐 Fórmulas Fundamentales Unidimensionales (1D) #
Los métodos de diferencia más comunes se derivan de la Serie de Taylor. Asumimos datos equiespaciados con un paso \(h\).
| Nombre | Fórmula | Orden de Error |
|---|---|---|
| Diferencia Adelantada | \(f'(x_i) \approx \frac{f(x_{i+1}) - f(x_i)}{h}\) | \(O(h)\) |
| Diferencia Retrasada | \(f'(x_i) \approx \frac{f(x_i) - f(x_{i-1})}{h}\) | \(O(h)\) |
| Diferencia Centrada | \(\mathbf{f'(x_i) \approx \frac{f(x_{i+1}) - f(x_{i-1})}{2h}}\) | \(\mathbf{O(h^2)}\) |
La Diferencia Centrada es la fórmula más precisa para la mayoría de los puntos de datos.
Derivadas de Segundo Orden #
La segunda derivada (\(f''(x)\)) se utiliza para la aceleración y el análisis de concavidad:
$$\mathbf{f''(x_i) \approx \frac{f(x_{i+1}) - 2f(x_i) + f(x_{i-1})}{h^2}}$$🌐 Derivación de Funciones de Múltiples Variables #
Cuando la función depende de varias variables, \(f(\mathbf{x}) = f(x_1, x_2, \dots, x_n)\), la derivada se generaliza al concepto de Derivada Parcial.
1. Derivada Parcial y Gradiente #
La derivada parcial \(\frac{\partial f}{\partial x_k}\) mide el cambio de \(f\) solo con respecto a \(x_k\), manteniendo las otras variables constantes.
Numéricamente, se aplica la fórmula de diferencia (centrada) exclusivamente a la variable de interés:
$$\mathbf{\frac{\partial f}{\partial x_k}(\mathbf{x}) \approx \frac{f(\mathbf{x} + h\mathbf{e}_k) - f(\mathbf{x} - h\mathbf{e}_k)}{2h}}$$Donde \(\mathbf{e}_k\) es el vector unitario en la dirección de \(x_k\).
El Gradiente (\(\nabla f\)) es el vector que contiene todas las derivadas parciales. Es esencial para la optimización, ya que indica la dirección de máximo crecimiento de la función.
$$\mathbf{\nabla f(\mathbf{x})} = \begin{pmatrix} \partial f / \partial x_1 \\ \partial f / \partial x_2 \\ \vdots \\ \partial f / \partial x_n \end{pmatrix}$$2. Derivadas de Segundo Orden Cruzadas (Matriz Hessiana) #
La Matriz Hessiana (\(\mathbf{H}\)) es una matriz cuadrada de segundas derivadas parciales, crucial en la optimización para verificar si un punto crítico es un máximo, mínimo o punto de silla.
$$\mathbf{H} = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots \\ \vdots & \vdots & \ddots \end{pmatrix}$$💻 Herramientas de Python: NumPy y SciPy
#
1. numpy.gradient (Ideal para Datos Discretos)
#
Calcula la derivada de datos discretos o arrays multidimensionales. Utiliza por defecto la diferencia centrada para puntos interiores y las fórmulas asimétricas para los extremos.
import numpy as np
# Ejemplo 1D: Posición P(t) y Tiempo t
t = np.array([1.0, 1.5, 2.0, 2.5, 3.0])
P = np.array([5.0, 7.5, 10.2, 13.1, 16.2])
# h = 0.5 (paso constante)
V = np.gradient(P, 0.5)
A = np.gradient(V, 0.5)
print("--- Cálculo de Cinemática con NumPy ---")
print(f"Velocidad (V): {V}")
2. scipy.misc.derivative (Para Funciones Analíticas)
#
Aproxima la derivada de orden \(n\) de una función explícita en un punto dado (\(x_0\)).
from scipy.misc import derivative
# Función analítica f(x) = x^3 - 2x
def funcion_analitica(x):
return x**3 - 2*x
# Calcular la derivada de primer orden en x=2.0
derivada_primera = derivative(funcion_analitica, x0=2.0, dx=1e-6, n=1)
print("\n--- Derivación de Función Analítica con SciPy ---")
print(f"f'(2.0) (Primer Orden): {derivada_primera:.6f}")
🌍 Casos Aplicados en Ingeniería (Ejemplo de Gradiente) #
Problema: Calcular el gradiente de la temperatura \(T(x, y) = x^2 y + 2x\) en \(\mathbf{x} = (2, 3)\).
import numpy as np
h = 1e-6 # Paso pequeño para la precisión
# Función de temperatura T(x, y)
def temperatura(x_vec):
x, y = x_vec
return x**2 * y + 2*x
punto = np.array([2.0, 3.0])
# Cálculo de la Derivada Parcial respecto a x (∂T/∂x)
punto_h_x = punto + np.array([h, 0.0])
punto_menos_h_x = punto - np.array([h, 0.0])
dT_dx = (temperatura(punto_h_x) - temperatura(punto_menos_h_x)) / (2 * h)
# Cálculo de la Derivada Parcial respecto a y (∂T/∂y)
punto_h_y = punto + np.array([0.0, h])
punto_menos_h_y = punto - np.array([0.0, h])
dT_dy = (temperatura(punto_h_y) - temperatura(punto_menos_h_y)) / (2 * h)
print("\n--- Cálculo de Gradiente Numérico (Multivariable) ---")
print(f"∂T/∂x: {dT_dx:.6f} (Analítico: 14.0)")
print(f"∂T/∂y: {dT_dy:.6f} (Analítico: 4.0)")
📝 Ejercicios Propuestos #
A. Derivadas de Primer Orden (1D) #
-
Cálculo de la Pendiente Máxima: Para la función \(f(x) = e^{-x} \cos(2x)\), calcula la derivada \(f'(x)\) en \(x=0.5\).
- Implementa la fórmula de Diferencia Centrada con \(h = 0.01\).
-
Velocidad Inicial: Un cohete está en posición \(P(t) = 5t^3 + 2t^2\) metros.
- Utiliza
scipy.misc.derivativepara encontrar la velocidad (\(P'(t)\)) del cohete en \(t = 3.0\) segundos. Usa un paso pequeño \(dx = 1e-4\).
- Utiliza
B. Análisis de Error y Tamaño de Paso (\(h\)) #
-
El Dilema del Paso Óptimo (\(h\)): Para la función \(f(x) = e^x\), la derivada exacta en \(x=1\) es \(e^1 \approx 2.7182818\).
- Escribe un script que use la fórmula de Diferencia Centrada para calcular \(f'(1)\) variando el tamaño de paso \(h\) desde \(10^{-1}\) hasta \(10^{-16}\).
- Grafica el Error Absoluto (\(\text{Error} = |f'_{numérico} - f'_{exacto}|\)) en función de \(h\) en una gráfica log-log. ¿Para qué valor aproximado de \(h\) el error es mínimo?
-
Uso de Fórmulas Asimétricas en Datos Discretos: Un experimento de calentamiento proporciona la siguiente tabla de temperatura \(T\) en función del tiempo \(t\) (paso \(h=10 \text{ s}\)):
Tiempo (\(t\)) [s] Temperatura (\(T(t)\)) [°C] 10 100.0 20 105.5 30 111.3 - a) Diferencia Adelantada: Calcula la tasa de cambio de temperatura \(T'(t)\) en \(t = 10 \text{ s}\) (inicio).
- b) Diferencia Centrada: Calcula \(T'(t)\) en \(t = 20 \text{ s}\).
- c) Diferencia Retrasada: Calcula \(T'(t)\) en \(t = 30 \text{ s}\) (final).
C. Derivación Multivariable y Aplicaciones de Campo #
-
Gradiente de Potencial: La función potencial eléctrico es \(V(x, y) = 5x^3 - 4x y^2 + 10\). El campo eléctrico es \(-\nabla V\).
- Utiliza la aproximación de Diferencia Centrada para calcular el gradiente numérico \(\nabla V = (\partial V/\partial x, \partial V/\partial y)\) en el punto \(\mathbf{x} = (1, 2)\), con \(h = 1e-4\).
-
Tasa de Cambio Máxima (Análisis Termodinámico): La distribución de temperatura de una placa es \(T(x, y) = 20 + x^2 - xy + 3y^2\) (en \({}^\circ \text{C}\)).
- Paso 1: Calcula numéricamente el gradiente \(\nabla T\) en \(\mathbf{P} = (3, 2)\) (Usa \(h=1e-5\)).
- Paso 2: ¿Cuál es la magnitud de la tasa de cambio máxima de temperatura en \(\mathbf{P}\)? (Calcula la norma euclidiana del vector gradiente, \(|\nabla T|\)).
-
Derivada Parcial de Datos Bidimensionales: Tienes una matriz \(3 \times 3\) de elevación \(Z(x, y)\) con espaciamiento \(h_x = 10 \text{ m}\) y \(h_y = 10 \text{ m}\).
Z = np.array([ [100, 105, 110], # y=20 [ 95, 100, 106], # y=10 [ 90, 98, 103] # y=0 ])- Tarea: Utiliza
numpy.gradient(Z, 10, 10)para calcular las derivadas parciales \(\partial Z / \partial x\) y \(\partial Z / \partial y\). - Pregunta: ¿Cuál es el valor de \(\partial Z / \partial x\) en el punto central (índice 1, 1)?
- Tarea: Utiliza
D. Derivadas de Orden Superior #
-
Aceleración y Jerk (Datos Experimentales): Se registra la posición (\(P\)) de una masa en un resorte a intervalos de \(h = 0.1 \text{ s}\).
Tiempo (\(t\)) [s] Posición (\(P(t)\)) [m] 0.0 0.00 0.1 0.05 0.2 0.18 0.3 0.36 0.4 0.55 0.5 0.68 - Utiliza
numpy.gradientrepetidamente para calcular los vectores de Velocidad (\(P'\)), Aceleración (\(P''\)) y Jerk (\(P'''\)). - Pregunta: ¿Cuál es el Jerk en \(t = 0.3 \text{ s}\)?
- Utiliza