Romberg求积法Word格式文档下载.docx

上传人:b****2 文档编号:14540655 上传时间:2022-10-23 格式:DOCX 页数:12 大小:120.10KB
下载 相关 举报
Romberg求积法Word格式文档下载.docx_第1页
第1页 / 共12页
Romberg求积法Word格式文档下载.docx_第2页
第2页 / 共12页
Romberg求积法Word格式文档下载.docx_第3页
第3页 / 共12页
Romberg求积法Word格式文档下载.docx_第4页
第4页 / 共12页
Romberg求积法Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Romberg求积法Word格式文档下载.docx

《Romberg求积法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Romberg求积法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

Romberg求积法Word格式文档下载.docx

这样,前一次分割得到的函数值在分半以后仍可被利用,且易于编程。

●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.算法结果截图

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1