Você está na página 1de 19

RELATÓRIO DA RESOLUÇÃO DO TRABALHO 01 DE CÁLCULO

NUMÉRICO
Elyaquim D Torres e Rebeca T de Siqueira

Engenharia Civil, Núcleo de Tecnologia, Universidade Federal de Pernambuco, Caruaru,


Pernambuco, Brasil, http://www.ufpe.br/pt

Palavras-chave: Zero de funções, Cálculo Numérico, Trabalho.

Resumo. Este relatório fornece informações dos procedimentos e métodos utilizados para a resolução
do trabalho 01 da disciplina de Cálculo Numérico ministrada pelo Prof. Dr. Gustavo Bono. Este
relatório também contém as implementações computacionais utilizadas para a resolução de cada um
dos problemas propostos.
1 INTRODUÇÃO
Este relatório fornece informações sobre os métodos e implementações computacionais
utilizadas para a resolução de problemas específicos propostos pelo professor orientador,
exibindo-as conforme a abordagem dos exercícios que compõem a lista. O principal tema
abordado por tais atividades são referentes às diferentes formas de solucionar uma função
encontrando os pontos onde f(x)=0, ou seja, sua(s) raiz(es).

2 MUDANÇAS DE BASE
Devido as diversas formas de representação de um número, às vezes, faz-se necessária a
representação do mesmo em outra base dependendo onde ou em que plataforma ele será
utilizado, afim de que a compatibilidade ou qualquer outra variável no momento da
compilação não venham ser comprometida. Tendo em vista isso, os exercícios a seguir
trabalham a mudança de base de diversos números.

2.1 Exercício 1
Para converter um número que está em uma base qualquer para a base decimal, basta
multiplicar tal número pela base elevada à posição do número. Em termos práticos, tem-se
que:

Número
Número Base Processo em base
decimal
100 2 (0 x 20) + (0 x 21) + (1 x 22) 4
100 3 (0 x 30) + (0 x 31) + (1 x 32) 9
100 B (0 x B0) + (0 x B1) + (1 x B2) B2
12 5 (2 x 50) + (1 x 51) 7
AA 16 (10 x 160) + (10 x 161) 170
7,1 8 (7 x 80) + (1 x 8-1) 7,125
3,12 5 (3 x 50) + (2 x 5-2) + (1 x 5-1) 3,28
Tabela 3: Conversão de números para a base decimal.

2.2 Exercício 2
Utiliza-se o mesmo processo aplicado anteriormente para a resolução do exercício 02. Os
resultados obtidos foram:

Número
Número Base Processo em base
decimal
25,13 8 (5x80) + (2x81) + (1x8-1) + (1x8-2) 21,171875
101,1 2 (1x20) + (0x21) + (1x22) + (1x2-1) 5,5
12F,4 16 ... 303,25
11,2 3 ... 4,66666
Tabela 4: Conversão de números para a base decimal.
3 MÉTODOS PARA ENCONTRAR O ZERO DA FUNÇÃO
Dentre os diferentes métodos utilizadas para encontrar o zero de uma função, destacam-se
nesse relatório os métodos: da bisseção, do ponto fixo, da secante e de Newton-Raphson. Tais
métodos serão comparados em relação às raízes encontradas, tempo de execução, efetividade,
benefícios e limitações. É necessário salientar que para determinados exercícios, as
implementações realizadas no Matlab trabalharam com o arredondamento da última casa
decimal e esporadicamente, truncamento na sexta casa decimal.

3.1 Método da bisseção


Utilizando-se de uma convergência linear, o método da bisseção baseia-se em encontrar a
raiz, ou aproximar-se numericamente dela, de uma determinada função dentro de um intervalo
pré-determinado inicialmente. Caso a raiz da função não seja exata, o método da bisseção
pode convergir interminavelmente para a raiz, de modo que sejam necessárias infinitas
operações para determiná-la com exatidão. Por conta disso, faz-se necessário impor um limite
de iterações máximas que podem ser realizadas ou uma tolerância para o erro associado às
iterações.
Nesse método, dado uma função F(x) e o intervalo [a,b], calcula-se um valor para X
através da equação:
X = (a+b) / 2, (1)
de modo que, se f(X)=0 então ‘X’ é raiz da função, caso contrário, deve-se verificar se o
produto de F(a)F(X) resulta em um número menor que zero, sendo assim, a constante ‘b’
definida no intervalo é substituída pelo valor de ‘X’, pois isso implica que há uma raiz no
intervalo [a,X]. Porém, se o produto de F(b)F(X) for menor que zero, a constante ‘a’ é
substituída pelo valor de ‘X’ e o intervalo é redefinido para [X, b]. Só é necessário realizar o
cálculo do produto uma vez por interação, tendo em vista que, se o produto F(a)F(X) for
menor que zero, consequentemente F(b)F(X) será maior que zero. O erro associado à
operação é obtido através da equação abaixo:

