Exercicio práctico de derivación numérica (previo)

En Matlab/Octave non existe un comando para calcular a derivada numérica. Porén é moi doado construir un ficheiro función que o faga por nós:

function d = dn(x,y)
%% Derivada numérica con fórmulas de tres puntos (equiespaciados)
d = zeros(size(y));
d(1) = (-y(3)+4*y(2)-3*y(1))/(x(3)-x(1));
d(2:end-1) = (y(3:end)-y(1:end-2))./(x(3:end)-x(1:end-2));
d(end) = (3*y(end)-4*y(end-1)+y(end-2))/(x(end)-x(end-2));

Obsérvese que a fórmula centrada non se pode usar no primeiro e último punto. Para aproximar a derivada neles usamos as fórmulas cara adiante e cara atrás. Ademáis, a orde de erro é O(h²) en todas elas, para obter unha aproximación da mesma precisión en tódolos puntos.
Agora, podemos aproximar o valor da derivada dunha función, por exemplo, do seno no intervalo [0, π/4]:

>> h = 0.01; x = 0:h:pi/4; d = dn(x,sin(x));

Se representamos a derivada exacta do seno xunto coa aproximación, veremos a súa similitude:

>> plot(x,cos(x), x,d,'o')
>> legend('cos(x)', dn(x, sin(x))')

dn
Se calculamos o erro máximo, vermos que é pequeno:

>> max(d-cos(x))
ans =

3.3332e-05

E como as fórmulas son da orde O(h²), ao reducir o paso por 10, o erro máximo redúcese por cen:

>> h = 0.001; x = 0:h:pi/4; d = dn(x,sin(x)); max(d-cos(x))
ans =

3.3333e-07

Advertisements
Esta entrada foi publicada en Cálculo numérico, Derivación numérica, Matlab/Octave. Ligazón permanente.

Deixar unha resposta

introduce os teu datos ou preme nunha das iconas:

Logotipo de WordPress.com

Estás a comentar desde a túa conta de WordPress.com. Sair / Cambiar )

Twitter picture

Estás a comentar desde a túa conta de Twitter. Sair / Cambiar )

Facebook photo

Estás a comentar desde a túa conta de Facebook. Sair / Cambiar )

Google+ photo

Estás a comentar desde a túa conta de Google+. Sair / Cambiar )

Conectando a %s