刚刚在写牛顿迭代时候遇到的一个问题。。
题目是求2*x*x*x-4*x*x+3*x-6=0在1.5附近的实根。程序代码:
#include<stdio.h> #include<math.h> double f(double x) { return 2*x*x*x-4*x*x+3*x-2; } double p(double x) { return 6*x*x-8*x+3; } double real_root(double(*fun1)(double),double(*fun2)(double),double similar_root) { double root,k,y; root=similar_root-fun1(silimar_root)/fun2(similar_root); while(fabs(root-similar_root)>1e-4) { similar_root=root; y=fun1(similar_root); k=fun2(similar_root); if(y!=0) root=similar_root-y/k; } return root; } main() { printf("%f",real_root(f,p,1.5)); return 0; }
ps:我其实是模仿论坛一位斑竹大人的风格写的,又顺便想练练指向函数的指针,所以写得很麻烦。。
这个编译的时候就会出错。 root=similar_root-fun1(silimar_root)/fun2(similar_root);
但是如果将fun1(silimar_root),fun2(similar_root)括号里面的silimar——root改为1.5就可以出结果了。
求解释。
新人分少,请见谅。