Erro = | a + b | / 2. (2)

3.1.1 Exercício 3
Utilizou-se o método da bisseção para encontrar a raiz da função:

𝑥 = cos(𝑥), (3)
no intervalo inicial [𝑎,𝑏]=[0,1] com o limite de oito interações.
Para facilitar o processo, foi utilizado o programa Matlab para a implementação de um
algoritmo que atendesse às especificações do problema. Como visto no Algoritmo_01 posto
em anexo, após a inserção da função na linha 03 e a inserção do intervalo inicial nas linhas 05
e 06, foi estabelecido o valor máximo de iterações a partir da variável max_int (linha 08).
Após o início do laço de repetição, o algoritmo define o valor de X a partir da equação (1)
na linha 12, em seguida, verifica se foi possível encontrar a raiz da função fornecida,
aplicando o valor de X à função e comparando ao inteiro zero (linha 16-19). A variável ‘cont’
registrará a quantidade de iterações realizadas. Caso não seja encontrada a raiz, os intervalos
são redefinidos de acordo com o resultado do produto (linha 24-29). O processo se repete até
atingir o valor definido de iterações.
Após a execução do algoritmo para a função (3), são obtidos os seguintes resultados:
Erro
Iteração a b X
associado
1 0 1 0.5 0.5
2 0.50 1.00 0.75 0.25
3 0.500 0.750 0.625 0.125
4 0.6250 0.7500 0.6875 0.0625
5 0.625000 0.687500 0.656250 0.031250
6 0.625000 0.656250 0.640625 0.015625
7 0.640625 0.656250 0.648438 0.007813
8 0.640625 0.648438 0.644531 0.003906
Tabela 1: Resultados obtidos para a função (3) pelo método da bisseção.

Desta forma, chega-se à conclusão que o método da bisseção converge para raiz da função
(3) definindo-a como 0.644531 com um erro associado de 10-2 para um máximo de oito
iterações. Pode-se inferir que a raiz de tal função é um dízima não periódica, logo, pelo
método da bisseção, conclui-se que seriam necessárias infinitas interações para chegar à raiz
precisa da função.

3.1.2 Exercício 4
Fornecido o polinômio:
P(x) = -4 + 8x – 5x2 + x3 , (4)
utilizou-se o mesmo método anterior para encontrar uma de suas raízes no intervalo [ , 3].
Para este exemplo, foi estabelecido um máximo de vinte iterações para que o método fosse
mais preciso. Aplicou-se os intervalos e a função no Algoritmo_01 e obteve-se os seguintes
resultados:

Erro
Iteração a b X
associado
1 0.0 3.0 1.5 1.5
2 0.00 1.50 0.75 0.75
3 0.750 1.500 1.125 0.375
4 0.7500 1.1250 0.9375 0.1875
5 0.9375 1.125 1.031250 0.093750
... ... ... ... ...
18 0.999985 1.000008 0.999996 0.000011
19 0.999996 1.000008 1.000002 0.000006
20 0.999996 1.000002 0.999999 0.000003
Tabela 2: Resultados obtidos para a função (4) pelo método da bisseção.

