• Nenhum resultado encontrado

Vamos ao algoritmo. Para aproximar f0(x0) vamos come¸car com um h qualquer, que

pode ou n˜ao ser informado pelo usu´ario. A partir desse valor de h calculamos uma primeira aproxima¸c˜ao. Depois diminu´ımos o valor de h, por exemplo dividindo por 2, e calculamos uma nova aproxima¸c˜ao. Realizamos esse procedimento diversas vezes at´e que aproxima¸c˜oes consecutivas tenham um erro menor do que o erro ε determinado pelo usu´ario.

Entrada: x0, f e ε.

Sa´ıda: uma aproxima¸c˜ao para f0(x0).

Nome: DerivadaNum´erica Defina h = 1;

1

Defina x1 = x0+ h e x2 = x0− h;

2

Se x1 ∈ D(f ) ou x/ 2 ∈ D(f ), pare e retorne erro./

3 Calcule d = f (x1)−f (x2) 2h ; 4 Atualize o valor de h: h = h2; 5 Atualize x1 e x2: x1 = x0+ h e x2 = x0− h; 6 Calcule ˜d = f (x1)−f (x2) 2h ; 7 Se |d − ˜d| < ε, retorne ˜d; 8

Fa¸ca d = ˜d e volte para a linha 5.

9

Dica: Talvez fique mais simples se o algoritmo for implementado usando o repeat. Veja agora uma possibilidade de realizar o algoritmo de forma recursiva. Nesse caso vai ser bem mais simples de h tamb´em for passado como entrada.

Deriva¸c˜ao Num´erica

Entrada: x0, f , ε e h.

Sa´ıda: uma aproxima¸c˜ao para f0(x0).

Nome: DerivadaNum´ericaRec Defina x1 = x0+ h e x2 = x0− h;

1

Se x1 ∈ D(f ) ou x/ 2 ∈ D(f ), pare e retorne erro./

2 Calcule d = f (x1)−f (x2) 2h ; 3 Atualize o valor de h: h = h2; 4 Atualize x1 e x2: x1 = x0+ h e x2 = x0− h; 5 Calcule ˜d = f (x1)−f (x2) 2h ; 6 Se |d − ˜d| < ε, retorne ˜d; 7

Retorne DerivadaNum´ericaRec(x0, ε, h).

8

Deriva¸c˜ao Num´erica

Exerc´ıcios - 12ª Semana

12.1 Em cada item a seguir considere que as ´unicas informa¸c˜oes dispon´ıveis sobre a fun¸c˜ao f estejam na tabela apresentada. Complete a terceira coluna de cada tabela com aproxima¸c˜oes para a derivada no ponto em quest˜ao. Fa¸ca as contas na m˜ao. Para cada linha use o m´etodo mais apropriador de acordo com as informa¸c˜oes dispon´ıveis.

a) x f (x) f0(x) 1.1 9.025013 1.2 11.02318 1.3 13.46374 1.4 16.44465 b) x f (x) f0(x) 7.4 -68.31929 7.6 -71.69824 7.8 -75.15762 8.0 -78.69741

12.2 Sabendo que as tabelas do exerc´ıcio 1 foram criadas a partir das fun¸c˜oes a seguir, calcule agora o valor exato para a terceira coluna e compare com os valores aproxi- mados encontrados em 1.

a) f (x) = e2x

b) f (x) = ln(x + 2) − (x + 1)2

12.3 Vamos agora implementar o m´etodo visto em sala de aula. Para isso considere a fun¸c˜ao f (x) = x21+1.

a) Qual o dom´ınio da fun¸c˜ao f ?

b) Implemente uma fun¸c˜ao que recebe como entrada x0 ∈ Dom(f ) e um erro ε e

retorna uma aproxima¸c˜ao para f0(x0) a partir do segundo m´etodo visto em sala

de aula.

c) A partir da fun¸c˜ao implementada encontre aproxima¸c˜oes para f0(0), f0(−1 5) e

f0(13). Compare as aproxima¸c˜oes encontradas com os valores reais, para isso ser´a necess´ario derivar a fun¸c˜ao f .

d) Vamos implementar agora o algoritmo de forma recursiva. Para facilitar considere h um argumento de entrada da sua fun¸c˜ao. Dessa forma, implemente uma fun¸c˜ao recursiva que recebe como entrada x0 ∈ Dom(f ), um erro ε e h retorna uma

