30
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 fx i x fx i x dy dx lim x 0 fx i x fx i x

Criação de listas - moodle-arquivo.ciencias.ulisboa.pt · é uma recta, logo o declive (primeira derivada) é constante. 2013/05/16 MN 3 . ... Para aumentar a precisão recorremos

  • Upload
    vuthu

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

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

Representando graficamente temos

2013/05/16 MN 2

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 (direita)

2013/05/16 MN 6

Diferenciação numérica (esquerda)

2013/05/16 MN 7

Diferenciação numérica (centrada)

2013/05/16 MN 8

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

Visualização de campos

2013/05/16 MN 30

-6

-5

-4

-3

-2

-1

-1

0

0

1

-2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 01

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

3