无法在Newtons-Raphson方法(Python)中找到所有根

时间:2017-08-20 04:30:01

标签: python python-2.7 python-3.x

我使用的代码在我的函数的4个根中有2个正常工作,我似乎无法使它适用于所有4个根。

from numpy import *
from scipy import *
import numpy as np

def f(x):
    return np.arctan(2*(x - 1)) - np.log(abs(x))

def fprime(x):
    return (16/5)*((x - (5/4))**2)-1



def newtonRaphson(x0,e=1.0e-3):
    for val in range(1, 15):
        dx = - f(x0)/fprime(x0)
        print(dx)
        x0 = x0 + dx
        if abs(dx) < e: 
            return x0,val
    print('Too many iterations\n')

root,numIter = newtonRaphson(-1.0)
print ('Root =',root)
print ('Number of iterations =',numIter)

根应为-0.300098,0.425412,1,4.09946

当我使用-1.0时,我得到根-0.300098,当我使用1时,我得到根1,但我似乎无法获得另外2个根。我需要对我的代码做些什么才能让它工作?感谢

1 个答案:

答案 0 :(得分:0)

你的代码很好,问题在于你的功能 - 这个方法太复杂了。您可以使用更复杂的根查找方法,也可以减少dx并增加迭代次数。例如,您可以使用dx/1000和150万次最大迭代。这将给你所有的根源。对于根1和4.0996,您将不得不使用非常接近的猜测。该代码适用于简单的二次函数等简单函数。