using namespace std;
struct result
{
double x;
int iter;
};
double f(double x) //原函数
{
return pow(x,4) - 6.4*pow(x,3) + 6.45*pow(x,2) + 20.538*x - 31.752;
}
double diff(double x,double h=0.05)//原函数的导数,h的设置影响很大,决定导数的一个步长
{
return (f(x+h)-f(x))/h;
}
result newtoniteration(double x,int iter=0,double tol=1.0e-4)//牛顿迭代法求根
{
result ret;
while(1)
{
double dx=-f(x)/diff(x);
x+=dx;
iter+=1;
if(abs(dx)<tol){
break;
}
cout<<x<<" "<<iter<<endl;
}
ret.x=x;
ret.iter=iter;
return ret; //这里利用返回值有多个的时候,利用struct 结构体,自定义一个result 结构体
}
int main()
{
result r1=newtoniteration(2);
cout<<"迭代次数:"<<r1.iter<<endl;
cout<<"根:"<<r1.x<<endl;
return 0;
}
