📄 11.cpp
字号:
//Richardson外推加速法
#include<iostream.h>
#include<iomanip.h>
#include<cmath>
#include<vector>
const double x=1;
const double e=0.02;
const double E=0.00001;
using namespace std;
void main()
{
vector<double> D0,D1,D2,D3;
double record,d,h,h0; //步长h 初始步长h0
int i=0;
cout<<"区间长度h=";
cin>>h0;
h=h0/pow(2,i);
d=(exp(x+h)-exp(x-h))/(2*h);
D0.push_back(d);
i++;
do{
record=d;
h=h0/pow(2,i);
d=(exp(x+h)-exp(x-h))/(2*h);
D0.push_back(d);
i++;
}while(fabs(d-record)>e);
cout<<setw(5)<<"D0"<<endl;
for(i=0;i<D0.size();i++)
cout<<setprecision(7)<<D0[i]<<endl;
cout<<endl;
for(i=0;i<D0.size()-1;i++)
D1.push_back((4*D0[i+1]-D0[i])/3);
cout<<setw(5)<<setprecision(7)<<"D1"<<endl;
for(i=0;i<D1.size();i++)
cout<<setprecision(7)<<D1[i]<<endl;
cout<<endl;
for(i=0;i<D1.size()-1;i++)
D2.push_back((16*D1[i+1]-D1[i])/15);
cout<<setw(5)<<setprecision(7)<<"D2"<<endl;
for(i=0;i<D2.size();i++)
cout<<setprecision(7)<<D2[i]<<endl;
cout<<endl;
cout<<setw(5)<<setprecision(7)<<"D3"<<endl;
for(i=0;i<D2.size()-1;i++)
D3.push_back((64*D2[i+1]-D2[i])/63);
for(i=0;i<D3.size();i++)
{
if((D3[i+1]-D3[i])<E)
cout<<setprecision(7)<<D3[i]<<endl;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -