Python中的Newton-Raphson中的TypeError

我是Python的新手。我正在尝试Newton-Raphson寻根方法。在第4行中,出现错误“发生了异常:TypeError'numpy.float64'对象不可调用”。如果有人可以启发我解决问题,将不胜感激。谢谢。

import numpy as np

def newton(f,df,x,tol=1e-8,max_it=20,it_count = 0):
    x -= f(x)/df(x)
    it_count += 1

    if it_count > max_it:
        raise ValueError("Maximum number of iterations has been exceeded")
    elif abs(f(x)) <= tol:
        return x
    else:
        x = newton(f,x)

def f(x):
    return np.tan(x) - 2*x

def df(x):
    d = 0.0000001
    return (f(x+d)-f(x-d))/(2*d)

print(newton(f(1.2),df(1.2),1.2))
monkey1210 回答:Python中的Newton-Raphson中的TypeError

在最后一行中,您要处理的是函数和在某个点评估的渐变,而不是函数本身。您可以尝试将最后一行更改为以下内容:

print(newton(f,df,1.2))

正如Belliger指出的那样,您还应该在递归函数调用中交出迭代计数。此外,您应该在递归中返回该值。这是代码的有效版本:

import numpy as np

def newton(f,x,tol=1e-8,max_it=20,it_count = 0):
    x -= f(x)/df(x)
    it_count += 1

    if it_count > max_it:
        raise ValueError("Maximum number of iterations has been exceeded")
    elif abs(f(x)) <= tol:
        return x
    else:
        x = newton(f,it_count=it_count)
        return x

def f(x):
    return np.tan(x) - 2*x

def df(x):
    d = 0.0000001
    return (f(x+d)-f(x-d))/(2*d)

print(newton(f,1.2))
,

其他答案已经回答了您的问题,但我注意到的另一件事是,在应用递归调用时,您需要传递it_count,例如

else:
   x = newton(f,it_count=it_count)
,
# Defining Function
def f(x):
    return x**3 - 5*x - 9

# Defining derivative of function
def g(x):
    return 3*x**2 - 5

# Implementing Newton Raphson Method

def newtonRaphson(x0,e,N):
    print('\n\n*** NEWTON RAPHSON METHOD IMPLEMENTATION ***')
    step = 1
    flag = 1
    condition = True
    while condition:
        if g(x0) == 0.0:
            print('Divide by zero error!')
            break

        x1 = x0 - f(x0)/g(x0)
        print('Iteration-%d,x1 = %0.6f and f(x1) = %0.6f' % (step,x1,f(x1)))
        x0 = x1
        step = step + 1

        if step > N:
            flag = 0
            break

        condition = abs(f(x1)) > e

    if flag==1:
        print('\nRequired root is: %0.8f' % x1)
    else:
        print('\nNot Convergent.')


# Input Section
x0 = input('Enter Guess: ')
e = input('Tolerable Error: ')
N = input('Maximum Step: ')

# Converting x0 and e to float
x0 = float(x0)
e = float(e)

# Converting N to integer
N = int(N)


#Note: You can combine above three section like this
# x0 = float(input('Enter Guess: '))
# e = float(input('Tolerable Error: '))
# N = int(input('Maximum Step: '))

# Starting Newton Raphson Method
newtonRaphson(x0,N)

View Code & Output Here

还要检查codesansar.com/numerical-methods/。该站点收集了大量使用C,C ++,Python和MATLAB进行数值方法的算法,伪代码和程序。

本文链接:https://www.f2er.com/3030926.html

大家都在问