Conclui-se que, pelo método de bisseção, a raiz para qual o método converge em
determinado intervalo é 1 (um). Das três possíveis raízes do polinômio (4), apenas uma foi
encontrada, pois o método de bisseção é limitado a encontrar somente uma raiz por intervalo,
independente se uma ou mais raízes estão presentes nele. Logo, para encontrar as outras raízes
do polinômio, é necessária a troca do intervalo, de modo que o primeiro valor médio de ‘X’
inclua a outra raiz do polinômio (que é 2) e não inclua a raiz 1, pois para o intervalo utilizado
nesse exercício, o valor de ‘X’ ficou entre 0 e 1,5, dessa forma, as demais operações foram
limitadas por esse novo intervalo [0,3/2], estreitando-o com o decorrer das iterações. Como
dentro desse intervalo só existia o número 1 como raiz do polinômio (4), o método convergiu
para ele. Logo, para encontrar as demais raízes do polinômio (4), faz-se necessária a mudança
do intervalo inicial proposto, de modo que, quando calculado o valor médio ‘X’, a raiz P(1)=0
não esteja inclusa.

3.1.3 Exercício 5
Ao tentar aplicar a função
f(x) = x4 - 4x2 + 4 (5)

ao Algoritmo_01 com um intervalo [0,2], observa-se que o método é ineficaz, pois o mesmo
fornece como raiz o número 1.999998 com erro associado de 10 -5 para o máximo de vinte
iterações, porém, tal número encontrado não é raiz da função (5). Isso ocorre porque o
polinômio (5) é uma função estritamente positiva, logo, nenhum produto f(a)f(x) ou f(b)f(x)
pode resultar em um número negativo. Mesmo diminuindo o intervalo, o algoritmo continua
encontrando raízes falsas, que quando aplicadas, não resultam em f(x)=0. Por conta dessa
limitação do método, conclui-se que o mesmo é ineficiente para encontrar as raízes da função
(5).

3.1.4 Exercício 6
Utilizando o Algoritmo_02, realizou-se três vezes o método da bisseção para solucionar a
função
f(x)= x = t (6)

sendo t=1, t=10 e t=100 no intervalo pré-definido [0,t]. Para o primeiro caso onde t=1
observou-se a quantidade de iterações necessárias para obtenção do número x* que é solução
para a função (6), até atingir um erro absoluto inferior a 10-6. Os resultados foram:

Iteração(01) a= 0.000000, b= 1.000000, x= 0.500000, erro= 0.500000


Iteração(02) a= 0.500000, b= 1.000000, x= 0.750000, erro= 0.250000
Iteração(03) a= 0.500000, b= 0.750000, x= 0.625000, erro= 0.125000
Iteração(04) a= 0.500000, b= 0.625000, x= 0.562500, erro= 0.062500
Iteração(05) a= 0.562500, b= 0.625000, x= 0.593750, erro= 0.031250
...
Iteração(18) a= 0.567139, b= 0.567146, x= 0.567142, erro= 0.000004
Iteração(19) a= 0.567142, b= 0.567146, x= 0.567144, erro= 0.000002
Iteração(20) a= 0.567142, b= 0.567144, x= 0.567143, erro= 0.000001

Desse modo, é possível observar que para t=1 a função (6) admite, para um erro
imediatamente inferior à 10-6, a solução x* = 0.567143, sendo necessário 21 iterações para a
obtenção de tal resultado (pois o algoritmo não imprime a última iteração, apenas aponta a
raiz).
O mesmo procedimento foi realizado para um valor t=10. Os resultados podem ser
conferidos abaixo:

Iteração(01) a= 0.000000, b= 10.000000, x= 5.000000, erro= 5.000000


Iteração(02) a= 0.000000, b= 5.000000, x= 2.500000, erro= 2.500000
Iteração(03) a= 0.000000, b= 2.500000, x= 1.250000, erro= 1.250000
Iteração(04) a= 1.250000, b= 2.500000, x= 1.875000, erro= 0.625000
Iteração(05) a= 1.250000, b= 1.875000, x= 1.562500, erro= 0.312500
Iteração(06) a= 1.562500, b= 1.875000, x= 1.718750, erro= 0.156250
...
Iteração(21) a= 1.745520, b= 1.745529, x= 1.745524, erro= 0.000005
Iteração(22) a= 1.745524, b= 1.745529, x= 1.745527, erro= 0.000002
Iteração(23) a= 1.745527, b= 1.745529, x= 1.745528, erro= 0.000001
Iteração(24) a= 1.745528, b= 1.745529, x= 1.745529, erro= 0.000001

