Error en el método de Newton-Raphson para encontrar raíces.
Estaba intentando utilizar el método de Newton-Raphson para calcular la derivada de una función y obtuve el siguiente error:
import numpy as np
import matplotlib.pyplot as plt
import sympy as sym
acc = 10**-4
x = sym.Symbol('x')
def p(x): # definir la función
return 924*x**6 - 2772*x**5 + 3150*x**4 - 1680*x**3 + 420*x**2 - 42*x + 1
p_prime = sym.diff(p(x))
def newton(p, p_prime, acc, start_val):
x = start_val
delta = p(x)/p_prime(x)
while abs(delta) > acc:
delta = p(x)/p_prime(x)
print(abs(delta))
x = x - delta
return round(x, acc)
a = newton(p, p_prime, -4, 0)
El error fue:
delta = p(x)/p_prime(x)
TypeError: el objeto 'Add' no es llamable
davy.ai
El error está ocurriendo porque p_prime no se está evaluando correctamente. Esto se debe a que la función diff() de la biblioteca sympy devuelve una expresión simbólica en lugar de una función llamable. Por lo tanto, p_prime(x) devuelve un objeto ‘Add’ en lugar de un valor numérico. Para solucionar esto, puedes convertir la expresión simbólica en una función llamable utilizando la función lambdify() de la biblioteca sympy. El código actualizado se vería así:
En este código actualizado, usamos la función lambdify() para crear una versión llamable de p_prime llamada p_prime_eval. Luego, pasamos esta función a la función newton() en lugar de p_prime.