Transcript
Page 1: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Aula Expositiva 13

4.4 Algoritmos Numéricos4.4.1 Integração por Trapézios4.4.2 Bisseção4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

DCC 001Programação de Computadores

2º Semestre de 2011Prof. Osvaldo Carvalho

1DCC001 - 2011 - 2

Page 2: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Integração por Trapézios

DCC001 - 2011 - 2 2

Page 3: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Integração Numérica

DCC001 - 2011 - 2 3

a bx1 x2 x3 xn+1xn

Queremos calcular A integral indefinida de é

dificilmente obtida ou não existe O primeiro passo consiste em dividir o

intervalo em n sub-intervalos iguais

dxxfb

a xf

ba,

x

Page 4: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Aproximações por Retângulos

Após a divisão em sub-intervalos, a área embaixo da curva pode ser aproximada por uma soma de retângulos

Temos duas formas de definição de somas: Soma de Riemann pela esquerda Soma de Riemann pela direita

DCC001 - 2011 - 2 4

Page 5: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Área Coberta pela Soma de Riemann pela Esquerda

DCC001 - 2011 - 2 5

O lado esquerdo de cada retângulo

coincide com a curva

xixi+1

Área = f(xi).∆x

Page 6: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Área Coberta pela Soma de Riemann pela Direita

DCC001 - 2011 - 2 6

O lado direito de cada retângulo coincide com a

curva

xi xi+1

Área = f(xi+1).∆x

Page 7: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Somas de Riemman

DCC001 - 2011 - 2 7

O lado direito de cada retângulo coincide com a

curva

O lado esquerdo de cada retângulo

coincide com a curva

Page 8: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Fórmulas para Somas de Riemann

DCC001 - 2011 - 2 8

n

iix

xnxxesq

xf

xfxfxfA

1

21

1

2

132n

iix

xnxxdir

xf

xfxfxfA

Page 9: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Função LeftRiemannSum

DCC001 - 2011 - 2 9

function lrs = LeftRiemannSum(f,a,b,n)// Soma de Riemann esquerda da função// f entre os pontos a e b com n intervalos x = linspace(a,b,n+1); delta_x = (b-a)/n; lrs = sum(f(x(1:n))) * delta_x;endfunction

Page 10: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Função RightRiemannSum

DCC001 - 2011 - 2 10

function rrs = RightRiemannSum(f,a,b,n)// Soma de Riemann direita da função// f entre os pontos a e b com n intervalos x = linspace(a,b,n+1); delta_x = (b-a)/n; rrs = sum(f(x(2:n+1)))* delta_x;endfunction

Page 11: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Somas de Riemann com 16 sub-Intervalos

DCC001 - 2011 - 2 11

Page 12: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Área Coberta pela Soma de Trapézios

DCC001 - 2011 - 2 12

xixi+1

Área do sub-intervalo = ∆x.(f(xi) + f(xi+1))/2

Page 13: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Fórmula para Aproximação por Trapézios

DCC001 - 2011 - 2 13

n

ii

xfxfx

xxfxf

xxfxf

xxfxf

xxfxf

xf

A

n

nnnn

22

2222

11

113221

Page 14: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Função TrapezoidalSum

DCC001 - 2011 - 2 14

function area = TrapezoidalSum(f,a,b,n)// Calcula a área sob a curva f entre a e b, // utilizando n pontos e a fórmula dos // trapézios x = linspace(a,b,n+1); delta_x = (b-a)/n; area = ( (f(x(1))+f(x(n+1)))/2 + ... sum(f(x(2:n))) ... )*delta_x;endfunction

Page 15: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Comparação de Convergência

DCC001 - 2011 - 2 15

n ERRO ESQUERDA ERRO DIREITA ERRO TRAPEZIO 2 4.446396327e-001 3.407585307e-001 5.194055103e-002 4 2.092337399e-001 1.834653418e-001 1.288419903e-002 8 1.013895985e-001 9.495994231e-002 3.214828114e-003 16 4.989070473e-002 4.828406570e-002 8.033195149e-004

Page 16: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Bisseção

DCC001 - 2011 - 2 16

Page 17: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Raízes de uma Função

Problema: dada uma função f, contínua, encontrar x tal que f(x) = 0

Para algumas funções, como um polinômio de 2º grau, este problema pode ser resolvido analiticamente (por uma fórmula)

Para outras não existe solução analítica, e devemos usar métodos numéricos

Ponto de partida: dois pontos a e b, tais que f(a) < 0 e f(b) > 0, ou f(a) > 0 e f(b) < 0

17DCC001 - 2011 - 2

Page 18: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(a) < 0, F(b) > 0

3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5

-1.0

-0.5

0.0

0.5

1.0

1.5

ab

