Bissecao em Python
Bissecao em Python
ipynb - Colab
import math : Esta linha importa o módulo math do Python. O módulo math fornece
acesso a uma ampla gama de funções matemáticas, como:
import numpy as np : Esta linha importa a biblioteca numpy . numpy é uma biblioteca
fundamental para computação numérica em Python. Ela fornece suporte para arrays e
matrizes multidimensionais, além de uma ampla gama de funções matemáticas para
operar nesses arrays.
Em resumo:
Este código importa três bibliotecas essenciais para computação científica e visualização de
dados em Python:
Essas bibliotecas são frequentemente usadas juntas em projetos de análise de dados, ciência
de dados e engenharia.
# Requisitando as Bibliotecas
import math
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 1/10
02/04/2025, 12:06 bissecao.ipynb - Colab
input("Digite a função de x: ") : Essa linha exibe a mensagem "Digite a função de x: "
no console e, em seguida, aguarda que o usuário digite algo e pressione Enter.
funcao = ... : O valor digitado pelo usuário é armazenado na variável funcao como uma
string.
Linha 2: f = lambda x: eval(funcao, {"x": x, "math": math, "np": np}) # Mais seguro
f = lambda x: ... : Essa parte define uma função anônima (lambda) que recebe um
argumento x . O resultado dessa função lambda é armazenado na variável f .
eval(funcao, {"x": x, "math": math, "np": np}) :
eval() : Essa é uma função do Python que avalia uma string como uma expressão
Python. É importante notar que eval() pode ser perigoso se você não confiar na
string que está sendo avaliada, pois ela pode executar código arbitrário.
funcao : Essa é a string que o usuário digitou, que representa a função que
queremos avaliar.
{"x": x, "math": math, "np": np} : Esse é um dicionário que fornece um
namespace para a função eval() . Ele define os valores das variáveis que podem
ser usadas dentro da expressão funcao .
# Mais seguro : Este comentário indica que o uso do dicionário de namespace torna o
uso do eval() mais seguro, pois limita as variáveis e funções que a expressão funcao
pode acessar.
Em resumo:
Esse código permite que o usuário insira uma função matemática como uma string e, em
seguida, cria uma função Python que avalia essa string para um determinado valor de x . O uso
do dicionário de namespace no eval() ajuda a mitigar os riscos de segurança associados ao
uso dessa função.
Exemplo:
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 2/10
02/04/2025, 12:06 bissecao.ipynb - Colab
Se o usuário digitar "x**2 + math.sin(x)" como a função, a função f resultante calculará o valor
de x ao quadrado mais o seno de x para qualquer valor de x que for passado para ela.
Função f(x) :
def f(x):
return eval(funcao, {"x": x, "math": math, "np": np})
Explicação Detalhada:
1. def f(x): :
Esta linha define uma função chamada f que recebe um único argumento, x .
eval(funcao, ...) : A função eval() é usada para avaliar uma string como
uma expressão Python.
funcao : Essa é uma variável que deve conter uma string representando uma
expressão Python válida. Essa string geralmente é fornecida pelo usuário e
representa a função matemática que queremos calcular.
{"x": x, "math": math, "np": np} : Esse é um dicionário que define o
namespace (o escopo) no qual a expressão funcao será avaliada.
Em resumo:
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 3/10
02/04/2025, 12:06 bissecao.ipynb - Colab
A função f(x) recebe um valor x como entrada e avalia a string armazenada na variável
funcao como uma expressão Python. O valor de x e os módulos math e numpy são
disponibilizados para a expressão funcao através do dicionário de namespace. A função
retorna o resultado da avaliação da expressão.
Exemplo:
Se a variável funcao contiver a string "x**2 + math.sin(x)" , e você chamar f(3) , a função
calculará 3**2 + math.sin(3) e retornará o resultado.
Importante:
O uso de eval() pode representar riscos de segurança se a string funcao for fornecida
por uma fonte não confiável, pois ela pode executar código arbitrário.
Uma alternativa mais segura seria usar a função ast.literal_eval() para avaliar apenas
literais seguros.
def f(x):
return eval(funcao, {"x": x, "math": math, "np": np})
O código solicita ao usuário que insira os limites inferior e superior do intervalo para o gráfico.
Ele usa a função input() para obter a entrada do usuário e a função int() para converter a
entrada (que é inicialmente uma string) em um número inteiro. Esses limites serão usados
posteriormente para definir o intervalo do eixo x do gráfico.
Explicação Detalhada:
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 4/10
02/04/2025, 12:06 bissecao.ipynb - Colab
yi = f(xi) :
2. Plotagem da Função:
plt.grid() :
plt.grid() : Adiciona uma grade ao gráfico para facilitar a leitura dos valores.
plt.legend() :
3. Encontrar as Raízes:
raizes = [] : Inicializa uma lista vazia chamada raizes para armazenar as raízes
encontradas.
for i in range(len(xi) - 1): : Inicia um loop que itera sobre os índices dos
valores de x, exceto o último.
if yi[i] * yi[i + 1] < 0: :
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 5/10
02/04/2025, 12:06 bissecao.ipynb - Colab
else: :
if raizes: : Verifica se a lista raizes não está vazia (ou seja, se alguma raiz foi
encontrada).
plt.scatter(raizes, [0] * len(raizes), color='red', zorder=3,
label="Raízes") :
5. Exibição do Gráfico:
plt.legend() : Exibe a legenda atualizada, que agora inclui o rótulo para as raízes.
plt.show() : Mostra o gráfico completo na tela.
Este código é uma ferramenta poderosa para visualizar funções e encontrar suas raízes
numericamente.
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 6/10
02/04/2025, 12:06 bissecao.ipynb - Colab
# Plota a função
plt.plot(xi, yi, '-', label=f"f(x) = {funcao}")
plt.axhline(0, color='#B33BFA', linewidth=0.8) # Linha do eixo X
plt.grid()
plt.legend()
plt.legend()
plt.show()
Este código Python implementa o método da bisseção para encontrar uma raiz aproximada de
uma função dentro de um intervalo especificado. Vamos analisar o código passo a passo:
1. Entrada de Dados:
2. Inicialização de Variáveis:
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 7/10
02/04/2025, 12:06 bissecao.ipynb - Colab
Imprime o cabeçalho da tabela que exibirá os valores das variáveis em cada iteração do
método da bisseção.
5. Atualização do Intervalo:
Se v < 0 , a raiz está no intervalo [a, xm2] , então o limite superior b é atualizado
para xm2 .
Se v > 0 , a raiz está no intervalo [xm2, b] , então o limite inferior a é atualizado
para xm2 .
Se v == 0 , xm2 é a raiz exata, e o programa imprime o valor da raiz.
6. Loop Principal:
Em resumo:
Este código implementa o método da bisseção para encontrar uma raiz aproximada de uma
função dentro de um intervalo especificado. O método da bisseção é um método iterativo que
divide repetidamente o intervalo ao meio e seleciona o subintervalo onde a raiz se encontra. O
código continua iterando até que o erro seja menor que a tolerância ou o número máximo de
iterações seja atingido.
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 8/10
02/04/2025, 12:06 bissecao.ipynb - Colab
n = 1
fa = f(a)
fb = f(b)
xm2 = (a + b)/2
fxm = f(xm2)
v = fa*fxm
erro = 10
print("Método da Bisseção")
print(" n a b x f(a) f(x) f(b) f(a)*f(x) erro")
if v < 0: b = xm2
if v > 0: a = xm2
if v == 0: print("o valor da raiz é %4.4f" %xm2)
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 9/10
02/04/2025, 12:06 bissecao.ipynb - Colab
https://colab.research.google.com/drive/1qakO3Icx5k0wtmQnIv0LDvAGKuKl7PoO#scrollTo=bJkTLhtE_kvv&printMode=true 10/10