Conclui-se que, para t=10, foram necessárias 24 iterações para que o método convergisse
para x* = 1.745529 com o erro absoluto imediatamente inferior à 10-6.
Para t=100, foram necessárias 27 iterações, chegando à solução x* = 3.385630 com erro
associado de 10-6. Os resultados podem ser observados a seguir:

Iteração(01) a= 0.000000, b= 100.000000, x= 50.000000, erro= 50.000000


Iteração(02) a= 0.000000, b= 50.000000, x= 25.000000, erro= 25.000000
Iteração(03) a= 0.000000, b= 25.000000, x= 12.500000, erro= 12.500000
Iteração(04) a= 0.000000, b= 12.500000, x= 6.250000, erro= 6.250000
...
Iteração(25) a= 3.385627, b= 3.385633, x= 3.385630, erro= 0.000003
Iteração(26) a= 3.385627, b= 3.385630, x= 3.385629, erro= 0.000001
Iteração(27) a= 3.385629, b= 3.385630, x= 3.385630, erro= 0.000001

Portanto, essas são as quantidades de iterações necessárias e as soluções encontradas para a


função (6) substituindo os três valores de ‘t’ com o intervalo inicial [0,t].

3.2 Método da iteração do ponto fixo

Dada uma f(x), um valor inicial é atribuído à x. Se f(x)=0, ‘x’ é raiz da função. Caso
contrário, pelo método do ponto fixo, isola-se um termo que possua a variável x de modo que
uma nova função g(x) seja igualada a ele, ou seja

x = g(x). (7)

Em seguida, usa-se o valor inicial fornecido de x ou calcula-se o ponto médio (x’) do


intervalo fornecido e aplica-o na função g(x). Caso o resultado de g(x) ou de g(x’) não seja
raiz para f(x), o mesmo é aplicado novamente em g(x). Posteriormente, aplica-se o resultado
de g(x) em f(x) e verifica se o mesmo é raiz da função. Caso contrário, o resultado provindo
de g(x) é aplicado novamente em g(x), e assim sucessivamente até que f(x) chegue a zero ou a
um valor inferior ao erro pré-determinado. Em suma, o método do ponto fixo baseia-se na
recursividade do resultado de g(x) e pode ser expresso a partir da seguinte função:

𝑥(𝑛+1) = 𝑔(𝑥𝑛) (8)

Assim como o método da bisseção, tal método possui convergência linear. O erro
associado é calculado através da equação
-
E=| | (9)

E a convergência ocorre quando |g’(x)|<1 com o erro diminuindo a cada iteração.

3.2.1 Exercício 7

Fornecida a equação:
ex = x + 2 (10)
calculou-se a solução x* usando

ex -2 = g(x) (11)

com x(1) = -1,8. Ao aplicar a função (10) e a função (11) com os parâmetros fornecidos, no
Algoritmo_03, com uma tolerância de 10-4 , obteve-se os seguintes resultados:

Iteração:1 --> x= -1.83470111 --> erro= 0.0189


Iteração:2 --> x= -1.84033878 --> erro= 0.0031
Iteração:3 --> x= -1.84123637 --> erro= 4.8749e-04
A raiz aproximada é: -1.84137881
o erro associado é: 7.7355e-05

Portanto, o número x* = -1.84137881 é raiz para a função (10) .

3.2.2 Exercício 8
Segundo o teorema do ponto fixo, a convergência ocorre quando |g’(x)|<1. Se |g’(x)|<1,
os erros diminuem a cada iteração. Logo, para que uma função g(x) seja ponto fixo de xex-10,
é preciso que dado um intervalo, o módulo da derivada de g(x) seja sempre inferior a 1.
Definindo um intervalo f:[1.3,2] (intervalo que inclui a raiz da função x= 1.745528002) e
derivando as opções:

a)
A derivada possui valor inferior à zero para qualquer valor no intervalo, logo o
teorema é satisfeito.

b)
A derivada possui valor inferior à zero para qualquer valor no intervalo, logo o
teorema é satisfeito.

