数值分析课程设计Word格式文档下载.docx
《数值分析课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
(1)用几个低阶的Newton-Cotes公式计算积分
的近似值,自己设置不同精度要求,对结果进行比较分析。
(2)用Romberg积分法计算积分
的近似值,自己设置不同精度要求,对结果进行比较分析;
与
(1)的结果进行比较分析,谈谈你的体会。
①Cotes公式积分计算MatLab代码如下:
functions=cotes(f,a,b,n)
%f:
Ò
ª
Ç
ó
º
¯
Ê
ý
%a,b:
ø
¼
ä
%n:
µ
È
·
Ö
%µ
÷
Ó
Ã
¸
ñ
½
£
formatlong%É
è
¾
«
¶
symst
h=(b-a)/n;
%¼
Æ
Ë
ã
²
³
¤
C=zeros(1,n+1);
%Ç
Newton-CotesÏ
j=1;
fork=0:
n
d=1;
J=((-1)^(n-k))/(n*prod(1:
k)*prod(1:
n-k));
fori=0:
ifi~=k
d=d*(t-i);
end
C(j)=J*int(d,0,n);
j=j+1;
¨
»
s=0;
s=s+C(j)*feval(f,a+k*h);
j=j+1;
s=s*(b-a);
%Ê
ö
á
¹
û
%f=inline('
exp(-x.^2)'
);
%a=0;
b=1;
n=4;
%cotes(f,a,b,n)
运行结果如下图窗口截图:
流程图如下:
②辛普森(Simpson)积分公式求解MatLab代码如下:
functions=simpson(f,a,b,n)
h=(b-a)/(2*n);
s1=0;
s2=0;
fork=1:
x=a+h*(2*k-1);
s1=s1+feval(f,x);
(n-1)
x=a+h*2*k;
s2=s2+feval(f,x);
s=h*(feval(f,a)+feval(f,b)+4*s1+2*s2)/3;
symsx
f=exp(-x.^2);
)
%simpson(f,0,1,4)
③梯形公式求解MatLab代码如下:
functions=trap(f,a,b,n)
x=a+h*k;
s=s+feval(f,x);
s=h*(feval(f,a)+feval(f,b))/2+h*s;
%trap(f,a,b,4)
龙贝格(Romberg)计算方法MatLab代码如下:
%Romberg»
¡
®
exp(-x.^2)¡
fprintf('
Ï
Â
æ
RombergË
Ä
´
aµ
b»
ü
â
¡
\n'
ë
Î
f=input('
±
í
ï
:
'
a=input('
Þ
b=input('
É
epsilon=input('
eps:
%±
Á
¿
õ
h=b-a
k=1
T(1,1)=(h/2)*(subs(f,a)+subs(f,b))
ú
Ì
.
while
(1)
T(k+1,1)=0.5*(T(k,1)+h*sum(subs(f,a+(2*[1:
(2^(k-1))]-1)*h/2)))
form=1:
k
T(k-m+1,m+1)=(4^m*T(k-m+2,m)-T(k-m+1,m))/(4^m-1)
end
ifabs(T(1,k+1)-T(1,k))<
epsilon
break;
else
h=h/2
k=k+1
%9.8f¡
T(1,k+1))
体会和感想:
在实验中体会到编写程序需要仔细,熟悉matlab的使用以及matlab程序设计,熟悉并掌握复化辛普森公式的原理以及所设计的程序,以及龙贝格方法的原理以及所设计的程序。
根据牛顿柯斯特求积分的原理将所求函数的积分区间分为多个小的积分区间,先求出每个小积分区间上的函数值,然后再将每个小区间上的求积结果加起来就是我们所要求的总函数的积分值,当函数区间所分的小区间的个数越多的时候总函数所计算出来的结果就精确,其原因就是所分的区间数越多,计算时每个小区所带来的误差就越小,当将总的积分值加起来的时候所带来的总的误差也就越小,所以最后的结果的精度越高,而用龙贝格求积和牛顿柯斯特也一样是要将总区间分为很多小的相等的区间,只是他们所用的计算原理不一样,当用此方法求积分时,所设的误差限越小,所求得的积分值就越是精确。
理论基础:
(参看手写附件)