Romberg求积法Word格式文档下载.docx
- 文档编号:14540655
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:12
- 大小:120.10KB
Romberg求积法Word格式文档下载.docx
《Romberg求积法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Romberg求积法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
这样,前一次分割得到的函数值在分半以后仍可被利用,且易于编程。
●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)|<
e即可利用加速推算公式推算出结果。
3.2龙贝格算法程序包步骤
1.输入积分上限
2输入程序下限
3输入区间等分数
4输入要求的函数
●
●5.算法程序表示
#include<
stdio.h>
math.h>
#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;
B'
fan=B(x);
C'
fan=C(x);
D'
fan=D(x);
E'
fan=E(x);
G'
fan=G(x);
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++)//循环输出
m=pow(2,j);
S[%0.0lf]=%0.7lf"
m,s[j]);
\t"
return(s[k-1]);
//返回最后一个值s[k-1]
doubleCotes(intk)//科特斯公式
Simpson(k);
=k-2;
c[i]=(16.0*s[i+1]-s[i])/15.0;
//递推科特斯公式
j++)//循环输出
C[%0.0lf]=%0.7lf\t"
m,c[j]);
return(c[k-2]);
//返回最后一个值c[k-2]
doubleRomberg(intk)//隆贝格公式
//调用科特斯公式
Cotes(k);
=k-3;
r[i]=(64.0*c[i+1]-c[i])/63.0;
//递推隆贝格公式
m=pow(2,j);
R[%0.0lf]=%0.7lf\t"
m,r[j]);
return(r[k-3]);
//返回最后一个值r[k-3]
main()
intk;
chary;
请从以下公式中选择积分函数:
A:
sin(x)/(x)\tB:
cos(x^2+2x+1)\tC:
atan(sqrt(x^2+1))\n\n"
D:
sqrt(e^x+sin(2x))\tE:
x^3+3*x^2+5\tG:
log10(x)/pow(2,x)\n\n"
请选择函数F(x)(大写):
scanf("
%c"
&
hs);
getchar();
请输入您选用的求积公式第一个字母(大写):
y=getchar();
switch(y)//根据输入的大写字母判断所选求积公式
case'
T'
请输入分半次数:
scanf("
%d"
k);
printf("
请输入积分区间a,b且(a<
b):
scanf("
%lf,%lf"
a,&
b);
if(a==0)a=0.0000000001;
//输入当积分区间为零时默认为一极小数
printf("
--------------------------------------------------------------\n"
\nTxing=%0.7f\n"
Txing(k));
//输出计算结果小数点后保留7位
S'
请输入分半次数大于等于1的正整数:
scanf("
---------------------------------------------------------------\n"
Simpson=%0.7f\n"
Simpson(k));
请输入分半次数大于等于2的正整数:
//输入当积分区间为零时默认为一极小数
Cotes=%0.7f\n"
Cotes(k));
R'
请输入分半次数大于等于3的正整数:
Romberg=%0.7f\n"
Romberg(k));
default:
公式输入有误,请查证!
6.算法结果截图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Romberg 求积法