c)
A derivada possui valor inferior à zero para qualquer valor no intervalo, logo o
teorema é satisfeito.
3.3 Método de Newton-Raphson e da secante
Ambos os métodos complementam um ao outro, porém, são perfeitamente funcionais se
aplicados de forma separada. O método de Newton-Raphson é um dos métodos mais
aplicados para encontrar o zero de funções devido a sua boa efetividade, necessitando de bem
menos interações para convergir a uma raiz, pois utiliza-se uma convergência quadrática.
Dado um ponto inicial xi uma reta tangente é traçada a partir do ponto f(xi). Tal reta aponta
um novo ponto xi+1 , no eixo das ordenadas, que possui uma imagem associada f(xi+1). Tal
reta tangente vai sendo calculada até que atinja um valor ‘c’ tal que f(c)=0 ou que f(c) < erro.
Quando a primeira condição é satisfeita, diz-se que ‘c’ é raiz da função. Em termos
simbólicos tem-se que:
( )
- ( )
, (12)

de modo que f ’(xi) 0. O erro associado é calculado através da equação (9).


Em algumas situações, tem-se que a derivada de f(x) em certos pontos próximos à solução
aproxima-se muito de zero, ou seja, f(x) = 0. Para resolver tal problema, foi criado o método
da secante, que complementa o método de Newton-Raphson de forma que não é necessário
conhecer-se a derivada analítica da função f(x). Nesse método, calcula-se f ’(x) em uma
diferença recursiva regressiva, de modo que:

(𝑥 ) (𝑥 )
(𝑥 ) (13)
𝑥 𝑥

Portanto, o valor da raiz para o método da secante dar-se pela equação:

(𝑥 )(𝑥 𝑥)
𝑥 𝑥 ( ) (14)
(𝑥 ) (𝑥 )

Porém, diferentemente do método de Newton-Raphson, o método da secante não possui


convergência quadrática e sim uma convergência equivalente à p=1,618 (sendo p=1 a
convergência linear e p=2 a quadrática). Por conta disso serão necessárias, geralmente, mais
iterações.

3.3.1 Exercício 9

Dada a função:

f(x) = cos (x) – x2 (15)

foram realizadas iterações até obter estabilidade no quinto dígito. O parâmetro para aplicação
de tal função ao método de Newton-Raphson é x(0) = 1. Tais informações foram aplicadas ao
Agoritmo_04 e os resultados obtidos foram:

Iteração:1 --> x= 0.838218 --> erro= 0.1930


Iteração:2 --> x= 0.824242 --> erro= 0.0170
Iteração:3 --> x= 0.824132 --> erro= 1.3293e-04
a raiz aproximada é: 0.824132
o erro associado é: 8.1885e-09
A raiz encontrada para a função (13) foi 0.824132 com erro associado de 8.1885e-09 e
foram necessárias quatro iterações para a obtenção de tal raiz (pois o algoritmo não imprime a
última iteração devido à quebra do laço de repetição no comando ‘if’ (Algoritmo_4, linha 22 ,
em anexo) apenas apresenta seu resultado). É notório o decaimento significativo na
quantidade de iterações se comparados os resultados com o método da bisseção. Disso
justifica-se a preferência da utilização de tal procedimento.

3.3.2 Exercício 10

Dada a função

tan(x) = 2 – x2 (16)
Calculou-se as duas primeiras raízes positivas com o método de Newton-Raphson (NR)
(Algoritmo_4) e com o método da secante (Algoritmo_5) para os valores iniciais de x= 3 e
x=1.5 respectivamente. Para x=3, utilizando NR, obteve-se os seguintes resultados:

Iteração:1 --> x= 2.02319924 --> erro= 0.4828


Iteração:2 --> x= 2.01933970 --> erro= 0.0019
a raiz aproximada é: 2.01935540
o erro associado é: 7.7744e-06

Logo, para dado valor inicial de x, o algoritmo retornou como raiz da função (16) o
resultado 2.01935540. Como no método de NR o processo é regressivo, tem-se que antes de
x=3, a primeira raiz encontrada é 2.019355. Para x=1.5, obteve-se os seguintes resultados:

Iteração:1 --> x= 1.42925109 --> erro= 0.0495


Iteração:2 --> x= 1.29630126 --> erro= 0.1026
Iteração:3 --> x= 1.09686178 --> erro= 0.1818
Iteração:4 --> x= 0.93206388 --> erro= 0.1768
Iteração:5 --> x= 0.88601333 --> erro= 0.0520
Iteração:6 --> x= 0.88376477 --> erro= 0.0025
A raiz aproximada é: 0.88375996
O erro associado é: 5.4484e-06

