Romberg求积法.docx
- 文档编号:5895111
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:11
- 大小:109.53KB
Romberg求积法.docx
《Romberg求积法.docx》由会员分享,可在线阅读,更多相关《Romberg求积法.docx(11页珍藏版)》请在冰豆网上搜索。
Romberg求积法
安徽中医药大学
题目:
Romberg求积法c语言编程
姓名:
杨撞撞
学号:
13713042
班级:
13医软
(1)班
1简介
2计算公式
3算法描述
4程序流程图
5算法程序表示
6算法结果截图
●1.简介
龙贝格求积公式也称为逐次分半加速法。
它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上,构造出一种加速计算积分的方法。
作为一种外推算法,它在不增加计算量的前提下提高了误差的精度.
在等距基点的情况下,用计算机计算积分值通常都采用把区间逐次分半的方法进行。
这样,前一次分割得到的函数值在分半以后仍可被利用,且易于编程。
●2.计算公式
梯形公式
复化辛普森公式
复化科特斯公式
龙贝格求积公式
其对应的公式为:
T2n=1/2(Tn+Hn)(梯形公式)
Sn=4/(4-1)T2n-1(4-1)Tn(辛普森公式)
Cn=4^2/(4^2-1)S2n-1/(4^2-1)Sn(柯特斯公式)
Rn=4^3/(4^3-1)C2n-1/(4^3-1)Cn(龙贝格求积法公式)
●3.算法描述
3.1龙贝格算法基本描述
先算出T0(0),从而计算出T0
(1),以此类推,直到计算出
|T0(0)-Tn-1(0)| 3.2龙贝格算法程序包步骤 1.输入积分上限 2输入程序下限 3输入区间等分数 4输入要求的函数 5计算出所求函数的积分,分别是: ◆复化梯形求积结果 ◆辛普森求积结果 ◆柯特斯求积结果 ◆龙贝格求积结果 ●4.程序流程图 例题: 用Romberg方法计算积分I=0¹sin(x)/xdx的相关算法流程图表示如下图 ● 5.算法程序表示 #include #include #defineA(x)(sin(x)/x)//宏定义若干常用函数A,B,C,D,E,G #defineB(x)(cos(x*x+2*x+1)) #defineC(x)(atan(sqrt(x*x+1))) #defineD(x)(sqrt(exp(x)+sin(2*x))) #defineE(x)(x*x*x+3*x*x+5) #defineG(x)(log10(x)/pow(2,x)) doublet[20],s[20],c[20],r[20];//定义全局数组 doubledh,fan,a,b,m;//定义全局变量 intjj=0; charhs; doubleF(doublex)//用switch调用若干被积函数 { switch(hs) { case'A': fan=A(x);break; case'B': fan=B(x);break; case'C': fan=C(x);break; case'D': fan=D(x);break; case'E': fan=E(x);break; case'G': fan=G(x);break; default: printf("输入错误! "); } return(fan);//返回被积函数值 } doubleH(inti)//求和函数并返回和SUM { intj; doublezh,SUM=0.0;//定义求和变量SUM并赋初值 for(j=1;j<=pow(2,i-1);j++) { zh=(a+((2*j-1)*(b-a))/pow(2,i)); SUM=SUM+F(zh);//调用F(x)函数 } SUM=(b-a)*SUM/pow(2,i); return(SUM); } doubleTxing(intk)//梯形公式 { if(k==0)dh=t[jj]=((b-a)/2)*(F(a)+F(b));//分半次数为零时T形公式求积 else { dh=0.5*Txing(k-1)+H(k);//Txing函数递归调用循环输出并返回dh t[++jj]=dh; } m=pow(2,jj); printf("T[%0.0lf]=%0.7lf\t",m,t[jj]);//输出并返回dh return(dh); } doubleSimpson(intk)//辛普森公式 { inti,j; Txing(k);//调用梯形公式 for(i=0;i<=k-1;i++) s[i]=(4.0*t[i+1]-t[i])/3.0;//递推辛普森公式 printf("\n"); for(j=0;j<=k-1;j++)//循环输出 { m=pow(2,j); printf("S[%0.0lf]=%0.7lf",m,s[j]); printf("\t"); } return(s[k-1]);//返回最后一个值s[k-1] } doubleCotes(intk)//科特斯公式 { inti,j; Simpson(k); for(i=0;i<=k-2;i++) c[i]=(16.0*s[i+1]-s[i])/15.0;//递推科特斯公式 printf("\n"); for(j=0;j<=k-2;j++)//循环输出 { m=pow(2,j); printf("C[%0.0lf]=%0.7lf\t",m,c[j]); } return(c[k-2]);//返回最后一个值c[k-2] } doubleRomberg(intk)//隆贝格公式 { inti,j;//调用科特斯公式 Cotes(k); for(i=0;i<=k-3;i++) r[i]=(64.0*c[i+1]-c[i])/63.0;//递推隆贝格公式 printf("\n"); for(j=0;j<=k-3;j++)//循环输出 { m=pow(2,j); printf("R[%0.0lf]=%0.7lf\t",m,r[j]); printf("\n"); } return(r[k-3]);//返回最后一个值r[k-3] } main() { intk; chary; printf("请从以下公式中选择积分函数: \n"); printf("A: sin(x)/(x)\tB: cos(x^2+2x+1)\tC: atan(sqrt(x^2+1))\n\n"); printf("D: sqrt(e^x+sin(2x))\tE: x^3+3*x^2+5\tG: log10(x)/pow(2,x)\n\n"); printf("请选择函数F(x)(大写): \n"); scanf("%c",&hs); getchar(); printf("请输入您选用的求积公式第一个字母(大写): \n"); y=getchar(); switch(y)//根据输入的大写字母判断所选求积公式 { case'T': printf("请输入分半次数: \n"); scanf("%d",&k); printf("请输入积分区间a,b且(a \n"); scanf("%lf,%lf",&a,&b); if(a==0)a=0.0000000001;//输入当积分区间为零时默认为一极小数 printf("--------------------------------------------------------------\n"); printf("\nTxing=%0.7f\n",Txing(k));break;//输出计算结果小数点后保留7位 case'S': printf("请输入分半次数大于等于1的正整数: \n"); scanf("%d",&k); printf("请输入积分区间a,b且(a \n"); scanf("%lf,%lf",&a,&b); if(a==0)a=0.0000000001;//输入当积分区间为零时默认为一极小数 printf("---------------------------------------------------------------\n"); printf("Simpson=%0.7f\n",Simpson(k));break;//输出计算结果小数点后保留7位 case'C': printf("请输入分半次数大于等于2的正整数: \n"); scanf("%d",&k); printf("请输入积分区间a,b且(a \n"); scanf("%lf,%lf",&a,&b); if(a==0)a=0.0000000001;//输入当积分区间为零时默认为一极小数 printf("---------------------------------------------------------------\n"); printf("Cotes=%0.7f\n",Cotes(k));break;//输出计算结果小数点后保留7位 case'R': printf("请输入分半次数大于等于3的正整数: \n"); scanf("%d",&k); printf("请输入积分区间a,b且(a \n"); scanf("%lf,%lf",&a,&b); if(a==0)a=0.0000000001;//输入当积分区间为零时默认为一极小数 printf("---------------------------------------------------------------\n"); printf("Romberg=%0.7f\n",Romberg(k));break;//输出计算结果小数点后保留7位 default: printf("---------------------------------------------------------------\n"); printf("公式输入有误,请查证! \n"); } printf("---------------------------------------------------------------\n"); } 6.算法结果截图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Romberg 求积法