Escreva um programa em Python para encontrar a raiz da funçāo f(x)=x^{3}-2 x^{2}+4 x-8 no intervalo [1,3] usando o método da falsa posiçāo. Apresente o erro relativo em cada iteraçāo e pare quando o erro for inferior a 1 \times 10^{-6}. Utilize o valor x=1.89882945773481 como referência para calcular o erro relativo.

Passo 1

O enunciado pede para encontrar a raiz da função
f(x)=x^{3}-2x^{2}+4x-8
no intervalo [1,3] usando o método da falsa posição (regula falsi). Precisamos também calcular o erro relativo a cada iteração em relação ao valor de referência x_{\text{ref}}=1.89882945773481 e parar quando esse erro for menor que 10^{-6}.

Passo 2

Vamos definir em Python:
  • A função f(x).
  • Os pontos iniciais a=1 e b=3.
  • O valor de referência x_{\text{ref}}=1.89882945773481.
  • O critério de parada \varepsilon=10^{-6}.

Passo 3

Verificamos a condição de existência de raiz em [a,b]. Ou seja, precisamos de
f(a)\,f(b)<0.

Passo 4

No método da falsa posição, a cada iteração calculamos o ponto
c = b \;-\;\frac{f(b)\,(a - b)}{f(a) - f(b)}.
Em seguida verificamos em qual subintervalo a raiz permanece:
  • Se f(a)\,f\text{(c)}<0, então a raiz está em [a,c], fazemos b=c.
  • Caso contrário, está em [c,b], fazemos a=c.

Passo 5

Calculamos o erro relativo em cada iteração como
\text{erro} = \left|\frac{c - x_{\text{ref}}}{x_{\text{ref}}}\right|.
Imprimimos esse valor e paramos quando \text{erro}<10^{-6}.

Resposta

def f(x):
 return x**3 - 2*x**\(2+4\)*x - 8

# Dados iniciais
a \(=1.0\)
b \(=3.0 x_ref =1.89882945773481\)
epsilon \(=1\)e-6

# Verificação inicial
if f(a) * f(b) >\(=0\):
 raise ValueError("f(a) e f(b) devem ter sinais opostos.")

# Iteração do método da falsa posição
erro \(=1.0\)
iteracao \(=0\)

print("Iteração | c | Erro relativo")
print("---------------------------------------")
while erro > epsilon:
 # calcula o ponto de falsa posição
 c = b - f(b) * (a - b) / (f(a) - f(b))
 # calcula o erro relativo
 erro = abs((c - \(x_ref\)) / \(x_ref\))
 iteracao \(+=1\)
 print(f"{iteracao:9d} | {c:13.10f} | {erro:.2e}")
 # atualiza o intervalo
 if f(a) * f\text{(c)} < 0:
 b = c
 else:
 a = c

print("
Raiz aproximada:", c)

Exercícios relacionados