Portanto, para dado valor inicial de x, o algoritmo retornou como raiz da função (16) o
resultado 0.88375996. Isso afirmar a primeira raiz encontrada imediatamente antes de 1.5 é
0.883760.
No método da secante, para a x=3 obteve-se os seguintes resultados:

Iteração:1 --> x= 2.17383740 --> erro= 0.3333


Iteração:2 --> x= 1.98544300 --> erro= 0.3800
Iteração:3 --> x= 2.02420665 --> erro= 0.0949
Iteração:4 --> x= 2.01953951 --> erro= 0.0192
Iteração:5 --> x= 2.01935445 --> erro= 0.0023
a raiz aproximada é: 2.01935540
o erro associado é: 9.1642e-05
E para x=1.5 obteve-se os seguintes resultados:

Iteração:1 --> x= 1.75077047 --> erro= 1


Iteração:2 --> x= 1.08389096 --> erro= 0.4288
Iteração:3 --> x= 1.21298712 --> erro= 0.6153
Iteração:4 --> x= 0.95699726 --> erro= 0.1064
Iteração:5 --> x= 0.90962082 --> erro= 0.2675
Iteração:6 --> x= 0.88559075 --> erro= 0.0521
Iteração:7 --> x= 0.88380505 --> erro= 0.0271
Iteração:8 --> x= 0.88376004 --> erro= 0.0020
a raiz aproximada é: 0.88375996
o erro associado é: 5.0933e-05

Ao comparar os resultados de ambos os métodos, desconsiderando o arredondamento


realizado pela plataforma de compilação, vê-se que ambos os métodos convergem para o
mesmo valor da raiz. Porém, pelo fato de ambos possuírem convergências diferentes, o
método da secante precisa realizar mais iterações para chegar ao mesmo valor encontrado no
método de NR. Para esse exercício em específico, o método da secante realizou 2 iterações a
mais para x=3 e x=1 em comparação ao método de NR.

3.3.3 Exercício 11
O método do gráfico baseia-se em encontrar a raiz de uma determinada função após dividi-
la em duas funções distintas. Ao plotar o gráfico de ambas funções, a coordenada ‘x’ do(s)
ponto(s) de interseção entre elas são raízes da função que as originou.
Dada as funções

=x (17)
= 2x (18)
f(x) = x5/10 + x4 – 3x2 +1 (19)

Usou-se o método do gráfico para encontrar suas raízes. (Gráficos em anexo)

A partir dos gráficos anexados, tem-se que para a função (17) as raiz encontrada foi x=
0,65, para a função (18) a raiz foi x= 0,42 e para a função (19) a raízes encontradas foram x 1=
-0,61 e x2 = 0,62.
Utilizando o Algoritmo_4 para calcular as raízes da função com o método de Newton-
Raphson obteve-se os seguintes resultados:

Para a função (17): Para a função (18):


X0=1 e x= 0.65291864 X0=1 e x- 0.41936482
Interações = 3 Interações = 4
Tempo = 0.546s Tempo = 0.736s

A função (19) possui 4 raízes, logo, para calculá-las usando o método de Newton-Raphson
serão necessários 4 valores iniciais distintos.

Raiz 1: x0= 2 e x= 1.48956421 Raiz 3: x0=-0.5 e x= -0.61485211


Interações = 5 Interações = 3
Tempo = 0.806s Tempo = 0.541s

Raiz 2: x0=1 e x= 0.62138288 Raiz 4: x0=-1.5 e x= -1.81504997


Interações = 5 Interações = 6
Tempo = 0.740s Tempo = 0.826s

Utilizando agora o Algoritmo_5 para calcular as raízes da função com o método da


secante obteve-se os seguintes resultados:

Para a função (17): Para a função (18):


X0=2; x1=1 e x= 0.65291864 X0=2; x1=1 e x= 0. 41936482
Interações= 5 Interações = 6
Tempo= 0.766s Tempo= 0.835s

A função (19) possui 4 raízes, logo, para calculá-las usando o método de Newton-Raphson
serão necessários 4 valores iniciais distintos.

Raiz 3: X0= 0; x1= -1 e x = -0.61485211


