龙贝格积分梯形matlab,MATLAB复化梯形法及龙贝格法计算定积分.doc

. . WORD.格式整理. .

. .专业.知识.分享. .

姓名:樊元君 学号:2012200902 日期:2012.11.06

1.实验目的:

掌握复化梯形法与龙贝格法计算定积分。

2.实验内容:

分别写出变步长梯形法与龙贝格法计算定积分的算法,编写程序上机调试出结果,要求所编程序适用于任何类型的定积分,即能解决这一类问题,而不是某一个问题。实验中以下列数据验证程序的正确性。 求。

3.程序流程图:

变步长梯形法流程图:

●龙贝格法流程图:

4.源程序:

变步长梯形法:

function [ y ] =BTX(a,b,e)

a=input('a=');

b=input('b=');

e=input('e=');

h=(b-a);

t1=((f(a)+f(b))*h)/2;

t2=0; %准备初值%

while abs(t2-t1)>e %while语句控制计算精度以及控制计算时长

if t2~=0 %按照变步长梯形法

h=h/2; %递推公式求二分后积分值

t1=t2;

end

s=0;

x=a+h/2;

while x

s=s+f(x);

x=x+h;

end

t2=(t1/2)+(h/2)*s;

end

disp('插值结果=');disp(t2);

end

function [ y ] =f(x) %被积分函数%

if x~=0

y=sin(x)/x;

else

y=1;

end

end

●龙贝格法程序:

function [ y ] =LB(a,b,e)

format long

a=input('a=');

b=input('b=');

e=input('e=');

h=(b-a);

t1=((f(a)+f(b))*h)/2;

k=1;s=0;s1=0;s2=0;c2=0;c1=0;r1=0;r2=0; %准备初值%

while k==1||k==2||k==3||k>=4

s=0;x=a+h/2;

while x

s=s+f(x);x=x+h;

end

t2=(t1/2)+(h/2)*s;

s2=t2+(t2-t1)/3;

if k==1

k=k+1;h=h/2;t1=t2;s1=s2;

continue

end

c2=s2+(s2-s1)/15;

if k==2

c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;

continue

end

r2=c2+(c2-c1)/63;

if k==3

r1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;

continue

end

if abs(r2-r1)

break

else

r1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;

continue

end

end

disp('插值结果=');disp(r2);

end

function [ y ] =f(x) %被积分函数%

if x~=0

y=sin(x)/x;

else

y=1;

end

end

5.运行结果:

6.实验小结:

(1)刚开始没注意到积分中,被积函数在x=0点函数值为1,而编程中函数定义f(x)=sin(x)/x,当x=0时,程序只能得到结果0/0=NaN(无穷大),导致后面积分计算算法完全失去意义,后来采取if和else以特殊情况对待x=0,才解决问题;

(2)龙贝格法是对变步长梯形法的升华,在对复合梯形法理解透彻,并且编程合理,再去解决龙贝格法编程,容易很多;

(3)充分理解两个算法的内涵和推理过程,对于编程正确性有很大帮助,刚开始由于对变步长梯形法理解不到位,一处循环采用if语句(本应采用while)导致计算结果不受约束条件约束的错误;

(4)由于龙贝格法至少要算4个T值后才有R值,但由于龙贝格法收敛快,导致第一个R值就已经达到相当位数的有效数字,而导致检验数据中的约束条件根本起不到应有的精

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值