实验9 数值积分实验
成绩 |
实验类型:●验证性实验 ○综合性实验 ○设计性实验
实验目的:进一步熟练掌握变步长数值积分算法,提高编程能力和解决定积分问题的实践技能。
实验内容:用龙贝格积分算法计算
实验原理
实验算例中a=0,b=1,f(x)=x2 .
T(0)=(b-a)(f(a)+f(b))/2 ; H(0) =(b-a)·f( (a+b)/2 ) ; T(i)=(T(i-1)+H(i-1))/2
T(i)的语义是将积分区间做2i 等分复化梯形求积分公式算出的近似值。
H(i)的语义是将积分区间做2i 等分时,将每个小区间的长度乘该小区间中点处函数值的乘积进行累加求和的结果。
龙贝格积分算法:生成i>=j 的积分近似值表R(i, j)具体计算如下:.
R(i,0)=T(i)=(T(i-1)+H(i-1))/2, i>=0,T(i)为区间逐次减半递推梯形求积分公式算出的结果;
R(i,1)=S(i), i>=1,S(i)为由T(i)、T(i-1)联合递推得出的区间逐次减半递推辛普森求积分公式算出的结果;
R(i,2)=B(i), i>=2,B(i)为由S(i)、S(i-1)联合递推得出布尔求积分公式算出的结果;
,,,,,,,,,,;归纳总结有如下递推关系式
由上面递推关系式计算积分近似值R(i, j)构成三角表,循环结束条件:|R(i, i)-R(i-1, i-1)|<< span="">成立时,则以R(i, i)作为最终的积分近似值,否则继续循环计算。这一算法叫龙贝格积分算法,
实验步骤
1 要求上机实验前先编写出程序代码
2 编辑录入程序
3 调试程序并记录调试过程中出现的问题及修改程序的过程
4 经反复调试后,运行程序并验证程序运行是否正确。
5 记录运行时的输入和主要中间结果输出,以便与手工解算作比较。
6 要求在A4纸上手工计算并和计算机程序计算的主要中间结果进行比较,验证手工解算和机器解算的R(i, j)构成三角表是否一致。
实验报告:根据实验情况和结果撰写并递交实验报告。
实验总结 (学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)
程序代码(MATLAB程序,必须自己独立编程)
电子报告word文件命名规则:专业班级-学号后两位-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验9报告word文件命名则应是:信息123-15-实验9-郭海涛.doc, 其中 .doc是Word文件扩展名。特别提醒:电子报告文件命名不规范的报告将不予接收。
一、实验代码
function s = maromb(fun,a,b,tol)
%用龙贝格公式求积分
%格式:s = maromb(fun,a,b,tol),fun 是被积函数,a,b是积分
%下、上限,tol 是容许误差,s 是返回积分近似值
if nargin < 4,tol = 1e-4;end
i = 1;j = 1;h = b - a;
T(1,1) = h * (feval(fun,a) + feval(fun,b)) / 2;
T(i+1,j) = T(i,j)/2 + sum(feval(fun,a + h/2:h:b - h/2)) * h/2;
T(i+1,j+1) = (4^j * T(i+1,j) - T(i,j)) / (4^j - 1);
while (abs(T(i+1,i+1) - T(i,i)) > tol)
i = i+1;
h = h/2;
T(i+1,1) = T(i,1)/2 + sum(feval(fun,a + h/2:h:b - h/2)) * h/2;
for j = 1:i
T(i+1,j+1) = (4^j * T(i+1,j) - T(i,j)) / (4^j - 1);
end
end
T
s = T(i+1,j+1);
运行结果:
>> fun = inline('x.^2');
>> a = 0;
>> b = 1;
>> tol = 1e-5;
>> s = maromb(fun,a,b,tol)
T =
0.5000 0 0
0.3750 0.3333 0
0.3438 0.3333 0.3333
s =
0.3333
二、实验总结
通过本次实验我学会了使用龙贝格公式求积分的算法程序;掌握了使用龙贝格算法求解积分的本领;训练了我的编程的能力和把数学问题转化为算法的能力;在本次实验中我发现了自己在编程方面和思考问题方面的一些不足;在今后的学习中我的编程能力和编写算法的能力有待提高。