实验四数值积分与数值微分
专业班级:信计131班姓名:段雨博学号:2013014907
一、实验目的。
1、熟悉matlab编程。
2、学习数值积分程序设计算法。
3、通过上机进一步领悟用复合梯形、复合辛普森公式,以及用龙贝格求积方法计算积分的原理。
二、实验题目。
p1371、用不同数值方法计算积分。
1)取不同的步长。分别用复合梯形及复合辛普森求积计算积分,给出误差中关于的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的,使得精度不能再被改善?
2)用龙贝格求积计算完成问题(1)。
三、实验原理与理论基础。
1.1复合梯形公式及其复合辛普森求解。
误差关于h的函数:
复合辛普森公式:
误差关于h的函数:
1.2龙贝格求积算法:
龙贝格求积公式是梯形法的递推化,也称为逐次分半加速法,它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上,构造出一种计算积分的方法,同时它有在不断增加计算量的前提下提高误差的精度的特点。
计算过程如下:
1)取,求:
2)求梯形值即按递推公式计算。
3)求加速值,按公式逐个求出t表的地k行其余各元素。
4)若(预先给定的精度),则终止计算,并取转(2)继续计算。
t表。上表指出了计算过程,第二列给出了子区间长度,i表示第i步外推。
可以证明,如果充分光滑,那么t表每一列的元素及对角线元素均收敛到所求的积分。
四、实验内容。
程序设计如下:
1、复合梯形法m文件:
function t=natrapz(fname,a,b,n)
h=(b-a)/n;
fa=feval(fname,a);fb=feval(fname,b);f=feval(fname,a+h:h:b-h+0.001*h);
t=h*(0.5*(fa+fb)+sum(f));
2、复合辛普森法m文件:
function t=natrapz(fname,a,b,n)
h=(b-a)/n;
fa=feval(fname,a);fb=feval(fname,b);f1=feval(fname,a+h:h:b-h+0.001*h);
f2=feval(fname,a+h/2:h:b-h+0.001*h);
t=h/6*(fa+fb+2*sum(f1)+4*sum(f2));
3、龙贝格算法m文件:
function [i,step]=roberg(f,a,b,eps)
if(nargin==3)
eps=1.0e-4;
end;m=1;
tol=10;
k=0;t=zeros(1,1);
h=b-a;
t(1,1)=(h/2)*(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b));
while tol>eps
k=k+1;
h=h/2;
q=0;for i=1:m
x=a+h*(2*i-1);
q=q+subs(sym(f),findsym(sym(f)),x);
endt(k+1,1)=t(k,1)/2+h*q;
m=2*m;
for j=1:k
t(k+1,j+1)=t(k+1,j)+(t(k+1,j)-t(k,j))/4^j-1);
endtol=abs(t(k+1,j+1)-t(k,j));
endi=t(k+1,k+1);
step=k;
1、复合梯形法运行:
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,10),format short;ans =
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,100),format short;ans =
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,1000),format short;ans =
2、复合辛普森法运行:
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,10),format short;ans =
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,100),format short;ans =
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,1000),format short;ans =
3、龙贝格算法运行:
> [q,s]=roberg('sqrt(x)*log(x)',0.0000001,1)q =
s =五、实验结果。
1、复合梯形法结果:
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,10),format short;ans =
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,100),format short;ans =
> format long;natrapz(inline('sqrt(x).*log(x)')eps,1,1000),format short;ans =
2、复合辛普森法结果:
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,10),format short;ans =
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,100),format short;ans =
> format long;natrapzz(inline('sqrt(x).*log(x)')eps,1,1000),format short;ans =
3、龙贝格算法结果:
> [q,s]=roberg('sqrt(x)*log(x)',0.0000001,1)q =
s =实验结论:对比以上的计算结果可得:复合辛普森法求积分精度明显比复合梯形法求积的精度要高,且当步长取不同值时,即越大,越小时,积分精度越高。
实验结果说明不存在一个最小的,使得精度不能再被改变。由两个相应的关于的误差余项,,其中,可知愈小,余项愈小,积分精度越高。
六、实验结果分析与小结。
1、通过这次实习,加深了对复合梯形法、复合辛普森法和龙贝格法的理解,之前学习这三个算法时觉得特别麻烦,公式那么长,而且不是很理解。这次实习对三种算法的编程,对三种算法进行详细地分析,现在理解了算法的过程。在编写函数程序的过程中也在不断地提高和改进,有些虽然不是很熟,也不太清楚到底怎么做,但是查阅了之后就懂了。
2、在编写程序,进行算法设计还是会出现很大问题,有程序运行不出来修改也是很麻烦,而且由于之前对算法的掌握不是很好,所以反复仔细看了课本上的算法才进行编写。对matlab的认识和熟悉程度也不够,在课下也是很少在matlab下运行程序啊什么,对matlab的很多东西都不懂,也不知道怎么用,虽然知道用matlab解决问题很方便,可是由于时间和条件的限制,平时很少接触。以后好好利用实习的时间熟悉matlab。
数值分析实验
数值分析实验报告。一 实验目的。1 掌握gauss顺序消去和选列主元消去解线性方程组基本原理和方法。2 用matlab编写程序实现gauss顺序消去和选列主元消去解线性方程组。二 实验内容。1.用lu分解及列主元高斯消去法解线性方程组。输出中系数分解的矩阵,解向量及。二 1 gauss顺序消去和选列...
数值分析实验册封面格式
数值分析 计算实习报告册。专业。学号。姓名。2011 2012年第二学期。计算实习题一。第2章插值法。50页第3题。下列数据点的插值。可以得到平方根函数的近似,在区间 0,64 上作图。1 用这9个点做8次多项式插值。2 用三次样条 第一边界条件 程序求s x 从得到结果看在 0,64 上,哪个插值...
数值分析上机实验报告
题目 函数逼近 曲线拟合。目的 掌握曲线拟合基本使用方法。数学原理 p,s polyfit x,y,3 其中x,y为取样值,3为得出的结果的最高次数。p为对应次数的系数,s为误差值向量,其中x,y是等长的向量,p是一个长度为 m 1的向量。结果分析和讨论 23.观察物体的运动,得出时间t与距离s的关...