📄 newton.cpp
字号:
#include<iostream.h>
#include<math.h>
class NewtonOverlap
{
public:
virtual void Func(double x,double y[]){}
bool Newton(double *x,int nMaxIt=200,double eps=0.1);
}; //定义一个类
class Ntequ:public NewtonOverlap
{
void Func(double x,double y[])
{
y[0]=x*x*x-2.0*x*x+4.0*x+1.0;
y[1]=3.0*x*x-4.0*x+4.0;
}
}; //定义一个NewtonOverlap的子类,用于迭代计算
bool NewtonOverlap::Newton(double*x,int num,double eps)
{
cout<<"请输入精度 eps = ";
cin>>eps;
double y[2],d,p,x0,x1;
x0=*x;
Func(x0,y);
d=eps+1.0;
while((d>=eps)&&(num!=0))
{
if(y[1]==0.0)
return false;
x1=x0-y[0]/y[1];
Func(x1,y);
d=fabs(x1-x0);
p=fabs(y[0]);
if(p>d)
d=p;
x0=x1;
num--;
} //判断过程
*x=x1;
return true;
} //根据精度算
void main()
{ Ntequ equation;
double x;
cout<<"请输入初始值 X = ";
cin>>x;
int k=equation.Newton(&x);
if(k)
cout<<"求得零附近的一个实根为 x = "<<x<<endl;
else
cout<<"求解失败";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -