0% acharam este documento útil (0 voto)
24 visualizações2 páginas

NR Sympy

O documento apresenta uma implementação do método de Newton-Raphson para encontrar raízes de funções, utilizando derivadas numéricas. O usuário é solicitado a inserir uma função e parâmetros como um chute inicial e tolerância, com o programa exibindo informações detalhadas sobre cada iteração. Caso a convergência não seja alcançada, o programa avisa o usuário e finaliza.

Enviado por

gecard.p
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
24 visualizações2 páginas

NR Sympy

O documento apresenta uma implementação do método de Newton-Raphson para encontrar raízes de funções, utilizando derivadas numéricas. O usuário é solicitado a inserir uma função e parâmetros como um chute inicial e tolerância, com o programa exibindo informações detalhadas sobre cada iteração. Caso a convergência não seja alcançada, o programa avisa o usuário e finaliza.

Enviado por

gecard.p
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

import numpy as np

import sympy as sp

def newton_raphson_numeric_deriv(f, x0, tol=1e-8, max_iter=50):


print("\n--- Iniciando Método de Newton-Raphson (Derivada Numérica) ---")
print("-" * 75)
print(f"{'Iteração':<10} | {'x_n':<15} | {'f(x_n)':<15} | {'f\'(x_n)
(aprox.)':<18} | {'Erro |Δx|':<20}")
print("-" * 75)

x_n = float(x0)
h = 1e-7

for i in range(max_iter):
f_xn = f(x_n)
df_xn = (f(x_n + h) - f(x_n - h)) / (2 * h)

if abs(df_xn) < 1e-12:


print("\n[ERRO] A derivada tornou-se zero (ou muito próxima de zero).")
print("O método não pode continuar (divisão por zero).")
return None

x_n_mais_1 = x_n - f_xn / df_xn


erro_absoluto = abs(x_n_mais_1 - x_n)
print(f"{i+1:<10} | {x_n:<15.8f} | {f_xn:<15.4e} | {df_xn:<18.8f} |
{erro_absoluto:<20.4e}")

if erro_absoluto < tol or abs(f_xn) < tol:


print("-" * 75)
print(f"\nConvergência alcançada em {i+1} iterações.")
print(f" - Raiz encontrada com sucesso em x = {x_n_mais_1:.8f}")
print(f" - Valor final de f(x) na raiz: {f(x_n_mais_1):.4e}")
return x_n_mais_1

x_n = x_n_mais_1

print("-" * 75)
print(f"\n[AVISO] Método não convergiu para a tolerância desejada após
{max_iter} iterações.")
return None

def obter_funcao_do_usuario():
x = [Link]('x')

while True:
print("\nPara definir sua função, use 'x' como variável e notação padrão:")
print(" Exemplos:")
print(" -> Polinômio: x**3 - 2*x + 5")
print(" -> Trigonométrica: cos(x) - x")
print(" -> Exponencial/Log: exp(x) - 10 ou log(x) - 2")

funcao_str = input("\nDigite a expressão da sua função f(x) = ")

try:
expr = [Link](funcao_str)
f_callable = [Link](x, expr, 'numpy')
f_callable(1.0)
print(f"✅ Função f(x) = {expr} carregada com sucesso.")
return f_callable
except Exception:
print("\n[ERRO] Expressão inválida. Por favor, tente novamente seguindo
os exemplos.")

def obter_numero_do_usuario(prompt):
while True:
try:
valor_str = input(prompt)
return float(valor_str)
except ValueError:
print("[ERRO] Entrada inválida. Por favor, digite um número (use '.'
como separador decimal).")

if __name__ == '__main__':
print("="*60)
print(" Cálculo de Raízes - Método de Newton-Raphson")
print(" (com derivada numérica automática e função customizável)")
print("="*60)

funcao_usuario = obter_funcao_do_usuario()

print("\nAgora, defina os parâmetros para a execução:")


chute_inicial = obter_numero_do_usuario("Digite o chute inicial (ex: 1.0): ")
tolerancia_desejada = obter_numero_do_usuario("Digite a tolerância (ex: 1e-8):
")

raiz = newton_raphson_numeric_deriv(
f=funcao_usuario,
x0=chute_inicial,
tol=tolerancia_desejada,
max_iter=50
)

if raiz is not None:


print(f"\nO valor final da raiz encontrada é: {raiz:.8f}")
else:
print("\nNão foi possível encontrar a raiz com os parâmetros fornecidos.")

print("\nPrograma finalizado.")

Você também pode gostar