我使用的代码在我的函数的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个根。我需要对我的代码做些什么才能让它工作?感谢
答案 0 :(得分:0)
你的代码很好,问题在于你的功能 - 这个方法太复杂了。您可以使用更复杂的根查找方法,也可以减少dx
并增加迭代次数。例如,您可以使用dx/1000
和150万次最大迭代。这将给你所有的根源。对于根1和4.0996,您将不得不使用非常接近的猜测。该代码适用于简单的二次函数等简单函数。