在sin(x)
上运行以下代码:
import numpy as np
def newton(z0,f,fp,MAX_IT):
cnt = 0
TOL = 1e-10
z = z0
condition = fp(z) != 0
a = z[condition]
for i in range(MAX_IT):
dz = f(a)/fp(a)
adz = np.absolute(dz)
if np.all(adz < TOL) :
return a
cnt += 1
a -= dz
return False
它工作正常,但有时在我的域中不返回任何根。如果我将最小值和最大值限制为(-2,2)
,它将返回+/-pi
,这超出了我的域。但是如果我上升到(-10,10)
,我将得到+/-3*pi
,没有其他的。我的功能有什么问题?我已经去掉了所有的不连续性,所以这不是问题所在。为什么newton
不返回我的域中的复数可以收敛到的所有根?
编辑:我正在尝试创建牛顿分形,我看到的唯一一个由sin
生成的分形使用了根列表。我试图绕过这个问题,但一位评论者认为这是不可能的,因为当sin
是我的函数时,newton
不能保证收敛。我需要一个根列表来解决这个问题吗?
1条答案
按热度按时间rekjcdws1#
这是代码的修改版本。希望这有用。
通过这些修改,您应该能够使用newton函数在指定的域中查找多个根。请记住提供适当的初始猜测(z0),并确保函数f和fp针对您的特定问题正确定义。