Nossa Senhora das Graças “Ó Maria concebida sem pecado, rogai por nós que recorremos a vós”
Criação de listas - moodle-arquivo.ciencias.ulisboa.pt · é uma recta, logo o declive (primeira...
Transcript of Criação de listas - moodle-arquivo.ciencias.ulisboa.pt · é uma recta, logo o declive (primeira...
Diferenciação numérica
Comecemos pela definição de
diferenciação, recorrendo à diferença:
fazendo o incremento tender para zero
obtem-se a derivada:
2013/05/16 MN 1
y
x
f xi x f xi x
dy
dx lim
x0
f xi x f xi x
Diferenciação numérica
A primeira derivada corresponde portanto
ao declive da tangente à curva f(x) num
ponto.
Se a função for linear, a sua representação
é uma recta, logo o declive (primeira
derivada) é constante.
2013/05/16 MN 3
Diferenciação numérica
A segunda derivada obtém-se derivando a
primeira derivada e traduz a maneira
como o declive da curva inicial varia.
Podemos fazer derivações sucessivas
para calcular as derivadas de ordens cada
vez mais elevadas, se existirem.
2013/05/16 MN 4
Diferenciação numérica
Em métodos numéricos não podemos usar
métodos analíticos de derivação, pelo que
se empregam fórmulas aproximadas que
se fundamentam na definição de derivada.
Temos três espécies de fórmulas:
Diferenças à direita (forward)
Diferenças à esquerda (backward)
Diferenças centradas
2013/05/16 MN 5
Diferenciação numérica
Para cada caso aparecem duas expressões,
que resultam da inclusão de menos e
mais termos da expansão em série de
Taylor, como por exemplo:
2013/05/16 MN 9
)()()(
)('
superiores e ordem 2ª de termosos s truncarmose
)(!2
)('')()()('
dá que ...)(''!2
1)(')()(
1
21
2
1
hOh
xfxfxf
hOhxf
h
xfxfxf
hxfhxfxfxf
iii
iiii
iiii
Diferenciação numérica
Resolvendo em ordem a f’’
temos então uma melhoria na precisão.
2013/05/16 MN 10
)(2
)(3)(4)(')('
)(2
)()(2)()()()('
dosubstituin
)()()(2)(
)(''
212
2
2
121
2
12
hOh
xfxfxfxf
hOhh
xfxfxf
h
xfxfxf
hOh
xfxfxfxf
iiii
iiiiii
iiii
Diferenciação numérica
Exemplo
2013/05/16 MN 11
9125,0)5,0('
2,125,05,015,01,0)( 234
f
xxxxxf
Esquerda Centrada Direita
Valor estimado -0,714 -0,934 -1,155
Erro 21,7% -2,4% -26,5%
O(h2)
25,0
5,0
h
x
Diferenciação numérica
Para as expressões de maior precisão
2013/05/16 MN 12
2,0)(1
6363281,0)(75,0
925,0)(5,0
1035156,1)(25,0
2,1)(0
22
11
11
22
ii
ii
ii
ii
ii
xfx
xfx
xfx
xfx
xfx
Esquerda Centrada Direita
Valor estimado -0,878125 -0,9125 -0,859375
Erro 3,77% 0% 5,82%
Diferenciação numérica
Para as expressões de maior precisão
2013/05/16 MN 13
2,0)(1
6363281,0)(75,0
925,0)(5,0
1035156,1)(25,0
2,1)(0
22
11
11
22
ii
ii
ii
ii
ii
xfx
xfx
xfx
xfx
xfx
Esquerda Centrada Direita
Valor estimado -0,878125 -0,9125 -0,859375
Erro 3,77% 0% 5,82%
Diferenciação numérica
Para aumentar a precisão recorremos a dois
processos
1 aumentar a ordem da aproximação
2 diminuir o intervalo
Podemos recorrer a um procedimento
baseado na extrapolação de Richardson:
2013/05/16 MN 14
2/ se )(3
1)(
3
41212 hhhIhII
Diferenciação numérica
Escrevendo a mesma expressão para
derivadas:
2013/05/16 MN 15
D 4
3D(h2 )
1
3D(h1)
D 16
15D(h2 )
1
15D(h1)
D 64
63D(h2 )
1
63D(h1)
)()( 42 hOhO
)()( 64 hOhO
)()( 86 hOhO
Diferenciação numérica
Até agora todos os métodos referidos
implicam o cálculo da função dada em
pontos igualmente espaçados. Se, pelo
contrário, os pontos não estão igualmente
espaçados, nomeadamente se provêm de
uma experiência, temos de contornar este
problema. Em geral, se a função
representativa dos dados é desconhecida,
ajusta-se um polinómio.
2013/05/16 MN 16
Diferenciação numérica
O ajuste do polinómio pode ser feito pelo
método de Lagrange, sendo
seguidamente derivado.
2013/05/16 MN 17
f x f x0 2x x1 x2
x0 x1 x0 x2 f x1
2x x0 x2
x1 x0 x1 x2 f x2
2x x0 x1
x2 x0 x2 x1
Diferenciação numérica
Se os pontos experimentais contem erros, a
diferenciação amplifica-os.
Muitas vezes ajusta-se
uma função suave antes
de aplicar a derivação.
2013/05/16 MN 18
Diferenciação numérica com M/O
diff
Esta instrução calcula as diferenças entre n
elementos de um vector >> a=[0 1 3 7 10 11]
a =
0 1 3 7 10 11
>> b=diff(a)
b =
1 2 4 3 1
2013/05/16 MN 19
Diferenciação numérica com M/O
Exemplo
Vamos aplicar a função diff entre 0 e 0,8
para calcular numericamente a derivada e
comparar com a analítica.
2013/05/16 MN 20
5432 400900675200252,0)( xxxxxxf
432 20003600202540025)(' xxxxxf
Diferenciação numérica com M/O
f=@(x) 0.2+25*x-200*x.^2+675*x.^3-900*x.^4+400*x.^5;
x=0:0.1:0.8;
diff(x);
y=f(x);
d=diff(y)./diff(x);
n=length(x);
xm=(x(1:n-1)+x(2:n))./2;
xm=(x(1:n-1)+x(2:n))./2;
xa=0:.01:.8;
ya=25-400*xa+3*675*xa.^2-4*900*xa.^3+5*400*xa.^4;
plot(xm,d,'o',xa,ya)
2013/05/16 MN 21
Diferenciação numérica com M/O
2013/05/16 MN 22
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8-25
-20
-15
-10
-5
0
5
10
15
20
25
Diferenciação numérica com M/O
A função
gradient(f)
gradient(f,h)
calcula as diferenças centradas, excepto
para os dois primeiros e dois últimos
valores. Se os intervalos forem todos
iguais divide pela amplitude do intervalo e
o resultado já é constituído pelas
derivadas. 2013/05/16 MN 23
Diferenciação numérica com M/O
f=@(x) 0.2+25*x-200*x.^2+675*x.^3-900*x.^4+400*x.^5;
x=0:0.1:0.8;
y=f(x);
dy=gradient(y,0.1);
xa=0:0.01:0.8;
ya=25-400*xa+3*675*xa.^2-4*900*xa.^3+5*400*xa.^4;
plot(x,dy,'o',xa,ya)
2013/05/16 MN 24
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8-25
-20
-15
-10
-5
0
5
10
15
20
25
Visualização de campos
Consideremos uma função de duas
variáveis
que pode ser uma representação da
elevação em função de duas
coordenadas.
Neste caso as derivadas parciais
representam o declive segundo uma
direcção e o gradiente: 2013/05/16 MN 25
),( yxfz
Visualização de campos
traduz a direcção do declive máximo.
A magnitude é
e a direcção
2013/05/16 MN 26
jy
fi
x
ff
22
y
f
x
ff
directo sentido no medido x dos eixo o com ângulo
1
/
/tan
xf
yf
Visualização de campos
Se construirmos uma grelha de pontos e
desenharmos o vector gradiente em cada
ponto temos um campo vectorial da
direcção de maior declive do campo
original. Esta tarefa pode ser realizada
com a função
quiver(x,y,u,v)
em que x e y são as coordenadas e u e
v contêm as derivadas parciais
2013/05/16 MN 27
Visualização de campos
Consideremos a função
e vamos representar o campo e o gradiente
2013/05/16 MN 28
22 22),( yxyxxyyxf
Visualização de campos
clear all
close all
f=@(x,y) y-x-2*x.^2-2.*x.*y-y.^2;
[x,y]=meshgrid(-2:.25:0,1:.25:3); % criação de grelha
z=f(x,y);
[fx,fy]=gradient(z,0.25);
cs=contour(x,y,z);
clabel(cs);
hold on
quiver(x,y,-fx,-fy);
hold off
2013/05/16 MN 29