в вашем коде есть две проблемы,
во-первых, параметр f
в вашей функции должен иметь вход 'function', что означает f=lambda x: 1/x+log(x)-2
,
, втораяэто p = p0 - f(p0)/diff(f(x),p0)
.Если я правильно понимаю, вы ожидаете, что функция diff
будет выполнять функцию деривации, однако это не так.Может быть, вы можете определить свою собственную функцию деривации:
def df(f, x):
h = 1e-5
return (f(x+h)-f(x))/h
, тогда вы можете написать p = p0 - f(p0)/df(f, p0)
, поэтому весь код можно записать так:
def newton(p0, f, n, t):
global p
p = 0
for i in range(1, n+1):
def df(f, x):
h = 1e-5
return (f(x+h)-f(x))/h
p = p0 - f(p0)/df(f, p0)
if abs(p-p0) < t:
return p
p0 = p
i = i + 1
return f"The method failed after {n} iterations. The procedure was unsuccessful."
print(newton(p0=1, f=lambda x: 1/x+log(x)-2, n=10, t=5e-324))