aproxima¸c˜ao para f0(x0) a partir do segundo m´etodo visto em sala de aula.

e) A partir da fun¸c˜ao recursiva encontre aproxima¸c˜oes para f0(0), f0(−15) e f0(13). Quando for chamar a fun¸c˜ao para encontrar as aproxima¸c˜oes use h = 1.

Deriva¸c˜ao Num´erica

12.4 Considere agora a fun¸c˜ao f (x) = ln(x2+ x − 2).

a) Qual o dom´ınio da fun¸c˜ao f ?

b) Implemente uma fun¸c˜ao que recebe como entrada x0 ∈ Dom(f ) e um erro ε e

retorna uma aproxima¸c˜ao para f0(x0) a partir do segundo m´etodo visto em sala

de aula.

Dica: Nesse caso ser´a necess´ario ter cuidado com: (i) o x0 informado pelo usu´ario,

se ele n˜ao estiver no dom´ınio interrompa o processo e envie uma mensagem de erro; (ii) a escolha de h inicial, aten¸c˜ao para n˜ao acontecer de x0 − h ou x0+ h

n˜ao pertencer ao dom´ınio.

c) A partir da fun¸c˜ao implementada encontre aproxima¸c˜oes para f0(3), f0(−52) e f0(43). Compare as aproxima¸c˜oes encontradas com os valores reais, para isso ser´a necess´ario derivar a fun¸c˜ao f .

d) Vamos implementar agora o algoritmo de forma recursiva. Para facilitar considere novamente h um argumento de entrada da sua fun¸c˜ao. Dessa forma, implemente uma fun¸c˜ao recursiva que recebe como entrada x0 ∈ Dom(f ), um erro ε e h

retorna uma aproxima¸c˜ao para f0(x0) a partir do segundo m´etodo visto em sala

de aula.

e) A partir da fun¸c˜ao recursiva encontre aproxima¸c˜oes para f0(3), f0(−52) e f0(43). 12.5 Considere agora f (x) = e−x/3 1 + x2x+1 − 1.

a) Qual o dom´ınio da fun¸c˜ao f ?

b) Primeiro implemente uma fun¸c˜ao que recebe como entrada x e retorna f (x). Vamos chamar essa fun¸c˜ao de f.

c) Implemente agora uma fun¸c˜ao que recebe como entrada x e retorna uma aproxi- ma¸c˜ao para f0(x) considerando um erro de 10−3. Vamos chamar esse fun¸c˜ao de df.

d) Nosso objetivo agora ´e usar o m´etodo de Newton-Raphson para encontrar as ra´ızes f sem derivar a fun¸c˜ao na m˜ao. Para isso siga os itens a seguir.

i) Digite plot(f,xlim=c(-3,5));abline(h=0) e veja como ´e o gr´afico de f . Veja que f tem trˆes ra´ızes. S˜ao elas que queremos encontrar.

ii) Use o m´etodo de Newton-Rapson para encontrar uma aproxima¸c˜ao para a menor raiz de f . A partir do gr´afico escolha x0 de forma a garantir que o

m´etodo converge para a raiz procurada. Fa¸ca a sua fun¸c˜ao de forma que ela chame f e df implementadas em 5b e 5c.

iii) Use o m´etodo de Newton-Rapson para encontrar uma aproxima¸c˜ao para a segunda menor raiz de f . A partir do gr´afico escolha x0 de forma a garantir

que o m´etodo converge para a raiz procurada. Fa¸ca a sua fun¸c˜ao de forma que ela chame f e df implementadas em 5b e 5c.

iv) Use o m´etodo de Newton-Rapson para encontrar uma aproxima¸c˜ao para a maior raiz de f . A partir do gr´afico escolha x0 de forma a garantir que o

m´etodo converge para a raiz procurada. Fa¸ca a sua fun¸c˜ao de forma que ela chame f e df implementadas em 5b e 5c.

v) Vamos testar se deu certo. Guarde nos objetos r1, r2 e r3 as aproxima¸c˜oes encontradas para as trˆes ra´ızes de f . Agora digite a seguinte sequˆencia de comandos e discuta o gr´afico gerado.

