我从数学的角度,切线零点不会越过极值点,但是它在第二次迭代就出去了,能看看为什么会超吗?从对称点开始迭代
#include<bits/stdc++.h>
using namespace std;
double a,b,c,d,k;
double a1,b1,c1;
double f(double x);
double f1(double x)
{
k=3*a1*pow(x,2)+2*b1*x+c;
return x-f(x)/k;
}
double f(double x)
{
return a*1.0*x*x*x+b*x*x+c*x+d;
}
int main()
{
cin>>a>>b>>c>>d;
a1=a*3,b1=b*2,c1=c;
double l=-100,r=100;
while(abs(f(l))>=0.00001)
{
l=f1(l);
}
while(abs(f(r))>=0.00001)
{
r=f1(r);
}
double mid=-b1/a1/2;
while(abs(f(mid))>=0.001)
{
mid=f1(mid);
cout<<mid<<" "<<k<<" "<<f(mid)<<endl;
}
printf("%.2f %.2f %.2f",l,mid,r);
}