Implemente um programa em Python para encontrar uma raiz da equação f(x)=x^{5}-4 x^{2}+20 utilizando o método da secante. Considere como aproximações iniciais os valores x_{0}=-1 e x_{1}=-0.5. O algoritmo deve ser executado até a convergência. A raiz está aproximadamente em x \approx-1.58.

Passo 1

O problema pede que a gente ache uma raiz da função
f(x) = x^5 - 4x^2 + 20
usando o método da secante, com aproximações iniciais -1 e -0.5, iterando até convergência. Esse conteúdo cai em métodos numéricos para solução de equações não lineares.

Passo 2

Primeiro, definimos a própria função em Python para poder avaliá-la facilmente:
def f(x):
 return x**5 - 4*x**\(2+20\)

Passo 3

O método da secante gera uma sequência de aproximações x_n pela fórmula
x_{n+1} \;=\; x_n \;-\; \frac{f(x_n)\,\bigl(x_n - x_{n-1}\bigr)}{f(x_n) - f(x_{n-1})}.
A ideia é usar os dois últimos pontos para formar uma reta secante que aproxima a curva de f.

Passo 4

Agora implementamos o loop em Python. Vamos controlar a convergência por \lvert x_{n+1} - x_n\rvert < \text{tol}, com \text{tol}=10^{-6}, e um número máximo de iterações para evitar loops infinitos:
def secante(f, x0, x1, tol\(=1\)e-6, \(max_iter =100\)):
 for i in range(1, \(max_iter +1\)):
 f\(0=\) f(x0)
 f\(1=\) f(x1)
 # evita divisão por zero
 if f\(1==\) f0:
 raise ZeroDivisionError("f(x1) e f(x0) são iguais, secante falhou.")
 # fórmula da secante
 x\(2=\) x1 - f1*(x1 - x0)/(f1 - f0)
 # critério de convergência
 if abs(x2 - x1) < tol:
 return x2, i
 # atualiza aproximações
 x0, x\(1=\) x1, x2
 raise RuntimeError("Não convergiu em {} iterações".format(\(max_iter\)))

# valores iniciais
x\(0=\) -1.0
x\(1=\) -0.5

# executa o método
raiz, iteracoes = secante(f, x0, x1)
print(f"Raiz aproximada: {raiz:.6f} após {iteracoes} iterações")

Resposta

def f(x):
 return x**5 - 4*x**\(2+20\)

def secante(f, x0, x1, tol\(=1\)e-6, \(max_iter =100\)):
 for i in range(1, \(max_iter +1\)):
 f\(0=\) f(x0)
 f\(1=\) f(x1)
 if f\(1==\) f0:
 raise ZeroDivisionError("f(x1) e f(x0) são iguais, secante falhou.")
 x\(2=\) x1 - f1*(x1 - x0)/(f1 - f0)
 if abs(x2 - x1) < tol:
 return x2, i
 x0, x\(1=\) x1, x2
 raise RuntimeError("Não convergiu em {} iterações".format(\(max_iter\)))

x\(0=\) -1.0
x\(1=\) -0.5
raiz, iteracoes = secante(f, x0, x1)
print(f"Raiz aproximada: {raiz:.6f} após {iteracoes} iterações")

Exercícios relacionados