

























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
calculo numerico
Tipologia: Notas de estudo
1 / 97
Esta página não é visível na pré-visualização
Não perca as partes importantes!


























































































O C´alculo Num´erico tem por objetivo estudar esquemas num´ericos (algoritmos num´ericos) para resolu¸c˜ao de problemas que podem ser representados por um modelo matem´atico. Um esquema ´e eficiente quando este apresenta solu¸c˜oes dentro de uma precis˜ao desejada com custo computacional (tempo de execu¸c˜ao + mem´oria) baixo. Os esquemas num´ericos nos fornecem aproxima¸c˜oes para o que seria a solu¸c˜ao exata do problema. Os erros cometidos nesta aproxima¸c˜ao s˜ao decorrentes da discretiza¸c˜ao do problema, ou seja passar do modelo matem´atico para o esquema num´erico, e da forma como as m´aquinas representam os dados num´ericos. Como exemplo de discretiza¸c˜ao consideremos que desejamos calcular uma aproxima¸c˜ao para a derivada de uma fun¸c˜ao f (x) num ponto ¯x. O modelo matem´atico ´e dado por
f ′(¯x) = lim h→ 0
f (¯x + h) − f (¯x) h
Um esquema num´erico para aproximar a derivada ´e dado por tomar h “pequeno” e calcular
f ′(¯x) ≈
f (¯x + h) − f (¯x) h
Neste caso quanto menor for o valor de h mais preciso ser´a o resultado, mas em geral, este esquema n˜ao fornecer´a a solu¸c˜ao exata. A representa¸c˜ao de n´umeros em m´aquinas digitais (calculadoras, computadores, etc) ´e feita na forma de ponto flutuante com um n´umero finito de d´ıgito. Logo os n´umeros que tem representa¸c˜ao infinita (Ex. 1/ 3 , π,
∑^ n
k=
ak N
∑^ n
k=
ak,
onde estamos considerando que no primeiro somat´orio para cada k fazemos ak/N e depois somamos e no segundo somat´orio somamos todos os ak e o resultado da soma dividimos por
N. Do ponto de vista anal´ıtico, as duas express˜oes s˜ao equivalentes, mas a segunda forma apresenta melhor resultado do ponto de vista computacional, pois realiza menos opera¸c˜oes e comete menos erro de truncamento. Outro exemplo interessante ´e que em aritm´etica computacional ´e poss´ıvel que para um dado A exista um ε 6 = 0 tal que
A + ε = A.
Analiticamente a express˜ao acima ´e verdadeira se e somente se ε = 0. Outro fator que pode influenciar no resultado ´e o tipo de m´aquina em que estamos trabalhando. Numa calculadora simples que represente os n´umeros com 7 d´ıgito ter´ıamos
1 /3 + 1/3 + 1/3 = 0. 9999999
Enquanto que calculadoras mais avan¸cadas ter´ıamos como resposta um falso 1, pois na realidade, internamente estas calculadoras trabalham com mais d´ıgito do que ´e apresentado no visor e antes do resultado ser apresentado este ´e arredondado. Os esquemas num´ericos s˜ao classificados como esquemas diretos e esquemas iterativos. Os esquemas diretos s˜ao aqueles que fornecem a solu¸c˜ao ap´os um n´umero finito de passos. Por exemplo o esquema que apresentamos para o c´alculo da derivada. Os esquemas iterativos s˜ao aqueles que repetem um n´umero de passos at´e que um crit´erio de parada seja satisfeito. Como exemplo considere o algoritmo que ´e usado para determinar a precis˜ao de uma m´aquina digital
Algoritmo: Epsilon da M´aquina
Ep ← 1
Enquanto (1 + Ep) > 1, fa¸ca: Ep ← Ep/ 2
fim enquanto
OutPut: 2 Ep
O crit´erio de parada ´e (1 + Ep) ≤ 1 e cada execu¸c˜ao do la¸co Enquanto ´e chamado de itera¸c˜ao. M´aquinas diferentes apresentar˜ao resultados diferentes. Um outro fator que pode influenciar nos resultados ´e a linguagem de programa¸c˜ao usada na implementa¸c˜ao dos algoritmos (Pascal, Fortran, C++, MatLab , etc). Diferentes linguagens podem apresentar diferentes resultados. E mesmo quando usamos uma mesma linguagem, mas compiladores diferentes (Ex. C++ da Borland e C++ da Microsoft), os resultados podem apresentar diferen¸cas. Existem v´arias bibliotecas de rotinas num´ericas em diversas linguagens e algumas dispon´ıveis na Internet. Um exemplo ´e a LIMPACK: uma cole¸c˜ao de rotinas em Fortran para solu¸c˜ao de sistemas lineares. Para exemplificar os esquemas num´ericos, que estudaremos nos pr´oximos cap´ıtulo, usa- remos o MatLab pela sua facilidade de programa¸c˜ao. Todo o material desta apostila ´e baseado nas referencias: [?] e [?].
Tabela 1.1: Operadores Aritm´eticos
Opera¸c˜ao S´ımbolo Adi¸c˜ao a + b Multiplica¸c˜ao a ∗ b Subtra¸c˜ao a − b Divis˜ao a/b ou b\a Potencia¸c˜ao â b
O nome da vari´avel pode consistir de no m´aximo 31 caracteres, iniciando sempre por um caracter alfa seguido de qualquer combina¸c˜ao de caracteres do tipo alfa , num´erico e unders- cores. Ex. resultado_da_soma_2. Ao contr´ario de outras linguagens, o MatLab diferencia as vari´aveis que usam letras min´usculas e mai´usculas. Isto ´e as vari´aveis Contas, contas, conTas e CoNtAs, s˜ao consideradas como quatro vari´aveis diferentes. Todas as vari´aveis s˜ao armazenadas internamente e podem ser usadas a qualquer momento. Para saber quais as vari´aveis que est˜ao ativas utilizamos o comando who. Para eliminar a vari´avel conta, usa- mos o comando clear conta. As vari´aveis s˜ao tratadas como matrizes, apesar dos escalares n˜ao serem apresentados na nota¸c˜ao matricial. Um vetor linha pode ser definido como
EDU>> x=[1 2 3 4]
x = 1 2 3 4
Tamb´em podemos separar os elementos por v´ırgula. J´a um vetor coluna pode ser definido da seguinte forma
EDU>> y=[5; 6; 7; 8]
y = 5 6 7 8
Um exemplo de uma matriz 3 × 4.
EDU>> a=[1 2 3 4; 5 6 7 8; 9 10 11 12]
a = 1 2 3 4 5 6 7 8 9 10 11 12
Os elementos na i-´esima linha e na j-´esima coluna, denotados por aij podem ser obtidos pelo comando a(i,j), por exemplo a(2,3)=7. Note que os elementos no MatLab s˜ao indexados iniciando em 1. Em algumas situa¸c˜oes necessitamos de vetores com alguma estrutura parti- cular. Por exemplo, um vetor cujo o primeiro termo vale −2 e o ultimo vale 3 e os termos intermedi´arios variam um passo de 0.5. Este vetor pode ser definido pela linha de comando
EDU>> v=-2:0.5:
v =
Columns 1 through 7
Columns 8 through 11
De uma forma geral este comando tem a sintaxe v=a:passo:b. Quando o passo ´e igual a um podemos escrever o comando na forma reduzida v=a:b. Algumas matrizes elementares podem ser geradas atrav´es de comandos simples, por exemplo: A matriz identidade:
EDU>>I=eye(3)
Matriz n × m formada por 1’s:
EDU>> A=ones(2,3)
Matriz Nula de ordem n × m:
EDU>> B=zeros(3,4)
Tabela 1.3: Fun¸c˜oes Elementares
Fun¸c˜ao Sintaxe Valor Absoluto abs(x) Arco Co-seno acos(x) Arco Seno asin(x) Co-seno cos(x) Exponencial ex^ exp(x) Logaritmo Natural log(x) Logaritmo base 10 log10(x) Seno sin(x) Raiz Quadrada sqrt(x) Tangente tan(x)
gr´afico ´e gerado pelo comando plot(x,f). Se desejamos gerar o gr´afico da fun¸c˜ao sen(x) no intervalo [−π, π] devemos proceder da seguinte forma:
EDU>> x=-pi:0.01:pi; EDU>> f=sin(x); EDU>> plot(x,f)
Note, que na defini¸c˜ao do vetor x, usamos o passo igual a 0.01. Isto determina a quantidade de pontos que o comando plot usa par gerar o gr´afico. Quanto mais pontos mais perfeito ser´a o gr´afico (em contra partida maior o tempo de execu¸c˜ao). se tiv´essemos usado o passo 0 .5 n˜ao ter´ıamos um gr´afico de boa qualidade.
Existem dois tipos de programas em MatLab : scripts e funtions. Ambos devem ser sal- vos com extens˜ao .m no diret´orio corrente. Uma diferen¸ca b´asica entre os dois ´e que os scripts trata as vari´aveis, nele definidas, como vari´aveis globais, enquanto as functions trata as vari´aveis como vari´aveis locais. Desta forma a functions tem que ter um valor de retorno.
Scripts
Os scripts permite que um conjunto de comandos e defini¸c˜oes sejam executados atrav´es de um ´unico comando na janela de comandos. Como exemplo, o script seguinte calcula a aproxima¸c˜ao da derivada de sen(x) usando diferen¸cas finitas.
% Aproximacao da derivada do seno % Usando o operardor de diferen\c{c}a finita progressiva.
clear; h=0.0001; x=input(’Entre com o valor de, x=’); % Atribui Valores a x disp(’O valor da aproximacao eh...’) % Mostra mensagem no monitor dsen=(sin(x+h)-sin(x))/h
As primeiras duas linha s˜ao coment´arios que descrevem o script. Na quinta linha temos o comando que permite atribuir valores a uma vari´avel. E na sexta linha o comando que permite mostrar uma mensagem no monitor. Vamos supor que este arquivo seja salvo com o nome de devira_seno.m. Para executar o script digitamos seu nome no prompt do MatLab .
Functions
Numa fun¸c˜ao em MatLab a primeira linha ´e da forma function y=nome(argumentos). A fun¸c˜ao se troca informa¸c˜oes com o MatLab workspace por interm´edio da vari´avel y e dos argumentos. Para ilustrar o uso de fun¸c˜oes em MatLab considere o seguinte c´odigo
function dsen=deriva_seno(x,h) % Aproximacao da derivada do seno % Usando o operardor de diferen\c{c}a finita progressiva. dsen=(sin(x+h)-sin(x))/h;
Apesar deste arquivo poder ser salvo com um nome qualquer, ´e usual usar o mesmo nome da fun¸c˜ao, ou seja, deriva_seno.m. Para execut´a-lo devemos digitar seu nome e informar os valores dos argumentos, por exemplo,
EDU>>y= deriva_seno(3.14,0.001)
o que forneceria em y uma aproxima¸c˜ao da derivada da fun¸c˜ao seno em 3.14 Uma diferen¸ca importante entre esta vers˜ao, usando function, com a anterior ´e que o valor calculado pode ser atribu´ıdo a uma vari´avel. Al´em disso, agora podemos escolher o valor de h, que na vers˜ao anterior estava fixo em h=0.0001. Vale notar que no primeiro caso todas as vari´aveis do scrips est˜ao ativas, isto ´e s˜ao vari´aveis globais. Enquanto que no segundo ca so as vari´aveis s˜ao locais, isto ´e, a vari´avel h s´o ´e ativa na execu¸c˜ao da fun¸c˜ao
Controle de Fluxo
O controle de fluxo ´e um recurso que permite que resultados anteriores influenciem opera¸c˜oes futuras. Como em outras linguagens, o MatLab possui recursos que permitem o controle de fluxo de execu¸c˜ao de comandos, com base em estruturas de tomada de decis˜oes. Apresentamos as estrutura de loops for, loops while e if-else-end. A forma geral do loop for ´e
if expressao comandos ... end
Como exemplo considere o seguinte fragmento de c´odigo que calcula o valor absoluto de um n´umero
if x < 0 x=-x; end
Isto ´e, se x for menor que zero ent˜ao troca de sinal, caso contr´ario nada ´e feito.
Exerc´ıcio 1.1 Usando o esquema num´erico para a aproxima¸c˜ao da derivada dado abaixo ache uma aproxima¸c˜ao para f ′(π), onde f (x) = sen(x) e tome h = 0. 1 , 0. 01 , 0. 001 ,... 10 −^10. Repita os c´alculos para f ′(0). Comente os resultados.
f ′(¯x) ≈
f (¯x + h) − f (¯x) h
Exerc´ıcio 1.2 Fa¸ca um programa que calcule
∑^107
k=
com A = 10, 102 , 103 ,... , 1015. Comente os resultados.
Exerc´ıcio 1.3 Calcule a precis˜ao de sua m´aquina usando o algoritmo
Algoritmo: Epsilon da M´aquina
Input: A : n´umero que represente a grandeza
Ep ← 1
Enquanto (A + Ep) > 1 , fa¸ca: Ep ← Ep/ 2
fim enquanto
Output: Imprimir 2 Ep
tomando A = 1, 10 , 100 , 1000. Comente os resultados.
Neste cap´ıtulo estudaremos esquemas num´ericos para resolver equa¸c˜oes da forma f (x) = 0. Na maioria dos casos estas equa¸c˜oes n˜ao tem solu¸c˜ao alg´ebrica como h´a para as equa¸c˜oes de 2 o ¯
grau. No entanto esquemas num´ericos podem fornecer uma solu¸c˜ao satisfat´oria. O processo para encontrar uma solu¸c˜ao envolve duas fases:
Fase I Isolamento das ra´ızes - Consiste em achar um intervalo fechado [a, b] que cont´em a raiz.
Fase II Refinamento - Partindo de uma aproxima¸c˜ao inicial refinamos a solu¸c˜ao at´e que certos crit´erios sejam satisfeitos.
Um n´umero x que satisfaz a equa¸c˜ao f (x) = 0 ´e chamado de raiz ou zero de f. O objetivo ´e encontrar um intervalo [a, b], de pequena amplitude ( b − a ø 1), que contenha a raiz que desejamos encontrar. Para isto usaremos duas estrat´egias: An´alise Gr´afica e Tabelamento da fun¸c˜ao. A an´alise gr´afica ´e baseada na id´eia de que, a partir da equa¸c˜ao f (x) = 0, podemos obter uma equa¸c˜ao equivalente g(x) − h(x) = 0, onde g e h sejam fun¸c˜oes mais simples e de f´acil an´alise gr´afica. Esbo¸cando o gr´afico de g e h podemos determinar os pontos x, onde as curvas se interceptam, pois estes pontos ser˜ao as ra´ızes de f (x) ( g(ξ) = h(ξ) ⇒ f (ξ) = 0 ).
Exemplo 2.1.1 Sendo f (x) = e−x^ − x temos f (x) = g(x) − h(x), onde g(x) = e−x^ e h(x) = x. Na Figura 2.1 temos que as curvas se interceptam no intervalo [0, 1]. Tamb´em podemos observar que pelo comportamento das fun¸c˜oes g(x) e h(x) estas fun¸c˜oes n˜ao v˜ao se interceptar em nenhum outro ponto. Logo f (x) admite uma ´unica raiz.
Na pr´atica usamos algum software matem´atico para esbo¸car os gr´aficos. Quanto menor for a amplitude do intervalo que cont´em a raiz, mais eficiente ser´a a Fase de Refinamento. Para obtermos um intervalo de menor amplitude usaremos a estrat´egia do tabelamento que ´e baseada no seguinte Teorema.
−4 0 0.5 1 1.5 2 2.5 3
−
−
−
0
1
2
3
4
ξ | a b
f ′(x) preserva sinal
−3 0 0.5 1 1.5 2 2.5 3
−
−
0
1
2
3
ξ 1 |
ξ 2 |
ξ 3 |
a b
f ′(x) muda de sinal
−3 0 0.5 1 1.5 2 2.5 3
−
−
0
1
2
3
4
ξ 1 |
ξ 2 |
a b
f ′(x) muda de sinal
(^00) 0.5 1 1.5 2 2.5 3
1
2
ξ | a b
f (a)f (b) > 0
Figura 2.2: Exemplos do comportamento de f (x)
Nas pr´oximas se¸c˜oes estudaremos os esquemas num´ericos que partindo de uma aproxima¸c˜ao inicial x 0 , v˜ao gerar uma seq¨uˆencia {xk} que converge para a raiz procurada, isto ´e xk → ξ quando k → ∞. A aproxima¸c˜ao inicial parte do intervalo encontrado na Fase I, Isolamento das Ra´ızes, e os termos da seq¨uˆencia s˜ao calculados at´e que a aproxima¸c˜ao tenha atingido uma precis˜ao desejada (crit´erio de parada).
Este m´etodo ´e baseado no Teorema 2.1.1. Seja f (x) uma fun¸c˜ao cont´ınua no intervalo [a, b] tal que f (a)f (b) < 0 e seja ε > 0 um n´umero dado. A id´eia ´e reduzir a amplitude do intervalo at´e atingir a precis˜ao requerida: b − a < ε, usando divis˜ao sucessivas do intervalo.
a 0
||
a 1
x 1
||
a 2
x 2
||
a 3
|
ξ
x 0 b 0 ||
|| b 2 || b 3
b 1
Figura 2.3: M´etodo da Bissec¸c˜ao
O m´etodo procede da seguinte forma: fa¸ca [a 0 , b 0 ] = [a, b],
x 0 =
a 0 + b 0 2
f (a 0 ) < 0 f (b 0 ) > 0 f (x 0 ) > 0
ξ ∈ (a 0 , x 0 ) a 1 = a 0 b 1 = x 0
{ak}: Seq¨uˆencia n˜ao decrescente e limitada superiormente por b 0. Logo
a 0 ≤ a 1 ≤ · · · < b 0 ⇒ ∃M ∈ IR tal que lim k→∞ ak = M
{bk}: Seq¨uˆencia n˜ao crescente e limitada inferiormente por a 0. Logo
b 0 ≥ b 1 ≥ · · · > a 0 ⇒ ∃m ∈ IR tal que lim k→∞ bk = m
{xk}: Por constru¸c˜ao temos que
xk =
ak + bk 2
⇒ ak < xk < bk ∀k ∈ IN (2.1)
A amplitude de cada intervalo gerado ´e metade da amplitude do intervalo anterior, assim temos,
bk − ak =
b 0 − a 0 2 k^
Calculando o limite quando k → ∞ temos
lim k→∞
(bk − ak) = lim k→∞
b 0 − a 0 2 k^
Isto segue que lim k→∞ bk − lim k→∞ ak = 0 ⇒ M − m = 0 ⇒ M = m.
Usando este fato e calculando o limite em (2.1) temos
m = lim k→∞ ak ≤ lim k→∞ xk ≤ lim k→∞ bk = m ⇒ lim k→∞ xk = m.
Falta mostrar que m ´e raiz de f , isto ´e f (m) = 0. Em cada itera¸c˜ao f (ak)f (bk) < 0. Como f ´e cont´ınua temos ent˜ao que
0 ≥ lim k→∞ f (ak)f (bk) = lim k→∞ f (ak) lim k→∞ f (bk) = f
( lim k→∞ ak
) f
( lim k→∞ bk
) = f 2 (m) ≥ 0
Portanto f (m) = 0
Pelo crit´erio de parada podemos observar que o n´umero de itera¸c˜oes depende do intervalo inicial [a 0 , b 0 ] e da precis˜ao requerida ε. Dada uma precis˜ao ε temos,
bk − ak < ε ⇒
b 0 − a 0 2 k^
< ε ⇒ 2 k^ >
b 0 − a 0 ε
Como estes valores s˜ao sempre positivos, podemos aplicar a fun¸c˜ao logaritmo, obtendo,
k >
log(b 0 − a 0 ) − log(ε) log(2)
Exemplo 2.3.1 No exemplo 2.1.2 isolamos uma raiz de f (x) = e−x^ − x no intervalo [0. 5 , 0 .75]. Usando a precis˜ao ε = 10−^8 , temos
k >
log(0. 75 − 0 .5) − log(10−^8 ) log(2)
Logo ser´a necess´ario no m´ınimo 25 itera¸c˜oes para que o m´etodo da Bissec¸c˜ao possa atingir a precis˜ao desejada.
Seja f (x) cont´ınua em [a, b], onde existe uma raiz da equa¸c˜ao f (x) = 0. A estrat´egia deste m´etodo ´e escrever a fun¸c˜ao f de tal forma que f (x) = x − φ(x). Se f (x) = 0, ent˜ao
x − φ(x) = 0 ⇒ x = φ(x)
Isto ´e, encontrar as ra´ızes de f ´e equivalente a achar os pontos fixo da fun¸c˜ao φ. Atrav´es da equa¸c˜ao acima montamos um processo iterativo, onde, dado x 0
xn+1 = φ(xn), n = 1, 2 ,...
A fun¸c˜ao φ ´e chamada de fun¸c˜ao de itera¸c˜ao e esta n˜ao ´e determinada de forma ´unica. As condi¸c˜oes de convergˆencia s˜ao dadas no teorema abaixo.
Teorema 2.4.1 Seja ξ uma raiz da fun¸c˜ao f isolada no intervalo [a, b]. Seja φ uma fun¸c˜ao de itera¸c˜ao da fun¸c˜ao f que satisfaz:
φ e φ′^ s˜ao cont´ınuas em [a, b],
|φ′(x)| ≤ M < 1 ∀x ∈ [a, b],
x 0 ∈ [a, b].
Ent˜ao a seq¨uˆencia {xk} gerada pelo processo iterativo xn+1 = φ(xn) converge para ξ.
Prova: Sendo ξ uma raiz ent˜ao f (ξ) = 0 ⇒ ξ = φ(ξ), logo
xn+1 = φ(xn) ⇒ xn+1 − ξ = φ(xn) − φ(ξ).
Como φ ´e cont´ınua e diferenci´avel, pelo Teorema do Valor M´edio temos que existe cn per- tencente ao intervalo entre cn e ξ tal que
φ(xn) − φ(ξ) = φ′(cn)(xn − ξ)
Logo |xn+1 − ξ| = |φ′(cn)| |xn − ξ| ≤ M |xn − ξ|