steffensen加速.cpp

来自「Steffensen法加速不动点迭代」· C++ 代码 · 共 53 行

CPP
53
字号
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;

const double EPS=0.1e-16;
const int MN=50;

double f(double x)
{return x*x*x+4*x*x-10;}
double T(double x)
{return sqrt(10/(4+x));}

double Steffensen(double x0)
{double x1,y,z,temp;
y=T(x0);
z=T(y);
x1=z;
temp=z-2*y+x0;
if(fabs(temp)<=EPS)
return x1;
x1=(y-x0)*(y-x0)/temp;
return x0-x1;
}

	void SteffensenAcc(double x)
	{int k;
	double x0=x;
	double Y[MN],X0[MN],X1[MN],E[MN];
	X0[0]=x0;
	Y[MN]=f(X0[0]);
	X1[0]=Steffensen(X0[0]);
		for(k=1;k<MN;k++)
		{X0[k]=X1[k-1];
		Y[k]=f(X0[k]);
		X1[k]=Steffensen(X0[k]);
		E[k]=fabs(X1[k]-X0[k]);
		cout<<"k	"<<"X0[k]       "<<"Y0[k]       "<<"X1[k]"<<endl;
		cout.precision(10);
		cout<<k<<X0[k]<<Y[k]<<X1[k]<<endl;
		if(E[k]<EPS)
		break;
		}
	}

void main()
{
double x0;
cout<<"请输入初值";
cin>>x0;

SteffensenAcc(x0);
}

⌨️ 快捷键说明

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