Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TEMA 5
Derivación e integración numéricas
En este tema vamos a tratar de estimar la derivada o la integral de una función en un punto o intervalo, de
forma numérica, bien porque la función sea muy complicada para hacerlo de forma analítica o porque sólo
dispongamos de una tabla de datos de esa función, con la que tengamos que trabajar para obtener su derivada o
integral.
5.1.1 Introducción
Dados k ≥ 1 y α, vamos a tratar de aproximar o calcular f (k) (α), de forma que tienda a un sólo número,
utilizando fórmulas lineales del tipo
n
X
Ai f (xi ) ≃ f (k) (α)
i=0
Donde xi , i = 0 : n son los puntos donde se evalúa f y A i los coeficientes que nos encontraremos en la fórmula
de derivación numérica.
Tenemos varias opciones a la hora de elegir un método para resolver el problema:
(k)
Con Ai = li (α), si usamos la interpolación de Lagrange.
2. Método de los coeficientes indeterminados: imponiendo que la fórmula sea exacta para x j con j = 0 : l,
siendo l el grado más alto posible. De esta forma, se obtiene el siguiente sistema:
n
Ai xji
X
Dk xj = j = 0, 1, 2, . . .
x=α
i=0
0 j ≤k−1
=k
n
k! j
(k+1)!
Ai xji = =k+1
X
1! α j (5.2)
(k+2)! 2
2! α j =k+2
i=0
... ..
.
El sistema es lineal en los Ai si los xi están fijados, no lineal en otro caso.
3. Desarrollo de Taylor:
n n m
X X X f (j) (α) f (m+1)
(c)
f (k) (α) ≃ Ai f (xi ) = Ai (xi − α)j + (xi + α)m+1
j! (m + 1)!
i=0 i=0 j=0
m n n
!
X 1 X X f (m+1) (c)
= f (j)
(α) Ai (xi − α)j + (xi − α)m+1
j! (m + 1)!
j=0 i=0 i=0
Con m hasta donde se pueda llegar, lo suficientemente grande. Este método no se usa normalmente.
La derivación es una operación local, por lo que interesa elegir los puntos x i próximos al punto donde se quiere
obtener la derivada.
Una fórmula se dice de grado de exactitud q si q es el menor entero positivo para el que la fórmula es exacta
para todo polinomio de grado no mayor que q y no exacta para algún polinomio de grado q + 1.
X n
Teorema 5.1. Si f es continuamente diferenciable hasta el orden necesario, una fórmula Ai f (xi ) se dice
i=0
que es interpolatoria si y sólo si su grado de exactitud es mayor o igual que n.
Una fórmula interpolatoria tiene grado de exactitud mayor o igual que n.
Ejemplo 5.1:
Deducir una fórmula que estime la derivada segunda de una función como
A0 f (α − h) + A1 f (α) + A2 f (α + h)
f (x) = 1 → 0 = A0 + A1 + A2
f (x) = x → 0 = A0 (α − h) + A1 α + A2 (α + h)
Montamos el sistema:
1 1 1 0
α−h α α+h 0
2 2
(α − h) α2 (α + h) 2
1 1 1 0
0 h 2h 0
0 0 2h2 2
1
A0 = h2
A1 = − h22 A2 = 1
h2
Y la fórmula queda:
′′ f (α − h) − 2f (α) + f (α + h)
f (α) =
h2
Ejemplo 5.2:
Dada la siguiente tabla de valores
Que corresponde a la corriente medida que circula por un circuito RL, con valores R = 0.142Ω
y L = 0.98H. Para calcular la tensión impuesta al circuito en función de esa corriente, con la
primera Ley de Kirchhoff se obtiene
E = LI ′ + RI
t está dado en segundos y I en amperios. Se nos pide estimar E en el instante de tiempo 1.02.
Usando la fórmula centrada para ti = 1.02, estimamos la derivada de la corriente
Para fórmulas interpolatorias podemos estimar el error de discretización E d ya que se dispone del error de
interpolación
f (n+1) (ξ (x))
En (x) = (x − x0 ) (x − x1 ) · · · (x − xn )
(n + 1)!
Y entonces se puede estimar el error de discretización como
Ed = En(k) (α)
Si la fórmula de derivación se ha obtenido con las condiciones de exactitud, el error de discretización se puede
deducir como
f (q+1) (ξ)
Ed = C
(q + 1)!
Y en esta expresión se aprecia la conveniencia de que los puntos x i que usemos para obtener la fórmula de
derivación estén próximos al deseado, α.
En la tabla (5.1) vemos algunas de las fórmulas de derivación numérica más usuales, para las derivadas de
orden 1, 2 y 3. El punto c es interior al intervalo de evaluación de la función en cada una de las fórmulas (por
ejemplo, [α, α + 2h] en la fórmula progresiva de 3 puntos).
Estas fórmulas de derivación son todas interpolatorias. Es más recomendable saber deducirlas que sabérselas
de memoria.
Estas fórmulas de derivación son inestables, debido a los errores de discretizacion (E d ) y a los que se producen
al evaluar f (xi ) (εi ).
n
f (xi ) = fˆi + εi →
X
Ai εi = Er
i=0
f (α+h)−f (α)
f ′ (α) = h − h2 f (2) (c)
Por tanto, para un h demasiado pequeño se pueden obtener resultados muy malos.
Para obtener un valor de h óptimo, hay que minimizar |E r | + |Ed | o |Er | = |Ed | (dos criterios). En general, lo
segundo no da el mismo punto que lo primero, pero es más fácil de resolver, y la diferencia no es demasiado
grande.
Una problemática de la derivación numérica es que no existen fórmulas de derivación estables.
Vamos a ver en este apartado los códigos fuente en Matlab para realizar algunos de los métodos vistos de
derivación numérica, para calcular las derivadas primeras, segundas y terceras en un punto α.
Algoritmo 5.1: Fórmula dos puntos para obtener la derivada primera en un punto
% Formula de derivacion de dos puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=deriv2p(funcion,alfa,h)
function [fp]=deriv2p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(feval(f,alfa+h)-feval(f,alfa))/h;
Algoritmo 5.2: Fórmula progresiva tres puntos para obtener la derivada primera en un punto
% Formula de derivacion progresiva de tres puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=derivp3p(funcion,alfa,h)
function [fp]=derivp3p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(-3*feval(f,alfa)+4*feval(f,alfa+h)-feval(f,alfa+2*h))/(2*h);
Algoritmo 5.3: Fórmula regresiva tres puntos para obtener la derivada primera en un punto
% Formula de derivacion regresiva de tres puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=derivr3p(funcion,alfa,h)
function [fp]=derivr3p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(feval(f,alfa-2*h)-4*feval(f,alfa-h)+3*feval(f,alfa))/(2*h);
Algoritmo 5.4: Fórmula progresiva cinco puntos para obtener la derivada primera en un
punto
% Formula de derivacion progresiva de cinco puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=derivp5p(funcion,alfa,h)
function [fp]=derivp5p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(-25*feval(f,alfa)+48*feval(f,alfa+h)-36*feval(f,alfa+2*h)
+16*feval(f,alfa+3*h)-3*feval(f,alfa+4*h))/(12*h);
Algoritmo 5.5: Fórmula centrada dos puntos para obtener la derivada primera en un punto
% Formula de derivacion centrada de dos puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=dercen2p(funcion,alfa,h)
function [fp]=dercen2p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(-feval(f,alfa-h)+feval(f,alfa+h))/(2*h);
Algoritmo 5.6: Fórmula centrada cinco puntos para obtener la primera derivada en un punto
% Formula de derivacion centrada de cinco puntos
% Aproxima la derivada primera de la funcion en un punto
% Uso: sol=dercen5p(funcion,alfa,h)
function [fp]=dercen5p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(feval(f,alfa-2*h)-8*feval(f,alfa-h)+8*feval(f,alfa+h)
-feval(f,alfa+2*h))/(12*h);
Algoritmo 5.7: Fórmula centrada tres puntos para obtener la derivada segunda en un punto
Algoritmo 5.8: Fórmula progresiva tres puntos para obtener la derivada segunda en un punto
% Formula de derivacion progresiva de tres puntos
% Aproxima la derivada segunda de la funcion en un punto
% Uso: sol=der2p3p(funcion,alfa,h)
function [fp]=der2p3p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.01;
end;
end;
fp=(feval(f,alfa)-2*feval(f,alfa+h)+feval(f,alfa+2*h))/h^2;
Algoritmo 5.9: Fórmula centrada cinco puntos para obtener la derivada segunda en un punto
% Formula de derivacion centrada de cinco puntos
% Aproxima la derivada segunda de la funcion en un punto
% Uso: sol=der2c5p(funcion,alfa,h)
function [fp]=der2c5p(f,alfa,h)
if nargin<2
disp(’Error: faltan argumentos de entrada’);
return;
else
if nargin<3
h=0.5;
end;
end;
fp=(-feval(f,alfa-2*h)+16*feval(f,alfa-h)-30*feval(f,alfa)
+16*feval(f,alfa+h)-feval(f,alfa+2*h))/(12*h^2);