Professional Documents
Culture Documents
Derivación numérica
25
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 26
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 27
h = logspace(0,-14);
fp = (atan(sqrt(2)+h)-atan(sqrt(2)))./h;
error = abs(fp-1/3);
plot(log(h),log(error),’Linewidth’,4););
xlabel(’log(h)’); ylabel(’log(e)’);
−2
−4
−6
−8
−10
log(e)
−12
−14
−16
−18
−20
−22
−35 −30 −25 −20 −15 −10 −5 0
log(h)
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 28
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 29
f (x + h) − f (x)
f ′ (x) = + O(h)
h
−3f (x) + 4f (x + h) − f (x + 2h)
f ′ (x) = + O(h2 )
2h
3f (x) − 4f (x − h) + f (x − 2h)
f ′ (x) = + O(h2 )
2h
f (x − 2h) − 8f (x − h) + 8f (x + h) − f (x + 2h)
f ′ (x) = + O(h4 )
12h
−25f (x) + 48f (x + h) − 36f (x + 2h) + 16f (x + 3h) − 3f (x + 4h)
f ′ (x) = + O(h4 )
12h
function df=dc(f,x)
%
% df=dc(f,x) Calcula la derivada de la funcion f en los puntos de x
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 30
%
% Variables de entrada
% f: Valores de la funcion que se desea derivar
% x: Puntos donde se desea obtener la derivada
%
% Variables de salida:
% df: vector con las derivadas en cada punto
%
M = length(x); df=zeros(1,M);
h=x(2)-x(1); ih=1/(2*h);
df(1)=(-f(3)+4*f(2)-3*f(1))*ih;
for i=2:M-1
df(i)=(f(i+1)-f(i-1))*ih;
end
df(M)=(f(M-2)-4*f(M-1)+3*f(M))*ih;
h2 ′′ h3 h4
f (x + h) = f (x) + hf ′ (x) + f (x) + f ′′′ (x) + f (4) (z1 )
2! 3! 4!
h 2 h3 h4
f (x − h) = f (x) − +hf ′ (x) + f ′′ (x) − + f ′′′ (x) + f (4) (z2 )
2! 3! 4!
Sumando las ecuaciones anteriores y despejando se encuentra que:
f (x + h) − 2f (x) + f (x − h) h2 (4)
f ′′ (x) = − f (z)
h2 12
Procediendo de la misma forma es posible encontrar aproximaciones que usen diferentes
puntos y aproximaciones para derivadas de orden superior. La tabla siguiente presenta
algunas de las fórmulas más comunes para calcular derivadas de orden superior.
f2 − 2f1 + f0
f ′′ (x0 ) = + O(h)
h2
f1 − 2f0 + f−1
f ′′ (x0 ) = + O(h2 )
h2
−f3 + 4f2 − 5f1 + 2f0
f ′′ (x0 ) = + O(h2 )
h2
−f2 + 16f1 − 30f0 + 16f−1 − f−2
f ′′ (x0 ) = + O(h4 )
12h2
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 31
f3 − 3f2 + 3f1 − f0
f (iii) (x0 ) = + O(h)
h3
f2 − 2f1 + 2f−1 − f−2
f (iii) (x0 ) = + O(h2 )
2h3
f−3 − 8f−2 + 13f−1 − 13f1 + 8f2 − f3
f (iii) (x0 ) = + O(h4 )
8h3
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 32
Ejercicios resueltos
2.1 Considera una función f (x) suficientemente diferenciable de la cual conocemos sus
valores en los puntos x0 , x2 = x0 + 2h, x3 = x0 + 3h. Construye una fórmula de
diferencias finitas que aproxime los valores de f ′′ (x2 ) e indica el orden de error de
la misma.
y entonces
2.2 Considera una función f (x) suficientemente diferenciable de la cual conocemos sus
valores en los puntos x0 , x1 = x0 + h, x3 = x0 + 3h. Construye, cuando sea posible
fórmulas que aproximen los valores de las derivadas f ′ (x3 ) y f ′′ (x3 ) utilizando
todos los puntos proporcionados e indica el orden de error de las mismas.
(2h)2 ′′
f (x1 ) = f (x3 − 2h) = f (x3 ) − 2hf ′ (x3 ) + f (x3 ) + O(h3 )
2
(3h)2 ′′
f (x0 ) = f (x3 − 3h) = f (x3 ) − 3hf ′ (x3 ) + f (x3 ) + O(h3 )
2
Obviamente, cualquiera de ellas nos proporciona una aproximación a la derivada
f ′ (x3 ) sin más que despejar, por ejemplo, de la primera obtenemos
f (x3 ) − f (x1 )
f ′ (x3 ) = + O(h)
2h
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 33
y de aquı́
−3f (x1 ) + 2f (x0 ) + f (x3 )
f ′′ (x3 ) = + O(h)
3h2
2.3 Dada una función de la que se conocen sus valores en los nodos x0 = 0, x1 = h,
x3 = 3h y x5 = 5h, razona de qué orden será la fórmula de diferencias más precisa
posible que aproxime el valor de f ′ (x2 ) utilizando esta información.
Ejercicios propuestos
2.4 Escribir una función MATLAB df(x) que admita como entradas una vector de
puntos x y los valores de una función f en los mismos y que calcule el valor de la
derivada primera en los mismos utilizando la fórmula de diferencia adelantada.
Para calcular el valor en el extremo superior debe usarse la fórmula de diferencia
retrasada.
2.5 Aplicar la fórmula de dos puntos adelantada al cálculo de la derivada primera
de f (x) = sen x en x = 2.13432. Comprobar que al ir reduciendo h el error se
reduce de manera aproximadamente lineal con h.
2.6 Repetir el ejercicio anterior comparando la precisión de la fórmula de diferencia
adelantada con la retrasada. Aplicar también ambas fórmulas al cálculo de la
derivada de la función g(x) = 1/(1 + ex ) en x = 1/2.
2.7 Supongamos que se conoce el valor de la derivada mediante la fórmula de dife-
rencia adelantada para tres valores de h diferentes. ¿Es posible estimar el valor
del h óptimo? ¿Es posible estimar el error que se comete en el cálculo en cada
uno de los casos?. Aplicarlo al cálculo de la derivada de la función f (x) = sen x
en x = 0.6 usando h = 0.1, h = 0.01 y h = 0.0000000001.
2.8 Calcular la derivada de la función f (x) = tan x en x = 3.141 usando h = 0.1 y
h = 0.01. Comparar el resultado con el valor exacto. ¿Es buena la aproximación?
¿Por qué?.
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Derivación numérica 34
2.9 Calcular cotas para el error de truncación que se comete al aproximar las deriva-
das de las funciones f (x) = 1/(1 + sen x) y g(x) = log(1 + 2x). Comprobar que
los errores reales están por debajo de lo permitido por la cota.
2.10 Construir una tabla de derivadas primeras de la función g(x) definida por la
siguiente tabla en los puntos xj con la mayor precisión posible mediante fórmulas
de tres puntos.
x g(x)
1.0 1.000000
1.2 0.997502
1.4 0.990025
1.8 0.960398
2.0 0.940678
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html