用python求方程的重根

用python求方程的重根,python,numeric,incremental-search,Python,Numeric,Incremental Search,我目前正在尝试定位函数的根 f(x)=Re[-1+e^(2IX))^8(-i+e^(2IX)x)^8]=0 使用Python2.7进行数值计算。通过学习《python 3工程中的数值方法》一书,我采用了一种根搜索方法,该方法定位函数改变符号的x的值x1和x2。我用Mathematica绘制了函数,我的程序正确地定位了大部分根(我会包括这个函数的一个图,但我没有得到信誉点) 然而,它无法定位“双根”(在f(x)=0的情况下,它们位于-Pi和Pi)。显然,这是因为函数在这些根周围不改变符号。事实上,

我目前正在尝试定位函数的根

f(x)=Re[-1+e^(2IX))^8(-i+e^(2IX)x)^8]=0

使用Python2.7进行数值计算。通过学习《python 3工程中的数值方法》一书,我采用了一种根搜索方法,该方法定位函数改变符号的x的值x1和x2。我用Mathematica绘制了函数,我的程序正确地定位了大部分根(我会包括这个函数的一个图,但我没有得到信誉点)

然而,它无法定位“双根”(在f(x)=0的情况下,它们位于-Pi和Pi)。显然,这是因为函数在这些根周围不改变符号。事实上,我认为通常,这种方法无法定位具有偶数重数的根

有没有什么方法可以在不计算导数f’(x)(即使用牛顿-拉斐逊方法)的情况下找到这样的函数的双根?我意识到在这种情况下,导数很容易计算。但是,我将处理更复杂的函数,对于这些函数,计算导数是不可行的


非常感谢您的帮助!

虽然我不是数值方法专家,但我认为您可以通过从自变量中减去一小部分并计算其中的函数来计算“导数”。当然,这只有在函数“稳定”的情况下才有效“在那个区域,谢谢你的帮助!你的意思是我可以计算每个点的“梯度”吗?我知道如何为我的函数获得一大组梯度。但是牛顿-拉斐逊方法需要一个导数的符号表达式。或者你的意思是使用一些估计。例如,f’(x)=(f(x+0.001)-f(x-0.001))/(2*0.001)我想你会发现牛顿-拉斐逊法要求你可以计算给定x的导数。如果你能识别x点的导数函数(如果存在的话),你就可以“准确地”计算出这个导数,但你可以通过计算x-d和x+d并计算梯度来计算数值-只要d很小,这将是准确的(如果你的公式是稳定的)。太好了。是的,我理解。只是澄清一下,我对牛顿-拉斐逊方法的有限理解是,它不需要函数与x轴相交(即符号发生变化)以找到根;也就是说,可以找到双根。这是正确的吗?