刚刚在写牛顿迭代时候遇到的一个问题。。
题目是求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就可以出结果了。
求解释。
新人分少,请见谅。







