Você está na página 1de 9

UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE CIÊNCIAS

DEPARTAMENTO DE ENGENHARIA ELÉTRICA


LABORATÓRIO DE MÉTODOS NUMÉRICOS
SEMESTRE 2023.1

PRÁTICA 02 -Zeros Reais

ALUNO: Iago de Farias Gomes


MATRÍCULA: 511227 CURSO: Engenharia Elétrica

PROFESSOR: WILKLEY BEZERRA CORREIA


QUESTIONÁRIO
1. Automatize o processo de cálculo de raízes de f(x) a partir de um valor inicial
x0. Para cada caso enumerado abaixo utilize a biblioteca metodos.py para desenvolver
códigos em Python para os métodos:

a) Bisseção;
b) Posição falsa.

Como resultado, o algoritmo deverá produzir a raiz com precisão de erro


aproximado ϵaprox < x, em que x deve ser passado pelo usuário, o número total de
iterações e o valor final de |f(xn)|, além dos gráficos de convergência da raiz e do erro.

Para essa questão utilizamos o seguinte código:

Nessa primeira parte do código definimos uma classe em Python que define um objeto
chamado "raizes". A classe "raizes" contém um construtor init que é chamado quando um
novo objeto "raizes" é criado. Os parâmetros do constructor estão comentados no código.

2
Essa parte do código define o método da Bissecção para encontrar a raiz de uma
função. Ele recebe dois parâmetros, "a" e "b", que representam os limites inferior e superior de
um intervalo que contém a raiz da função. O método inicia uma estrutura de repetição que se
mantém em execução enquanto o erro da aproximação da raiz for maior que o erro máximo
permitido (Emax) e o número de iterações não ultrapassar o limite máximo estabelecido
(maxit). A cada iteração do loop, o método calcula uma nova aproximação da raiz pela média
dos limites do intervalo atual. Em seguida, ele verifica em qual dos subintervalos [a, x] ou [x,
b] a raiz está localizada, utilizando o teorema de bolzano, ou se o valor encontrado é a própria
raiz. Isso é feito por meio da verificação do sinal da função nos pontos "a" e "x" ou "b" e "x".

3
Caso a função tenha sinais opostos nos pontos "a" e "x", a raiz está no subintervalo [a, x]; caso
contrário, está no subintervalo [x, b]. Caso o valor encontrado seja a própria raiz, o erro é
zerado.

O valor anterior da raiz (xrold) é armazenado em uma variável para calcular o erro na
iteração atual. A quantidade de iterações também é armazenada em uma variável (cont). A
cada iteração, os valores da convergência da raiz e do erro são armazenados em listas
(convergência e erros, respectivamente) para serem usados posteriormente na construção dos
gráficos de convergência.

Por fim, o método plota dois gráficos. O primeiro é um gráfico de convergência da


raiz, que mostra como o valor da raiz se aproxima do valor real a cada iteração. O segundo é
um gráfico de convergência do erro, que mostra como o erro da aproximação da raiz dimin

4
E para essa terceira parte do código, define-se o método da Posição Falsa(ou Secante)
que funciona fazendo uma estimativa da raiz a partir de uma reta que passa pelos pontos (a,
f(a)) e (b, f(b)), em que a e b são dois valores iniciais do intervalo. A interseção dessa reta com
o eixo x é a nova estimativa da raiz. Em seguida, um dos extremos do intervalo é atualizado de
acordo com o sinal da função no novo ponto estimado(novamente, utiliza-se o teorema de
bolzano). Esse processo é repetido até que o erro seja suficientemente pequeno ou até que o
número máximo de iterações seja alcançado.

Nesse código, a função “posicao falsa” recebe como argumentos os extremos: a e b


do intervalo e executa o método da posição falsa para encontrar a raiz da função. A cada
iteração do método, o valor atual de x é armazenado na lista lista_raizes e o valor do erro é
armazenado na lista_erros. Ao final do método, os valores da lista lista_raizes são plotados
em um gráfico para mostrar a convergência da raiz ao longo das iterações.

Em posse desse códigos, somos capazes de encontrar raízes de equações com uma
precisão ε < 0.001. Como exemplo, vamos utilizar a função f(x) = x2 - 5. Observamos que a
raiz da função está no intervalo [2,3]. Assim, temos:

Essa parte do código cria uma instância da classe raizes passando a função lambda x:
x2 - 5 como argumento( a função lambda é uma forma de criar funções anônimas em python).

5
Essa função representa o polinômio x2 - 5., cuja raiz é a raiz quadrada de 5. Em seguida,
chama o método da bissecção para encontrar a raiz do polinômio no intervalo passado, que
para o caso foi 2 e 3. O resultado do programa é apresentado abaixo:

6
Já para o método da posição falsa temos o resultado abaixo:

E observamos que para esta função a convergência pelo método da posição falsa foi
mais rápida.

7
8
2. O código em anexo realiza o arredondamento simétrico de um valor passado a essa função como
parâmetro. O valor retornado está em ponto flutuante na representação F(10, 5, −4, 4). Modifique esse
código para os casos:

a) F(10, 6, −3, 3);


b) F(3, 5, −2, 2).

Em ambos apresente:
• Um caso de overflow;
• Um caso de underflow

Para converter o número para a representação em ponto flutuante F(10, 6, -3, 3), podemos
primeiramente definir no bloco "else", calcular a mantissa "M" da seguinte forma:
- Se o número for maior ou igual a 10^3, definir "M" como 9.999999;
- Se o número for menor que 10^-3, definir "M" como 0.0001;
Pois eles servirão como flags para identificar os pontos de overflow e underflow.

Por fim, alteramos as funções for para:

E a função round para :

Um caso de overflow e underflow é : 9999,9 e 0,0001, respectivamente.

Você também pode gostar