18DCC001 - 2011 - 2

Page 19: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(a) > 0, F(b)< 0

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5

-0.8

-0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

1.0

1.2

ab

19DCC001 - 2011 - 2

Page 20: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Mais de uma raiz entre a e b

0 5 10 15

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

ab

20DCC001 - 2011 - 2

Page 21: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(a)>0, F(b)>0 – Caso 1

0 5 10 15

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

21DCC001 - 2011 - 2

Page 22: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(a)>0, F(b)>0 – Caso 2

0 5 10 15

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

22DCC001 - 2011 - 2

Page 23: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(x) = 1/xF(a) < 0, F(b) > 0, mas….

-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5

-6

-4

-2

0

2

4

6

f(x) = 1/x

23DCC001 - 2011 - 2

Page 24: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(a).F((a+b)/2) < 0

abm = (a+b)/2

Antes, sabemos que uma raiz está aqui

Depois, sabemos que uma raiz está aqui; podemos fazer b = m

F(a)

0

F(m)

F(b)

24DCC001 - 2011 - 2

Teste simples para sinais opostos

Page 25: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

F(b).F((a+b)/2) < 0

ab

Antes, sabemos que uma raiz está aqui

Depois, sabemos que uma raiz está aqui;

podemos fazer a = m

m = (a+b)/2

F(a)

0

F(m)

F(b)

25DCC001 - 2011 - 2

Page 26: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Parada do Algoritmo

A cada passo o tamanho do intervalo que contém a (uma) raiz é dividido por 2

Quando devemos parar? Cálculos numéricos sempre são

aproximados; testar se f(x) == 0 pode levar a loops infinitos

Solução: o algoritmo deve parar quando o intervalo [a,b] for suficientemente pequeno, isto é, quando b-a for menor que uma tolerância fornecida pelo usuário.

26DCC001 - 2011 - 2

Page 27: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A Função Bissecao Cabeçalho

function r = Bissecao(f, a, b, tol)

// se f é contínua e se f(a).f(b) < 0, esta// função calcula a raiz r com // precisão menor ou igual// ao valor de tol

endfunctionFunção da qual

se deseja conhecer uma

raiz

Intervalo que contém a

raiz

Tolerância

27DCC001 - 2011 - 2

Page 28: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Teste da Função Bissecao

Para testar a função Bissecao, nós precisamosDe uma função contínuaDe um intervalo onde a função troca

de sinalE de conhecer o valor de uma raiz

nesse intervalo para poder verificar o resultado 28DCC001 - 2011 - 2

Page 29: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A Função e^(x)sin(x)

a b

π

29DCC001 - 2011 - 2

Page 30: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A função exp_sin(x)

Reparem no uso de “.*”, ao invés de “*”

Isso é essencial para que a função aceite um vetor como argumento de entrada e produza um vetor como argumento de saída

function y = exp_sin(x) y = exp(-x) .* sin (x);endfunction

30DCC001 - 2011 - 2

Page 31: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Testando a Função Bissecao

clearexec("exp_sin.sci");exec("bissecao.sci");tolerancia = input("\nTolerância = ");while tolerancia > 0 raiz = bissecao(exp_sin,2,4, tolerancia); printf(" Raiz = %12.10f;\n Pi = %12.10f\n",raiz,%pi); tolerancia = input("\nTolerância = ");end

31DCC001 - 2011 - 2

Page 32: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A função BissecaoLoop

function r = bissecao(f,a,b,tol) while b-a > tol // Redução do intervalo end r = (a+b)/2;endfunction

32DCC001 - 2011 - 2

Page 33: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A função BissecaoRedução do Intervalo

// Redução do intervalo m = (a+b)/2; //Ponto médio if f(a)*f(m) <= 0 then // [a,m] contém uma raiz b = m; end if f(m)*f(b) <= 0 then // [m,b] contém uma raiz a = m; end

33DCC001 - 2011 - 2

Page 34: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Teste

Tolerância = 1.0e-3 Raiz = 3.1411132813; Pi = 3.1415926536

Tolerância = 1.0e-6 Raiz = 3.1415925026; Pi = 3.1415926536

Tolerância = 1.0e-10 Raiz = 3.1415926536; Pi = 3.1415926536

34DCC001 - 2011 - 2

Page 35: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Série de Taylor para exp(x) e Cancelamento Catastrófico

DCC001 - 2011 - 2 35

Page 36: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Série de Taylor para exp(x)

Do cálculo sabe-se que, para qualquer x, exp(x) pode ser calculado pela soma de infinitos termos

36DCC001 - 2011 - 2

Page 37: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Série de Taylor para exp(x)

A partir do ponto onde n >= x, n! cresce mais rapidamente que xn

