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

📄 龙贝格算法.cpp

📁 数值分析(计算方法):欧拉方法、高斯-赛德尔迭代法、拉格朗日及分段线性插值、龙贝格算法、牛顿下山法、选主元高斯消去法
💻 CPP
字号:
#include<iostream>
#include<cmath>
#include <iomanip>
using namespace std;

double f(double x)
{  if(x==0) return 1;
   else return sin(x)/x;
}
    
int main()
{  int i=0;
   double r[20];
   double a,b,h,x,k,t1,t2,s,s1,s2,c1,c2,r1,r2;
   long double e;   
   cout<<"input a:";
   cin>>a;
   cout<<"input b:";
   cin>>b;
   cout<<"input e:";
   cin>>e;
   h=b-a;
   t1=h*(f(a)+f(b))/2;
   r[i]=t1;
   i++;                     
   k=1;
for(;;)
	{  s=0;x=a+h/2;
     do{ s=s+f(x);
         x=h+x;
       }while(x<b);
     t2=t1/2+(h/2)*s;
     r[i]=t2;i++;                
     s2=t2+(t2-t1)/3;
     r[i]=s2;i++;               
     
     if(k==1)
     {   k=k+1;h=h/2;
         t1=t2;s1=s2;
         continue;
     }
     
     c2=s2+(s2-s1)/15.0;
     r[i]=c2;i++;                   
     
     if(k==2)
     {   c1=c2;
         k=k+1;h=h/2;
         t1=t2;s1=s2;
         continue;
     }
     
     r2=c2+(c2-c1)/63.0;
     r[i++]=r2;
     
     if(k==3)
     {   r1=r2;
         c1=c2;
         k=k+1;h=h/2;
         t1=t2;s1=s2;
         continue;
     } 
     
     r1=r2;
     c1=c2;
     k=k+1;h=h/2;
     t1=t2;s1=s2;
     
     if(abs(r2-r1)<e)
        break;
        
  }
  
   int l=12,n=13;
   cout<<" k "<<setw(6)<<"T"<<setw(l)<<"S"<<setw(l)<<"C"<<setw(l)<<"R"<<endl;
   cout<<" 0 "<<setw(4)<<showpoint<<setprecision(7)<<r[0]<<endl;
   cout<<" 1 "<<setw(4)<<r[1]<<setw(n)<<r[2]<<endl;
   cout<<" 2 "<<setw(4)<<r[3]<<setw(n)<<r[4]<<setw(n)<<r[5]<<endl;
   cout<<" 3 "<<setw(4)<<r[6]<<setw(n)<<r[7]<<setw(n)<<r[8]<<setw(n)<<r[9]<<endl;
   cout<<" 4 "<<setw(4)<<r[10]<<setw(n)<<r[11]<<setw(n)<<r[12]<<setw(n)<<r[13]<<endl;
   return 0;
} 




   

⌨️ 快捷键说明

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