Deriva¸c˜ao Num´erica > plot(f,xlim=c(-3,5));abline(h=0) > segments(x0=r1,y0=1,x1=r1,y1=-1,lty=2) > points(r1,0,pch=19,cex=1.2) > segments(x0=r2,y0=1,x1=r2,y1=-1,lty=2) > points(r2,0,pch=19,cex=1.2) > segments(x0=r3,y0=1,x1=r3,y1=-1,lty=2) > points(r3,0,pch=19,cex=1.2)

e) Nosso objetivo agora ´e usar o m´etodo da bisse¸c˜ao para encontrar os pontos de m´aximo e m´ınimo locais de f sem derivar a fun¸c˜ao na m˜ao. Para isso siga os itens a seguir.

i) Digite plot(df,xlim=c(-3,5));abline(h=0) e veja como ´e o gr´afico da derivada de f . Veja que os pontos de m´aximo e m´ınimo locais de f s˜ao os pontos em que a derivada de f se anula. Por isso vamos buscar as ra´ızes da derivada de f .

ii) Use o m´etodo da bisse¸c˜ao para encontrar uma aproxima¸c˜ao para o m´ınimo local de f . A partir dos gr´aficos escolha valores para a e b de forma a garantir que o m´etodo converge para o m´ınimo local. Fa¸ca a sua fun¸c˜ao de forma que ela chame df.

iii) Use o m´etodo da bisse¸c˜ao para encontrar uma aproxima¸c˜ao para o m´aximo local de f . A partir dos gr´aficos escolha valores para a e b de forma a garantir que o m´etodo converge para o m´aximo local. Fa¸ca a sua fun¸c˜ao de forma que ela chame df.

iv) Vamos testar se deu certo. Guarde no objeto xmin a aproxima¸c˜ao para o m´ınimo local e no objeto xmax a aproxima¸c˜ao para o m´aximo local de f . Agora digite a seguinte sequˆencia de comandos e discuta o gr´afico gerado. > plot(df,xlim=c(-3,5)) > abline(h=0) > segments(x0=xmin,y0=2,x1=xmin,y1=-2,lty=2) > points(xmin,0,pch=19,cex=1.2) > segments(x0=xmax,y0=1,x1=xmax,y1=-1,lty=2) > points(xmax,0,pch=19,cex=1.2)

Semana 13:

Integra¸c˜ao Num´erica

Suponha que nosso problema seja calcular a seguinte integral: Rabf (x)dx. Existem fun- ¸c˜oes para as quais n˜ao ´e poss´ıvel encontrar a sua primitiva, ou seja, n˜ao existe F tal que dxdF (x) = f (x). Nesses casos n˜ao conseguimos calcular a integral de f , logo n˜ao conseguimos resolver nosso problema de forma anal´ıtica.

Um exemplo de fun¸c˜ao que n˜ao possui primitiva ´e a fun¸c˜ao densidade de probabilidade da vari´avel aleat´oria normal de m´edia 0 e variˆancia 1:

f (x) = √1 2πe

−x2 2 .

Apesar de n˜ao ser poss´ıvel calcular a sua integral de forma anal´ıtica existe a ´area em baixo da sua curva. Ou seja, podemos mesmo assim querer encontrar o valor de Rab √1

2πe −x22 dx

que est´a indicado na Figura 13.1 como a ´area pintada de cinza.

Figura 13.1: Ilustra¸c˜ao para a ´area deRb

a 1 √ 2πe −x2 2 dx.

E como vamos fazer isso se n˜ao existe a sua primitiva? Vamos procurar aproxima¸c˜oes para a ´area em cinza a partir de m´etodos num´ericos. A ideia principal ´e usar a soma de Riemann para aproximar o valor dessa integral.

