w#1,求调
查看原帖
w#1,求调
1143757
nizi15926楼主2023/10/18 16:37

我从数学的角度,切线零点不会越过极值点,但是它在第二次迭代就出去了,能看看为什么会超吗?从对称点开始迭代

#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)// 返回切线与x轴的交点 
{
    k=3*a1*pow(x,2)+2*b1*x+c;
	return x-f(x)/k;
}
double f(double x)//计算f(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);    
}
2023/10/18 16:37
加载中...