Na prática a soma é feita até que o valor absoluto do termo calculado seja menor que uma tolerância desejada

37DCC001 - 2011 - 2

Page 38: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Função expTaylor Primeira Versão

function y = expTaylor(x,tol)// Calcula a soma dos termos // da série de Taylor até o primeiro// termo com valor absoluto menor// que a tolerância tolendfunction

38DCC001 - 2011 - 2

Page 39: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Testando a função expTaylor

exec("expTaylor.sci");tol = input("\ntol = ");x = input("\nx = ");while x ~= 999 expCalc = expTaylor(x,tol); printf ("\n%15g %15.8e %15.8e %15.8e\n", ... x,exp(x),expCalc,exp(x)-expCalc ) x = input("\nx = ");end Função Scilab,

muito confiável39DCC001 - 2011 - 2

Page 40: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Cálculo dos Termos da Série de Taylor

DCC001 - 2011 - 2 40

t0 t1 t2 t3

Page 41: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

A Função expTaylor

function y = expTaylor(x,tol) Termo = 1; y = Termo; i = 1; while abs(Termo) >= tol Termo = Termo * x / i; y = y + Termo; i = i+1; endendfunction

41DCC001 - 2011 - 2

Page 42: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Teste da função expTaylorx positivo

tol = 1.0e-40x = 1 1 2.71828183e+000 2.71828183e+000 -4.44089210e-016x = 10 10 2.20264658e+004 2.20264658e+004 7.27595761e-012x = 30 30 1.06864746e+013 1.06864746e+013 -3.90625000e-003

Bons resultados para x positivo Erro 16 ordens de grandeza menor que

os valores calculados

42DCC001 - 2011 - 2

Page 43: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Teste da função expTaylorx negativo

tol = 1.0e-40x = -1 -1 3.67879441e-001 3.67879441e-001 -1.11022302e-016x = -10 -10 4.53999298e-005 4.53999296e-005 1.39453573e-013x = -20 -20 2.06115362e-009 5.62188447e-009 -3.56073085e-009x = -30 -30 9.35762297e-014 -3.06681236e-005 3.06681237e-005

Péssimos resultados para x negativo x=-20: erro da mesma ordem de

grandeza dos valores x=-30: valor calculado negativo!

43DCC001 - 2011 - 2

Page 44: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

E agora?

A fórmula para a série de Taylor é provada matematicamente há (literalmente) séculos

A função exp_Taylor é uma implantação simples e direta da fórmula

O que aconteceu?44DCC001 - 2011 - 2

Page 45: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Origem: Aritmética de Ponto Flutuante Uso de um número fixo de bits para

representação da mantissa Aritmética de números com grandes

diferenças de ordem de grandeza não funciona como esperado:-->eps = 1.0e-23;

-->y = 1.0e23;-->x = y + eps;-->x == y ans = T

x é igual a y bit por bit!

45DCC001 - 2011 - 2

Page 46: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Soma de Números de Ordens de Grandeza muito Diferentes

DCC001 - 2011 - 2 46

-->eps = 1.0e-23;-->y = 1.0e23;-->x = y + eps;-->x == y ans = T

Page 47: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Dízimas Periódicas

0,1 = 0.00011001100110011001100…. Ou seja, 0,1 não tem representação

exata em binário

DCC001 - 2011 - 2 47

-->0.1+0.2 == 0.3 ans = F

Page 48: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Cancelamento Catastrófico

DCC001 - 2011 - 2 48

Precisão 6 Precisão 3 Diferença Dif/Precisão 6a 3,14159 3,14 0,00159 0,0506%b 3,13000 3,13 0,00000 0,0000%

a+b 6,27159 6,27 0,00159 0,0254%a-b 0,01159 0,01 0,00159 13,7187%

Ocorre em subtrações de números com valores absolutos próximos, sempre que se usa um número fixo de algarismos significativos, binários, decimais ou em qualquer outra base

Page 49: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Valores dos Termos da Série para x = -20

DCC001 - 2011 - 2 49

Page 50: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Valor Absoluto dos Termos da Série para x = -20

~4.3e00715 ordens de

grandeza maior que o resultado

correto

50DCC001 - 2011 - 2

Page 51: Aula Expositiva 13 4.4 Algoritmos Numéricos 4.4.1 Integração por Trapézios 4.4.2 Bisseção 4.4.3 Série de Taylor para exp(x) e Cancelamento Catastrófico

Conclusões

Cuidado ao somar números de tamanhos muito diferentes e ao subtrair números de tamanhos próximos

A aritmética de ponto flutuante é melindrosa; use funções de bibliotecas sempre que possível

Por outro lado, não se deixe levar pelo pessimismo: programas numéricos funcionam como esperado na maior parte dos casos 51DCC001 - 2011 - 2


Top Related