Board logo

标题: 请问牛顿迭代法如何求方程的重根?谢谢。 [打印本页]

作者: 阿尔法孝直    时间: 2009-8-13 18:26     标题: 请问牛顿迭代法如何求方程的重根?谢谢。

并求出该重根是几重根。

最近在写用牛顿法解方程的程序,但牛顿法貌似只能求单根。

[ 本帖最后由 阿尔法孝直 于 2009-8-13 18:28 编辑 ]
作者: lzy0274    时间: 2009-8-14 21:54

需要对牛顿迭代法进行适当的改变。
迭代格式采用:X(k)=X(k-1)-Mf(X(k-1))/f'(x(k-1));
其中,M为重根的阶次。
作者: 阿尔法孝直    时间: 2009-8-14 22:00

我是说先把所有根(无论单或重)都求出来,然后一个一个判断是几重根。
作者: lzy0274    时间: 2009-8-15 11:00

感觉有难度,用牛顿法实现这个应该有困难。
作者: KYOKO    时间: 2009-8-15 12:48

假设知道一个方程所有的根,又其中一个是二重根,如何最简单的方法判断哪个根是重根?

(X-A)(X-B)。。。(X-α)=0同原方程做判断?
作者: 阿尔法孝直    时间: 2009-8-17 01:00

可以对逐个根不断求导,知道导数不为零为止。例如对某个方程F(X)=0的一个根X0求导:假设F'(X0)=0,F''(X0)=0,……,F(n-1阶导)(X0)=0,而F(n阶导)(X0)≠0,那么X0就是方程F(X)=0的n重根。
作者: 天宫公主    时间: 2009-8-17 09:03

假设 F(x) = 0 的解是一个有限集,任何一个根的次数也都是有限的*,且 F 足够光滑(具体条件还没想好),以下步骤可以得出 F(x) = 0 的所有解:

记,N(F, x_0) 为初始值为 x_0 时,用牛顿迭代法对方程 F(x) = 0 找到的那个根。

令 f_0 = F,随便挑一个 x_0,N(f_0, x_0) 是 F(x) = 0 的一个根。

i = 1;
while f_i (x) = 0 仍然有根 {
   
    令 f_i = f_{i-1} (x)/(x - N(f_{i-1}, x_0));
    求 N(f_i, x_0);/* 它仍然是 F(x) = 0 的一个根。
          如果没有重复根,N(f_i, x_0)
          必然不同于以前找到的根。如
          果有重复根,f_{i+1} 必然能让
          f_i 在 N(f_i, x_0) 这个重复根
          上降次。*/
    i ++;

}

* 例如,如果 f(x) = e^(1/x),g(x) = f(x) 的 analytic continuation,以上程序对解 g(x) = 0 就会死机。

[ 本帖最后由 天宫公主 于 2009-8-17 09:19 编辑 ]
作者: 阿尔法孝直    时间: 2009-8-17 14:57

嗯,明白了,谢谢天宫。
作者: KYOKO    时间: 2009-8-17 23:03

公主的那个只用了牛顿迭代法?

我看光用大学里学的高数都不行啊
作者: 阿尔法孝直    时间: 2009-8-18 01:12

反正我是看懂了,每求出一根,就把当前函数除以(x-当前根)再解,求出一个除一次,就像因式分解那样。




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0