C++牛顿法(Newton's Method) 在用牛顿法的情况下,你的编程应该输出近似根和它的多样性。 为了确定得到多样性的根,当评估这个根时,应该先检查有多少p(x)的导数大约是0,(用同一个level的精确度,?=10^-10,for this check as well.)。 测试你的编程: p(x)= -x^4 + 5x^3, [a,b]=[-1,3] 和p(x)= x^2 -3x +2,[a,b]=[1,5]
可以用简单易懂点的方法不,谢谢啦!
[解决办法] 仅供参考
C/C++ code
//用C语言编程,求出2^x=x^10这个方程的解。 #include <math.h> #include <stdio.h> double x,e; void main () { x=-1.0; e=0.001; while (1) { while (1) { if (pow(2.0,x) <pow(x,10.0)) { x+=e; } else { break; } } e/=10.0; if (e <1e-15) break; while (1) { if (pow(2.0,x)>pow(x,10.0)) { x-=e; } else { break; } } e/=10.0; if (e <1e-15) break; } printf("%+.14g\n",x);
x=1.0; e=0.001; while (1) { while (1) { if (pow(2.0,x)>pow(x,10.0)) { x+=e; } else { break; } } e/=10.0; if (e <1e-15) break; while (1) { if (pow(2.0,x) <pow(x,10.0)) { x-=e; } else { break; } } e/=10.0; if (e <1e-15) break; } printf("%+.14g\n",x); }
double f(int m, double c[], double x) { int i; double p = c[m];
for (i=m; i>0; i--) p = p*x + c[i-1]; return p; }
int newton(double x0, double *r, double c[], double cp[], int n, double a, double b, double eps) { int MAX_ITERATION = 1000; int i = 1; double x1, x2, fp, eps2 = eps/10.0;
double Polynomial_Root(double c[], int n, double a, double b, double eps) { double *cp; int i; double root;
cp = (double *)calloc(n, sizeof(double)); for (i=n-1; i>=0; i--) { cp[i] = (i+1)*c[i+1]; } if (a>b) { root = a; a = b; b = root; } if ((!newton(a, &root, c, cp, n, a, b, eps)) &&
(!newton(b, &root, c, cp, n, a, b, eps))) newton((a+b)*0.5, &root, c, cp, n, a, b, eps); free(cp); if (fabs(root)<eps) return fabs(root); else return root; }