⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newton_down.cpp

📁 牛顿下山法
💻 CPP
字号:
#include <iostream.h>
#include <cmath>
double fun(double&x)
{return (x*x*x-x-1);}
double fun1(double&x)
{return (3*x*x-1);}
class DO
{
public:
	DO(double a,double eps1,double eps2):x(a),eps_x(eps1),eps_f(eps2){}
    friend double fun(double&x);
    friend double fun1(double&x);
    double get_new_x()
	{i=1,k=1.0,n=1;
	do
	{x1=(x-k*(fun(x)/fun1(x)));
	//if(fabs(fun(x1))>=fabs(fun(x)))
	for(;fabs(fun(x1))>=fabs(fun(x));)
	    {k=k/2.0;x1=(x-k*(fun(x)/fun1(x)));}
	 //if(fabs(fun(x1))<fabs(fun(x))) 
	if(k<1)k=1;
	cout<<"x"<<i++<<"="<<x1<<"  f="<<fun(x1)<<"    n="<<n<<endl;
	if(fabs(x)<1)t1=fabs(x1-x);
	   else t1=fabs(x1-x)/fabs(x1);
	x=x1;
		//if(fabs(x)<1)t1=fabs(x1-x);
		   //else t1=fabs(x1-x)/fabs(x1);
	}while((n++<=100)&&(t1>=eps_x||fun(x)>=eps_f));
	return x;
	}
	void print_x()
	{cout<<"HELLO!"<<endl<<"The final x="<<x<<endl;}
    void print_eps()
	{cout<<"eps_x="<<eps_x<<endl<<"eps_f="<<eps_f<<endl;}
private:
	double x,x1,t1;
	double k;
	double eps_x,eps_f;
	int i,n;
};
int main()
{DO n1(0.6,0.00000001,0.0000000001),
    n2(1.5,0.00000001,0.0000000001),
	n3(-0.5,0.00000001,0.0000000001);
n1.get_new_x();
n1.print_x();
n2.get_new_x();
n2.print_x();
n3.get_new_x();
n3.print_x();
n1.print_eps();
return 0;
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -