这么历史悠久的算法...原创恐怕挺难了
改进可以分几个方面吧:
1. 像你说的重根问题(收敛阶降低), 这可以通过导函数来解决. f(x)=(x-a)^k g(x) 在 a 有个k重零点, 那么 f 的k-1阶导数在 a 就只是 1 重零点了.
2. 收敛域和稳定性问题. 通常牛迭只能保证局部收敛性, 解决办法通常是"牛顿下山法", 简而言之就是使每次修正的步距小些, 到了局部再用正常的方法.
3. 提高收敛阶. 基础的牛顿迭代法用的是直线插值, 比如可以考虑用抛物线插值.
4. 减少计算量/避免求导运算. 比如说求导用差分代替(截弦法). 求多元函数的根时还可以改进为所谓的拟牛顿法(Broyden方法).
5. 自动处理例外情况. 主要是处理收敛失败的问题. 如何重新开始搜索, 如何(一定程度上)确定附近有无根.
6. 结合以上各点....
有何思路?