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.