Raiz 1: X0=3;x1=2 e x= 1.48956420
Interações = 6
Interações = 8
Tempo = 0.950s
Tempo = 1.289s
Raiz 4 : X0 = -1; x1= -2 e
Raiz 2: X0 = 1; x1 =0 e x = 0. 62138288
x = -1.81504997
Interações = 6
Interações = 9
Tempo = 1.416s
Tempo = 1.250s

O Matlab possui uma função própria denominada ‘fzero’ que calcula a raiz de uma função
solicitando a função e um ponto inicial, encontrando apenas uma raiz por vez imediatamente
anterior ao ponto inicial. O comando foi escolhido devido à sua alta aplicabilidade e de maior
taxa de convergência se comparado aos métodos anteriores. Os resultados obtidos e o tempo
de execução foram:

Para a função (18):


Para a função (17):
x = 0.419364824019132
x = 0.652918640419205
int =5
int =6
tempo = 0.178s
tempo = 0.161s

Para as quatro raízes da função (19) os resultados foram:

Raiz 1: x =1.489564200687567 Raiz 3: x = -0.614852106367053


int = 13 int = 6
tempo = 0.206s tempo 0.164s

Raiz 2: x =1.489564200687567 Raiz 4 : x =-1.815049973337195


int = 13 int = 7
tempo = 0.206s tempo= 0.231s

Como já era esperado o método de NR levou menos iterações e menos tempo de


processamento que o método da secante devido a sua taxa de convergência ser maior. Porém
ambos os métodos apresentam o mesmo resultado para as raízes encontradas, o que já era
esperado visto que, ambos partem do mesmo pressuposto da reta secante e da reta tangente.
A função própria do Matlab une dois métodos, que são o de bisseção e o de interpolação.
O primeiro deles é utilizado para estabelecer um intervalo que será usado no método da
interpolação. Este, uma vez iniciado, calcula as raízes da função fornecida. O tempo
necessário e a iterações realizadas por esse método são inferiores aos outros dois já
comentados pois o mesmo possui uma taxa de convergência cúbica o que garante a ele uma
maior efetividade e o mesmo fornece uma maior quantidade de algarismos significativos.
REFERÊNCIAS

BONO, Gustavo. Zeros de funções. 2019 . 28 slides

MATHWORKS. Fzero - Root of nonlinear function. Disponível em: <


https://www.mathworks.com/help/matlab/ref/fzero.html > Acesso em: 04 de abril de 2019
às 20:55h
ANEXOS

Algoritmo_01

1 %Implementando o método da bisseção (Q3)


2 disp('Digite a função: ');
3 f = input ('','s');
4 %Epecificando o intervalo
5 inferior = 0;
6 superior = 1;
7 %especificando o nº máximo de interações
8 max_int = 8;
9 cont = 1;
10 while(cont<=max_int)
11 %calculando o valor médio
12 x = (inferior+superior)/2;
13 %imprimi ndo os valores de cada interação
14 fprintf ('Interação(%d)\n a= %f, b= %f, x= %f, erro= %f\n',cont, inferior,
15 superior, x, tol);
16 if(subs(f,x)== 0)
17 fprintf('A raiz é: %d\n',x);
18 break;
19 end
20 cont = cont+1;
21 %verificando o sinal do produto entre as funções
22 %se os sinais forem iguais, então o produto será positivo, portanto,
23 %maior que zero
24 if sign(subs(f,x))== sign(subs(f,inferior))
25 inferior = x;
26 else
27 superior = x;
28 end
29 end
30 fprintf('A raiz é: %f\n', x);
31 fprintf('O erro associado é: %f\n', tol);

Algoritmo_02

clear all
clc
%Implementando o método da bisseção (Q3)
disp('Digite a função:');
f = input ('','s');

%Epecificando o intervalo
inferior = 0;
superior = 1;
%especificando a tolerancia
tol = sym(abs(inferior-superior)/2);
cont = 1;

while(tol>(1e-6))
%calculando o valor médio

x =sym((inferior+superior)/2);
tol = sym(abs(inferior-superior)/2);

%imprimindo os valores de cada interação


fprintf ('Interação(%d)\n a= %f, b= %f, x= %f, erro= %f\n',cont, inferior, superior, x, tol);

