Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Diferenciacion

Numerica

MCI 2022
Ejemplo
Operadores utilizados
2do caso
3er caso
4to caso
4to caso
5to caso
6to caso
7mo caso
Extrapolacion de
Richardson

MCI 2021
Extrapolacion de
Richardson
Dada una funcion, calcular la derivada numerica primera centrada de orden 2 en x=1 tomando h=0.5 y m=4

f(x) = 2x * sin(x)

Para una aproximacion O(h2), estaremos eliminando potencias de h2


Recordar que
Entonces, la derivada primera para los sucesivos pasos “h” decreciente resultan:

realizo el mismo procedimiento para


N1 (h/8)
Obtenemos
Aplicando la expresion
de Richardson
obtengo la columna 2 de la matriz, j = 2
Hasta ahora tenemos

O (h2) O (h4)

N1(h) = 2.1433318

N1 (h/2) = 2.2214067 N2 (h) = 2.2474317

N1 (h/4) = 2.2407143 N2 (h/2) = 2.2471502

N1 (h/8) = 2.2455278 N2 (h/4) = 2.2471323


Para j=3
Hasta ahora tenemos
O (h2) O (h4) O (h6)

N1(h) = 2.1433318

N1(h/2) = 2.2214067 N2(h) = 2.2474317

N1(h/4) = 2.2407143 N2(h/2) = 2.2471502 N3(h) = 2.2471315

N1(h/8) = 2.2455278 N2(h/4) = 2.2471323 N3(h/2) = 2.2471311


Para j=4
Obtenemos
O (h2) O (h4) O (h6) O (h8)

N1(h) = 2.1433318

N1(h/2) = 2.2214067 N2(h) = 2.2474317

N1(h/4) = 2.2407143 N2(h/2) = 2.2471502 N3(h) = 2.2471315

N1(h/8) = 2.2455278 N2(h/4) = 2.2471323 N3(h/2) = 2.2471311 N4(h) = 2.2471311


Codigo Scilab function [y]=f(x)
y=(2^x)*sin(x)
endfunction

function [N]=richardson(x, h, m)
for k= 1:1:m
N(k,1)=(f(x+h)-f(x-h))/(2*h)
h=h/2
end
for j= 2:1:m
for k=j:1:m
N(k,j)= N(k,j-1)+(N(k,j-1) -
N(k-1,j-1))/(4^(j-1)-1)

end
end
endfunction
Codigo Scilab

LLamada desde Scilab


--> richardson(1,0.5,4)

ans =

2.1433318 0. 0. 0.
2.2214067 2.2474317 0. 0.
2.2407143 2.2471502 2.2471315 0.
2.2455278 2.2471323 2.2471311 2.2471311
Codigo Scilab function [y]=f(x)
y=(2^x)*sin(x)

alternativo endfunction

function [R]=richardson2()
x = 1;
h = 0.5;
eps_step = 0.00001;
R(1, 1) = (f(x + h) - f(x - h))/(2*h);
for i=1:100
h = h/2;

R(i + 1, 1) = (f(x + h) - f(x - h))/(2*h);

for j=1:i
R(i + 1, j + 1) = (4^j*R(i + 1, j) - R(i, j))/(4^j - 1);
end

if ( abs( R(i + 1, i + 1) - R(i, i) ) < eps_step )


break;
elseif ( i == 100 )
error( 'La extrapolacion de Richardsonno logro converger' );
end
end

You might also like