J´a vimos (ou veremos) em c´alculo que Rabf (x)dx ´e o valor num´erico referente `a ´area embaixo da curva de f entre os pontos a e b do dom´ınio, lembrando que a ´area ser´a considerada negativa para os intervalos em que f (x) < 0. Baseados nessa ideia vamos construir um algoritmo que nos forne¸ca uma aproxima¸c˜ao para essa ´area. Podemos aproximar por retˆangulos ou trap´ezios, como veremos nas Se¸c˜oes 13.1 e 13.2 a seguir.

Integra¸c˜ao Num´erica

13.1

Aproxima¸c˜ao por retˆangulos

Para fazer a aproxima¸c˜ao por retˆangulos primeiro vamos dividirmos o intervalo (a, b) em n subintervalos de mesmo tamanho: (a = x0, x1 = x0+δ, x2 = x1+δ, . . . , b = xn= xn−1+δ),

com δ = b−a

n . Para cada subintervalo (xi−1, xi) vamos definir um retˆangulo com base dada

por esse subintervalo e altura f (xi−1), como mostra a Figura 13.2(b).

(a) Valor exato. (b) Valor aproximado.

Figura 13.2: Aproxima¸c˜ao por retˆangulos.

Veja que podemos aproximar a ´area embaixo da curva de f pela soma das ´areas dos n retˆangulos. Veja tamb´em que quanto maior o n´umero de intervalos mais pr´oxima a aproxima¸c˜ao est´a do real valor da ´area. Ent˜ao para encontrar uma aproxima¸c˜ao para a ´

area embaixo da curva de f precisamos saber calcular a ´area dos retˆangulos.

Veja que o i-´esimo retˆangulo tem base δ = xi− xi−1 e altura f (xi−1). Logo a ´area do

i-´esimo retˆangulo pode ser expressa por AR

i = δf (xi−1). Dessa forma, podemos encontrar

o valor da soma das ´areas dos n retˆangulos da seguinte maneira: S1 =

n

X

i=1

δf (xi−1)

Veja que poder´ıamos ter definido de outras formas a altura dos retˆangulos, por exem- plo, em vez de escolher como altura o valor da fun¸c˜ao no ponto `a esquerda do intervalo (xi−1, xi), f (xi−1), poder´ıamos ter escolhido como altura o valor da fun¸c˜ao no ponto `a

direita desse intervalo, f (xi), ou ent˜ao o valor da fun¸c˜ao no ponto m´edio desse intervalo,

f (xi−1+xi

2 ). Veja esses duas outras possibilidades na Figura 13.3. Nesses casos ter´ıamos a

soma das ´areas dos n retˆangulos definida por:

S2 =Pni=1δf (xi) (ponto `a direita)

S3 =

Pn

i=1δf ( xi−1+xi

2 ) (ponto m´edio).

N˜ao importa como foi definida a altura do retˆangulo, a soma das ´areas dos retˆangulos sempre converge para a integral quando o n´umero de subdivis˜oes no dom´ınio cresce, ou seja, quando n → ∞.

Integra¸c˜ao Num´erica

(a) Ponto `a direita. (b) Ponto m´edio.

Figura 13.3: Aproxima¸c˜ao por retˆangulos.

Outra possibilidade de definir a altura dos retˆangulos ´e, em vez de pensar nos retˆan- gulos `a direita ou `a esquerda, pensar nos retˆangulos acima ou abaixo da curva, como mostra a Figura 13.4.

(a) Retˆangulos acima de f . (b) Retˆangulos abaixo de f .

Figura 13.4: Aproxima¸c˜ao por retˆangulos.

Veja que no caso dos retˆangulos acima da curva (Figura 13.4(a)) a altura do i- ´

esimo retˆangulo ser´a max(f (xi−1), f(xi)), mesmo que f seja negativa em xi ou xi−1. J´a

para os retˆangulos abaixo da curva (Figura 13.4(b)) a altura do i-´esimo retˆangulo ser´a min(f (xi−1), f(xi)). Logo a soma das ´areas dos retˆangulos acima (SU) e (SL) abaixo

podem ser expressas por:

SU =

Pn

i=1δ max (f (xi−1), f (xi))

SL =

Pn

i=1δ min(f (xi−1), f (xi))

Integra¸c˜ao Num´erica

A vantagem em trabalhar com os retˆangulos acima e abaixo ´e que dessa forma podemos garantir que:

SL≤ ´Area Real ≤ SU.

Mas por que isso ´e interessante? Porque assim sabemos se j´a estamos com uma aproxima¸c˜ao boa ou n˜ao. Por exemplo, se os valores de SL e SU forem muito pr´oximos,

isto ´e, SU − SL < ε, ent˜ao o n´umero de subdivis˜oes do intervalo (a, b) j´a ´e grande o

suficiente para gerar uma boa aproxima¸c˜ao. Caso contr´ario, ainda n˜ao temos uma boa aproxima¸c˜ao e por isso ´e recomend´avel aumentar o n´umero de subdivis˜oes.

No documento Apostila de Programação Estatística (páginas 104-112)