



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
ESTUDO DE APROXIMAÇÃO DE RAIZES USANDO METODO COMPUTACIONAL
Tipologia: Notas de estudo
1 / 6
Esta página não é visível na pré-visualização
Não perca as partes importantes!




A representação de números em máquinas digitais
(calculadoras, computadores, etc) é feita na forma de
ponto flutuante com um número finito de dígito.
Logo os números que tem representação infinita
(Ex. 1/3, π, √
2 ) são representados de forma
truncada ou aproximada. Com isto algumas das
propriedades da aritmética real não valem na
aritmética computacional. Como exemplo, na
aritmética computacional temos:
𝑘
𝑛
𝑘= 0
𝑘
𝑛
𝑘= 0
Onde estamos considerando que no primeiro
somatório para cada k fazemos 𝑎
𝑘
/N e depois
somamos. No segundo somatório somamos todos os
𝑘
e o resultado da soma dividimos por N. Do ponto
de vista analítico, as duas expressões são
equivalentes, mas a segunda forma apresenta melhor
resultado do ponto de vista computacional, pois
realiza menos operações e comete menos erros de
truncamento ou arredondamento. Outros exemplos
interessantes é que em aritmética computacional é
possível que para A dado exista um ε ≠ 0 tal que:
A + ε = A.
Analiticamente a expressão acima é verdadeira
se, e somente se, ε = 0.
Outro assunto importante são os tipos de
esquemas numéricos. Eles são classificados como
esquemas diretos e esquemas iterativos. Os
esquemas diretos são aqueles que fornecem a
solução após um número finito de passos. Os
esquemas iterativos são aqueles que repetem um
número de passos até que um critério de parada seja
satisfeito. Como exemplo considere o algoritmo que
é usado para determinar a precisão de uma máquina
digital.
Algoritmo: Epsilon da Máquina
𝐸𝑝 ← 1
Enquanto ( 1 + 𝐸𝑝) > 1 , faça:
𝐸𝑝 ← 𝐸𝑝/ 2
fim enquanto
OutPut: 2 Ep
O critério de parada é ( 1 + 𝐸𝑝) ≤ 1 e cada
execução de laço Enquanto ( while ) é chamado de
iteração. Máquinas diferentes apresentarão
resultados diferentes.
Outro fator que pode influenciar nos resultados é
a linguagem de programação usada na
implementação dos algoritmos (Pascal, Fortan, C++,
MatLab, etc). E mesmo quando usamos uma mesma
linguagem, mas compiladores diferentes (Ex. C++
da Borland e C++ da Microsoft), os resultados
podem apresentar diferenças. Existem várias
bibliotecas de rotinas numéricas em diversas
linguagens e algumas disponíveis na Internet. Um
exemplo é a LIMPACK: uma coleção de rotinas em
Fortran para soluções de sistemas lineares.
O MatLab surgiu nos anos 1970 como um
Laboratório de Matrizes para auxiliar os cursos de
Teoria Matricial, Álgebra Linear e Análise
Numérica. Ele é tanto um ambiente quanto uma
linguagem de programação, e um de seus aspectos
mais poderosos é que os problemas e as soluções são
expressos numa linguagem matemática bem
familiar.
Apesar das últimas versões do MatLab ter
expandido sua capacidade, o elemento básico dos
dados ainda é um vetor, o qual não requer
declaração de dimensão ou tipo variável. O MatLab
é um sistema interativo, onde os comandos podem
ser executados na janela de comandos ou por
programas.
1.1.1 CÁLCULO NA JANELA DE COMANDOS
Um cálculo simples pode ser executado na
janela de comandos digitando as instruções no
prompt como você faria numa calculadora.
>> 3*4 + 5
ans = 17
Os símbolos dos operadores aritméticos são
dados na Tabela 1.1. As expressões são calculadas
da esquerda para a direita, com a potenciação tendo
precedência, seguido da multiplicação e divisão
(mesma precedência) e pela adição e subtração
(também com a mesma precedência).
uso posterior é pelo uso de variáveis.
>> s = 3 + 4 + 7 + 12
s = 26
Tabela 2.1 Operadores Aritméticos
OPERAÇÃO SÍMBOLO
Adição
Multiplicação
Subtração
Divisão
Potenciação
a + b
a * b
a – b
a/b ou b/a
a^b
O nome da variável pode consistir de, no
máximo, 31 caracteres, iniciando sempre por um
caractere alfa seguido de qualquer combinação de
caracteres do tipo alfa, numérico e underscores. Por
exemplo, resultado_da_soma_2. Ao contrário de
outras linguagens, o MatLab diferencia as variáveis
que usam letras minúsculas e maiúsculas. Isto é, as
variáveis Contas, contas, conTas e CoNtAs, são
consideradas como quatro variáveis diferentes. Para
saber quais as variáveis que estão ativas utilizar o
comando who****. As variáveis são tratadas como
matrizes, apesar dos escalares não serem
apresentados na rotação matricial. Um vetor linha
pode ser definido como
>> x=[ 1 2 3 4]
x =
1 2 3 4
Também podemos separar os elementos por
vírgulas. Já um vetor coluna pode ser definido da
seguinte forma
>> y=[5; 6; 7; 8]
y =
5
6
7
8
Um exemplo de uma matriz 3 x 4.
>> 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 - ésima linha e na j - ésima
coluna, denotados por 𝑎
𝑖𝑗
podem ser obtidos pelo
comando 𝑎(𝑖, 𝑗), por exemplo 𝑎
= 7. Em
algumas situações necessitamos de vetores com
alguma estrutura particular. Por exemplo, um vetor
cujo o primeiro termo vale − 2 e o ultimo vale 3 e os
termos intermediários variam ao passo de 0,5. Este
vetor pode ser definido pela linha de comando:
>> v= −2 : 0.5 : 3
v =
De forma geral este comando tem a sintaxe
v = a : passo : b
Algumas matrizes elementares podem ser
geradas através de comandos simples, por exemplo,
a matriz identidade:
>> I= eye (3)
I =
1 0 0
0 1 0
0 0 1
Matriz n x m cujo elementos são todos iguais a 1:
>> A = ones (2 , 3 )
A=
1 1 1
1 1 1
Matriz nula de ordem n x m:
>> B = zeros (3 , 4 )
A=
0 0 0 0
0 0 0 0
0 0 0 0
Como na maioria das linguagens de
programação, o MatLab oferece diversas funções
elementares que são importantes em matemática. A
Tabela 1.3 apresenta uma lista destas funções e sua
sintaxe.
Tabela 1.3 Funções Elementares
FUNÇÃO SINTAXE
Valor Absoluto
Arco Cosseno
Arco Seno
Cosseno
Exponencial 𝑒
𝑥
Logaritmo Natural
Logaritmo base 10
Seno
Raiz Quadrada
Tangente
abs(x)
acos(x)
asin(x)
cos(x)
exp(x)
log(x)
log10(x)
sin(x)
sqrt(x)
tan(x)
Se desejamos gerar o gráfico da função 𝑠𝑒𝑛(𝑥)
no intervalo [−𝜋 , 𝜋] devemos proceder da seguinte
forma:
>> x= −pi : 0.01 : pi;
>> f = sin ( x );
>> plot (x , f)
Note, que na definição do vetor x, usamos o
passo igual a 0.01. Isto determina a quantidade de
pontos que o comando plot usa para gerar o gráfico.
Quanto mais ponto mais perfeito será o gráfico (em
contra partida maior o tempo de execução). Se
tivéssemos o passo 0.5 não teríamos um gráfico de
boa qualidade.
1.1.2 M-arquivos
Existem dois tipos de programas em MatLab:
scripts e functions. Ambos devem ser salvos com
extensão * .m no diretório corrente. Uma diferença
básica entre os dois é que o scripts trata as variáveis,
nele definidas, como variáveis globais, enquanto
functions trata as variáveis como variáveis locais.
Desta forma functions tem que ter um valor de
retorno.
Scripts. Permite que um conjunto de comandos e
definições sejam executados através de um único
comando na janela de comandos. Como exemplo, o
Um número x que satisfaz a equação 𝑓(𝑥) = 0 é
chamado de raiz ou zero de f. O objetivo é encontrar
um intervalo [ a, b ], de pequena amplitude (𝑏 − 𝑎 ≪
1 ), que contenha a raiz que desejamos encontrar.
Para isto usaremos duas estratégias: análise gráfica e
tabelamento da função.
A análise gráfica é baseada na ideia de que, a
partir da equação 𝑓(𝑥) = 0 , podemos obter uma
equação equivalente 𝑔(𝑥) − ℎ(𝑥) = 0 , onde g e h
sejam funções mais simples e de fácil análise
gráfica. Esboçando o gráfico de g e h podemos
determinar os pontos x , onde as curvas se
interceptam, pois estes pontos serão as raízes de
Exemplo 2.1 Sendo 𝑓(𝑥) = 𝑒
−𝑥
− 𝑥 temos 𝑓(𝑥) =
− ℎ(𝑥), onde 𝑔
−𝑥
e ℎ
Figura 2.1 Exemplo 2.1 da função f(x) = e
−x
− x.
há outro ponto de intercepção;
A fase de refinamento será mais eficiente
quanto menor for a amplitude do intervalo que
contém a raiz. Para obtermos um intervalo de menor
amplitude usaremos a estratégia do tabelamento que
é baseada no seguinte Teorema.
Teorema 2.1 Seja 𝑓(𝑥) uma função contínua num
intervalo [ a, b ]. Se 𝑓
< 0 então existe pelo
menos uma raiz 𝜉 ∈
O Teorema 2.1 garante a existência de pelo
menos uma raiz, mas pode ser que o intervalo
contenha mais de uma raiz. E ainda, 𝑓′(𝑥) preserva
o sinal em [𝑎, 𝑏] e 𝑓(𝑎)𝑓(𝑏) < 0 , então o intervalo
contém uma única raiz.
Se 𝑓(𝑎)𝑓(𝑏) > 0 não podemos afirmar nada
sobre a existência ou não de raízes.
Exemplo 2.2 Dá análise da Fig. 2.1 a função 𝑓(𝑥) =
−𝑥
− 𝑥 tem uma raiz em [𝑎, 𝑏]. Tabelando a função
para valores a partir de zero e espaçados de 0,
observa-se que:
x 0 0.25 0.5 0.75 1
𝑓
( 𝑥
)
No intervalo
logo a raiz pertence ao intervalo.
Note que 𝑓
′
−𝑥
− 1 < 0 , ∀ 𝑥 ∈ ℜ, isto
é, 𝑓’ preserva o sinal em
o que implica em
dizer que esta raiz é única!
Este método é baseado no Teorema 2.1. Seja
𝑓(𝑥) uma função contínua no intervalo [ a , b ] tal
que 𝑓(𝑎)𝑓(𝑏) < 0 e seja 𝜀 > 0 um número dado. A
ideia é reduzir a amplitude do intervalo até atingir a
precisão requerida: 𝑏 − 𝑎 < 𝜀, usando divisão
sucessivas do intervalo.
Figura 2.2 Representação geométrica do método da bissecção.
0
0
0
0
0
0
0
0
1
0
1
0
1
1
1
1
1
1
1
1
2
1
2
1
2
2
2
2
2
2
2
2
3
2
3
2
E assim vamos calculando a sequência 𝑥
𝑘
até que
seja satisfeito o critério de parada
𝑘
𝑘
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-0.
0
1
2
3
valores de x
h(x) = x
g(x) = exp(-x)
Esse critério garante que se tomarmos 𝑥̅ ∈ [𝑎
𝑘
𝑘
teremos a garantia que o erro é menor que 𝜀, isto é
𝑘
𝑘
A convergência é bastante intuitiva, como é
mostrado na Fig. 2.2. Vejamos a demonstração analítica
através do seguinte teorema.
Teorema 2.2 Seja f uma função contínua em [ a , b ], onde
𝑓(𝑎)𝑓(𝑏) < 0. Então o método da bissecção gera uma
sequência {𝑥 𝑘
} que converge para a raiz 𝜉 quando 𝑘 → ∞.
Prova : O método gera três sequências:
{ 𝑎
𝑘
} : Sequência não decrescente e limitada superior-
mente por 𝑏
0
. Logo
𝑎
0
≤ 𝑎
1
≤ ⋯ < 𝑏
0
⇒ ∃ 𝑀 ∈ ℝ
Tal que: lim
𝑘→∞
𝑎
𝑘
= 𝑀
{𝑏
𝑘
}: Sequência não crescente e limitada inferiormente
por 𝑎
0
. Logo
𝑏
0
≥ 𝑏
1
≥ ⋯ > 𝑎
0
⇒ ∃ 𝑚 ∈ ℝ
Tal que: lim
𝑘→∞
𝑏
𝑘
= 𝑚
{𝑥
𝑘
}: Por construção temos que
𝑥
𝑘
=
𝑎
𝑘
𝑘
2
⇒ 𝑎
𝑘
< 𝑥
𝑘
< 𝑏
𝑘
, ∀ 𝑘 ∈ ℕ ( 1 )
A amplitude de cada intervalo gerado é metade da
amplitude do intervalo anterior, assim temos,
𝑏
𝑘
− 𝑎
𝑘
=
𝑏
0
− 𝑎
0
2
𝑘
Calculando o limite quando 𝑘 → ∞ temos
lim
𝑘→∞
(𝑏
𝑘
− 𝑎
𝑘
) = lim
𝑘→∞
(
𝑏
0
− 𝑎
0
2
𝑘
) = 0
Isso segue que
lim
𝑘→∞
𝑏
𝑘
− lim
𝑘→∞
𝑎
𝑘
= 0 ⇒ 𝑀 − 𝑚 = 0 ⇒ 𝑀 = 𝑚
Usando este fato e calculando o limite em (1)
𝑚 = lim
𝑘→∞
𝑎
𝑘
< lim
𝑘→∞
𝑥
𝑘
< lim
𝑘→∞
𝑏
𝑘
= 𝑚 ⇒ lim
𝑘→∞
𝑥
𝑘
= 𝑚
Portanto m é raiz de f , isto é f ( m ) = 0. Em cada iteração
𝑓(𝑎 𝑘
)𝑓(𝑏
𝑘
) < 0.
O método de Newton-Raphson pode ser usado para
calcular raízes reais e complexas de 𝑓(𝑥) = 0. É
determinado de tal forma que teremos uma função de
iteração tal que 𝜙
′
(𝜉) = 0 , onde 𝜉 é uma raiz de f. Com
isto temos a garantia que existe um intervalo [𝑎, 𝑏] que
contém a raiz e que
| 𝜙′
( 𝑥
)| ≪ 1 e conseqüentemente a
convergência será mais rápida.
Para determinar a forma de 𝜙 considere uma função
𝐴(𝑥) continua e diferenciável e 𝐴(𝑥) ≠ 0 , ∀𝑥:
𝑓(𝑥) = 0 ⇒ 𝐴(𝑥)𝑓(𝑥) = 0 ⇒ 𝑥 = 𝑥 + 𝐴(𝑥)𝑓(𝑥) = 𝜙(𝑥)
Calculando a derivada de 𝜙 na raiz 𝜉 temos que
𝜙′(𝜉) = 1 + 𝐴
′
(𝜉)𝑓(𝜉) + 𝐴(𝜉)𝑓
′
(𝜉) = 0
Como 𝑓
( 𝜉
) = 0 e consideramos que 𝑓
′
(𝜉) ≠ 0 , segue
que
𝐴(𝜉) = −
1
𝑓
′
(𝜉)
Assim tomamos a função 𝐴
( 𝑥
) = − 1 /𝑓
′
(𝑥),e portanto
teremos
𝜙(𝑥) = 𝑥 −
𝑓(𝑥)
𝑓
′
(𝑥)
Com esta função de iteração montamos o processo
iterativo do método de Newton-Raphson, onde dado 𝑥
0
𝑥
𝑛+ 1
= 𝑥
𝑛
−
𝑓(𝑥
𝑛
)
𝑓
′
(𝑥
𝑛
)
, 𝑛 = 0 , 1 , 2 , …
Graficamente este método tem a interpretação
mostrada na Fig. 2.3. A derivada de uma função no ponto
𝑥
𝑛
é igual a tangente do ângulo formado entre a reta
tangente a curva, no ponto 𝑥
𝑛
, e o eixo x.
Usando a relação sobre o triangulo retângulo
temos
𝑓
′
(𝑥
𝑛
) = tan(𝛼) =
𝑓(𝑥
𝑛
)
𝑥
𝑛
− 𝑥
𝑛+ 1
⇒ 𝑥
𝑛+ 1
= 𝑥
𝑛
−
𝑓(𝑥
𝑛
)
𝑓
′
(𝑥
𝑛
)
Teorema 2.3 Sejam f, f’, f”, funções contínuas num
intervalo [ a , b ], onde existe uma raiz 𝜉. Supor que
𝑓
′
(𝜉) ≠ 0_. Então existe um intervalo_ [𝑎̅ , 𝑏
̅
] ⊂ [𝑎, 𝑏] ,
contendo a raiz 𝜉 , tal que se 𝑥
0
∈ [𝑎̅ , 𝑏
̅
] , a seqüência {
𝑥
𝑛
} gerada pelo processo iterativo
𝑥
𝑛+ 1
= 𝑥
𝑛
−
𝑓(𝑥
𝑛
)
𝑓
′
( 𝑥
𝑛
)
converge para a raiz.
Exemplo 2.3 Considere 𝑓(𝑥) = 𝑒
−𝑥
− 𝑥 possuindo uma
raiz no intervalo [0.5, 0.75], vamos achar uma
aproximação usando 𝑥
0
= 0. 625 𝑒 𝜀 = 0. 006. Sendo
𝑓
′
(𝑥) = −𝑒
−𝑥
− 1
teremos o processo iterativo