【发布时间】:2015-10-28 22:00:55
【问题描述】:
我尝试实现多项式的牛顿法。喜欢:
double xn=x0;
double gxn=g(w, n, xn);
int i=0;
while(abs(gxn)>e && i<100){
xn=xn-(gxn/dg(w, n, xn));
gxn=g(w, n, xn);
i++;
}
其中g(w, n, xn) 计算函数的值,dg(w, n, xn) 计算导数。
作为x0,我使用起点M,这是我使用Sturm定理找到的。
我的问题是这种方法对于像x^4+2x^3+2x^2+2x+1 这样的一些多项式是发散的。也许它不规则,但我注意到它发生在方程的解为负数时。我在哪里可以找到解释?
编辑: dg
double result=0;
for(int i=0; i<n+1; i++)
result+=w[i]*(n-i)*pow(x, n-i-1);
其中 n 是多项式的次数
【问题讨论】:
-
收敛到特定根的一组起始值称为吸引力盆地。如果你用谷歌搜索,你会发现数学非常先进。
-
@PaulBoddington 看来,OP 在他们的代码中实际上有一个错误(或更多),而不是吸引力盆地之外的起始值。但是,OP 似乎假设 Raphson 的方法(错误地称为牛顿的方法——未能发表)应该总是收敛的。
标签: c++ polynomial-math newtons-method convergence