if(subs(f,x)== 0)
fprintf('A raiz é: %d\n',x);
break;
end
cont = cont+1;

%verificando o sinal do produto entre as funções

if sign(subs(f,x))== sign(subs(f,inferior))
inferior = x;
else
superior = x;
end
end
fprintf('A raiz é: %f\n', x);
fprintf('O erro associado é: %f\n', tol);

Algoritmo_03

%Utilizando o método do Ponto Fixo para calcular a raiz da função


%f(x)=e^x-x-2
%Definindo a função, para isso, x deverá ser tratada como variável
%simbólica, para evitar problemas na derivação
syms x;
f=exp(x)-x-2;
fint= exp(x)-2;
%Derivando a função
df=diff(f);

%Estabelecendo os critérios de parada


tol = 0.0001;%tolerancia
max = 50; %maximo de iterações
%Estabelecendo o valor inicial (x0)
x0 = -1.8;
xf = x0; %variavel para armazenar o valor final da raiz

%variável cque conta as iterações


cont= 1;
while cont<=max
xt=eval(subs(fint,x,x0)); %função de iteração g(x)
erro=abs((xt-x0)/xt);
x0=xt;
if erro<tol
xf=x0;
break
else
fprintf('Iteração:%d --> x= %.8f --> erro= ',cont,xt);
disp(erro);
cont=cont+1;
end
end
fprintf('a raiz aproximada é:\n %.8f \n',xf);
fprintf('o erro associado é:\n');
disp(erro);

Algoritmo_04

%Utilizando o método NR para calcular as raizes da função f(x)=cos(x)-x^2


%Definindo a função, para isso, x deverá ser tratada como variável
%simbólica, para evitar problemas na derivação
syms x;
f=cos(x)-x^2;
%Derivando a função
df=diff(f);

%Estabelecendo os critérios de parada


tol = 0.0001;%tolerancia
max = 50; %maximo de iterações

%Estabelecendo o valor inicial (x0)


x0 = 1;
xf = x0; %variavel para armazenar o valor final da raiz

cont = 1;
while cont<=max
xt= eval(x0-(subs(f,x,x0)/subs(df,x,x0)));%variável para aplicar o método e testar as raízes
erro=(abs((xt-x0)/xt));
x0=xt;
if(1.0e-4>erro)
xf=x0;
break
else
x0=xt;
fprintf('Iteração:%d\n x= %.8f\n',cont,xt);
fprintf('erro= \n');
disp(erro);
cont=cont+1;
end
end
fprintf('a raiz aproximada é:\n %.8f \n',xf);
fprintf('o erro associado é:\n');
disp(erro);

Algoritmo_05

%Utilizando o método da Secante para calcular a raiz da função


%f(x)= tan(x)+x^2-2;
%Definindo a função, para isso, x deverá ser tratada como variável
%simbólica
syms x;
f=tan(x)+x^2-2;

%Estabelecendo os critérios de parada


tol = 0.0001;%tolerancia
max = 50; %maximo de iterações

%Estabelecendo os valores iniciais (x0 e x1)


%Observando o gráfico da função, foram selecionados dois pontos quaisquer
%que antecedem a primeira raiz
x0= 4;
x1= 3;

%variável cque conta as iterações


cont= 1;

while cont<=max
x2=eval(x1-(x1-x0)*(subs(f,x,x1)/(subs(f,x,x1)-subs(f,x,x0))));%calculando o próximo
valor p/ x
erro = abs((x1-x0)/x1);%calculando o erro relativo em cada operação
%substituindo o valor obtido em x1 e o valor anterior de x1 em x0
x0=x1;
x1=x2;
%verificando se o erro relativo é inferior à tolerância
if(erro<tol)
xf=x2;
break
else
%Imprimindo nas iterações os valores de x e o erro relativo
fprintf('Iteração:%d --> x= %.8f --> erro= ',cont,x2);
disp(erro);
cont=cont+1;
end
end
fprintf('a raiz aproximada é:\n %.8f \n',xf);
fprintf('o erro associado é:\n');
disp(erro);
Imagem 1: Plot da função = x.

Imagem 2: Plot da função = 2x.

Imagem 3: Plot da função (19).

Você também pode gostar