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)<e 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 值就已经达到相当位数的有效数字, 而导致检验数据中的 0.00001 ??约束条件根本起不到应有的精度约束效果。