📄 newton_down.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 + -