Escolar Documentos
Profissional Documentos
Cultura Documentos
Centro de Tecnologia
Departamento de Engenharia Elétrica
Métodos Numéricos para Engenharia Elétrica - 2023.1
Prof. Wilkley Bezerra Correia, Dr
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 desenvolva 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.
2. Escreva uma função que realize o arredondamento simétrico de um valor passado a essa função como parâmetro.
O valor retornado deverá estar em ponto flutuante na representação F = (10, 5, 4, 4). Na solução apresente:
a) Um caso de overflow;
b) Um caso de underflow.
item A
from metodos import raizes
import matplotlib.pyplot as plt
import numpy as np
def f(x):
return x**2 - 4
analise.bissecao(-1,10)
print(analise.x)
print(analise.iter)
# Criando um array com valores de x para o gráfico
x = np.linspace(-2, 2, 200)
# Mostrando o gráfico
plt.show()
Item B
import matplotlib.pyplot as plt
import numpy as np
import numpy as np
def f(x):
"""
Define a funç~
ao f(x) a ser utilizada no método da posiç~
ao falsa.
"""
return x**3 - 9*x + 3
for i in range(max_iter):
if fc*fb > 0:
b = c
fb = fc
else:
a = c
fa = fc
# Mostrando o gráfico
plt.show()
2. A partir dos parâmetros do ponto flutuante, que permitem um número máximo de 5 dı́gitos, foi criada uma
função para realizar o arredondamento simétrico. Para isso, definiu-se uma variável ”cont” que representa o
expoente da base indicada. Em seguida, foram definidas as condições para determinar esse expoente. A primeira
condição foi estabelecida para valores maiores que 1, onde a variável ”cont” seria incrementada em 1 a cada vez
que houvesse uma divisão pela base até que se chegasse ao modelo da mantissa do ponto flutuante, onde o 0
fica à frente, ou seja, um número menor que 1. Caso o número fosse menor que 1, a função verificaria quantos
zeros ele tem à esquerda. Para isso, o valor de ”x” foi convertido em uma string e armazenado na variável
”h”. Em seguida, verificou-se se havia 0 no terceiro termo da string e assim eliminou-o multiplicando por 10.
Através da função recursiva, a variável ”cont” no ”elif” seria decrementada em -1, já que o expoente teria que
ficar negativo. O terceiro ”elif” foi criado para atender a uma peculiaridade que ocorre quando se trabalha
com valores muito pequenos ou menores que 0.0001. Para esses valores, o resultado fica na forma de notação
cientı́fica, por exemplo, ”9e-105” para o número 0.00009. Para lidar com esse caso, a posição do sinal negativo
na string ”h” foi encontrada usando o método ”find”. Em seguida, obteve-se o valor do expoente, que se localiza
à direita do sinal negativo ”-”. O valor da mantissa foi obtido considerando os elementos à esquerda do ”e”.
Assim como nas outras condições, a função recursiva foi utilizada até que a condição fosse concluı́da. Para
todas as condições concluı́das, foi feito um ”else” que imprime o valor caso o número possa ser representado
pelos parâmetros do ponto flutuante. Caso contrário, a função retorna se o valor é ”underflow” ou ”overflow”.
cont= 0
x = float(input())
print(flutuante(x,10,5,4,4))