数值分析法求正弦余弦积分函数

  • 格式:doc
  • 大小:248.73 KB
  • 文档页数:12

天津职业技术师范大学课程设计任务书理学院数学1403 班学生张群课程设计课题:用数值积分法计算正弦积分函数和余弦积分函数一、课程设计工作日自 2016 年 7 月 4 日至 2016 年 7 月 5日二、同组学生:无三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、完成时间、主要参考资料等):课题来源:教师自拟类型:理论研究目的和意义:培养学生对数值分析中主要算法的应用能力,探索相关算法之间的内在联系。

基本要求:根据数值分析课程所学的知识,应用Matlab软件编写程序,完成对算法及其内在原理的实验研究。

完成时间:参考资料:《数值分析》李庆扬等清华大学出版社指导教师签字:教研室主任签字:一、问题叙述用数值积分法计算正弦积分函数和余弦积分函数提示:正弦积分,余弦0sin ()xt si x dt t =⎰函数cos ()xt ci x dt t-∞=⎰要求:(1)编写函数,对任意给定的x ,可求出值。

(2)使用尽可能少的正余弦函数的调用,计算更精确的值。

(用多种方法,创新方法)二、问题分析1 、数值积分基本原理:用数值分析求解积分的数值方法有很多,如简单的梯形法、矩形法、辛普森(Simpson )法、牛顿-科斯特(Newton-Cotes )法等都是常用的方法。

它们的基本思想都是将整个积分区间[a ,b]分成n 个子区间[x i ,x i+1],i=1,2,…,n ,其中x 1=a ,x n+1=b 。

这样求定积分问题就分解为求和问题。

2、本题要求用数值积分法计算正弦积分函数和余弦函数积分,那么应该从编写函数的入手,建立function 的m 文件,通过对函数的调用,对任意跟定的x 值,求出积分函数的值。

三、数值积分法求解问题 1、 梯形公式、矩形公式首先,积分中值定理告诉我们,在积分区间[a ,b]内存在一点ξ,成立⎰ba x f )(dx=(b-a )f (ζ),就是说,底为b-a 而高为f (ζ)的矩形面积恰等于所求区边梯形的面积。

如果我们用两端点“高度”f (a )与f (b )的算术平均值作为平均高度f (ξ)的近似值,这样导出的求积公式⎰ba x f )(dx ≈2a-b [f (a )+f (b )]便是我们熟悉的梯形公式。

将积分区间[a,b]n 等分,每个小区间宽度均为h=na -b )(,h 称为积布步长。

记a=x 0<x 1<…<x k …<x o =b ,在小区间上用小矩形面积近似小曲边梯形的面积,若分别取左端点和右端点的函数值为小矩形的高,则分别得到两个曲边梯形面积的近似计算公式。

具体程序如下:clear x=linspace(0,pi); dx=x(2); y=sin(x); s1=sum(y)*dx s2=trapz(y)*dxsc1=cumsum(y)*dx; sc2=cumtrapz(y)*dx;plot(x,-cos(x)+1,x,sc1,'.',x,sc2,'o')hold on0.511.522.533.500.20.40.60.811.21.41.61.82由图可知这种方法精度太低,应选择其他方法。

2、quad 函数、quan1函数正弦:function y=si(t)a=1e-8; %函数在0点无界,去掉0点 y=quad('sin(x)./x',a,t) y=quadl('sin(x)./x',a,t) 余弦:function y=ci(t)a=-1e1; %函数在0点无界,去掉0点 y=quad('cos(x)./x',a,t) y=quadl('cos(x)./x',a,t) 图像:x=1:100; for i=1:100 y2(i)=si(x(i)); endplot(x,y2,'r') title('辛普森')1020304050607080901000.911.11.21.31.41.51.61.71.81.9辛普森x=1:100; for i=1:100y2(i)=ci(x(i)); endplot(x,y2,'b') title('辛普森')0102030405060708090100-400-2000200400600800100012001400辛普森给定任意x 值,均可计算出对应的正弦、余弦函数积分。

但从结果可以看出精度不是很高。

3、复合求积公式由于牛顿-科特斯公式在n ≥8时不具有稳定性,故不可能通过提高阶的方法来提高求积精度。

为了提高精度通常可把积分区间分成若干子区间(通常是等分),再在每个子区间上用低级求积公式。

这种方法为复合求积法。

3.3.1 复合梯形公式将区间[]b a ,划分为n 等分,分点,,,1,0,,n k nab h kh a x k =-=+=在每个子区间[](),1,,1,0,1-=+n k x x k k 上采用梯形公式,则得[])()()(2)()(1111f R x f x f h dx x f dx x f I n k n k k ban k x x k k++===+-=-=∑⎰∑⎰+记()[()]()[()()]∑∑-=+-=++=+=11110222n k b k k n k k n x f x f a f hx f x f h T ,称为复合梯形公式。

复合梯形公式的余项()()()110''3,12+-=∈⎥⎦⎤⎢⎣⎡-=-=∑k k k n k k n n x x f h T I f R ηη由于[],,)(2b a C x f ∈ 且()(),max 1min 1010''''10-≤≤-=-≤≤≤≤∑n k k n k k n k f n f ηη 所以()b a ,∈∃η使 ()()k n k f n f ηη∑-==10''''1于是复合梯形公式的余项为()()η''212f h a b f R n --=事实上只要设()[]b a C x f ,∈,则可得收敛性,只要把n T 改写成为()()]∑∑=-=-+⎢⎣⎡-=nk k n k k n x f n a b x f n a b T 11021 程序如下: 正弦:function T_n=fhtxs(a,b,n)h=(b-a)/n; for k=0:nx(k+1)=a+k*h; if x(k+1)==0x(k+1)=10^(-10); end endT_1=h/2*(SS(x(1))+SS(x(n+1))); for i=2:nF(i)=h*SS(x(i)); endT_2=sum(F); T_n=T_1+T_2; 余弦:function T_n=fhtxc(a,b,n) h=(b-a)/n; for k=0:nx(k+1)=a+k*h; if x(k+1)==0x(k+1)=10^(-10); end endT_1=h/2*(CC(x(1))+CC(x(n+1))); for i=2:nF(i)=h*CC(x(i)); endT_2=sum(F);T_n=T_1+T_2;图像:正弦 余弦010********0.811.21.41.61.82复化梯形20406080100-20246810x 10103.3.2 复合新普斯求积公式将区间],[b a 划分为n 等分,在每个子区间[]1,+k k x x 上采用辛普森公式,若记,2121h x x k k +=+则得 ∑⎰-===1)()(n k badx x f dx x f I).()]()(4)([6121f R x f x f x f h n n k k k k +++=∑-=+ 称为复合辛普森求积公式。

程序如下:正弦function S_n=fhxpss(a,b,n) h=(b-a)/n; for k=0:n x(k+1)=a+k*h;x_k(k+1)=x(k+1)+1/2*h; if (x(k+1)==0)||(x_k(k+1)==0) x(k+1)=10^(-10); x_k(k+1)=10^(-10); end endS_1=h/6*(SS(x(1))+SS(x(n+1))); for i=2:nF_1(i)=h/3*SS(x(i)); end for j=1:nF_2(j)=2*h/3*SS(x_k(j)); endS_2=sum(F_1)+sum(F_2); S_n=S_1+S_2;余弦:function S_n=fhxpsc(a,b,n) h=(b-a)/n;for k=0:nx(k+1)=a+k*h;x_k(k+1)=x(k+1)+1/2*h;if(x(k+1)==0)||(x_k(k+1)==0)x(k+1)=10^(-10);x_k(k+1)=10^(-10);endendS_1=h/6*(CC(x(1))+CC(x(n+1)));for i=2:nF_1(i)=h/3*CC(x(i));endfor j=1:nF_2(j)=2*h/3*CC(x_k(j));endS_2=sum(F_1)+sum(F_2);S_n=S_1+S_2;图像与复合梯形所得图像基本相同,深入分析两只复合函数的优劣,对于积分函数0sin()x tsi x dtt=⎰假设x=1,则将区间[0,1]划分为8等份,应用复合梯形求得T8=0.9456909而如果将[0,1]分为4等份,应用复合辛普森有S4=0.9460832通过参考数值分析(李庆阳)的结论,发现无论是复合梯形公式还是复合辛普森公式,最终结果都会随着h值的减小而更加精确。

对复合梯形公式和复合辛普森公式计算出的结果进行比较,发现复合梯形法的结果T8只有两位有效数字,而复合辛普森的结果却有六位有效数字,所以复合辛普森公式计算出的结果更加的精确。

4、插值型的求积公式clc, clearx0=0:0.5:5;y0=[ Inf 1.7552 0.5403 0.0472 -0.2081 -0.3205 -0.3300 -0.2676 -0.1634 -0.0468 0.0567];%所求积分函数的数值pp=csape(x0,y0) ; %默认的边界条件,Lagrange边界条件format long gchazhi=pp.coefs %显示每个区间上三次多项式的系数s=quadl(@(t)ppval(pp,t),0,5) %求积分format %恢复短小数的显示格式x=0:0.1:5;y=cos(x)/x;y1=spline(x0,y0,x);z=0*x;hold onplot(x,z,x,y,'k--',x,y1,'r')plot(x0,y0,'*')hold offclearx0=0:0.5:5;y0=[ Inf 1.7552 0.5403 0.0472 -0.2081 -0.3205 -0.3300 -0.2676 -0.1634 -0.0468 0.0567]; %所求积分函数的数值pp=csape(x0,y0) ; %默认的边界条件,Lagrange边界条件format long gchazhi=pp.coefs %显示每个区间上三次多项式的系数s=quadl(@(t)ppval(pp,t),0,5) %求积分format %恢复短小数的显示格式x=0:0.1:5;y=cos(x)/x;y1=spline(x0,y0,x);z=0*x;hold onplot(x,z,x,y,'k--',x,y1,'r')plot(x0,y0,'*')hold off如图所示:5、高斯求积公式function [ql,Ak,xk]=gsqj(fun,a,b,n,tol)if nargin==1a=-1;b=1;n=7;tol=1e-8;elseif nargin==3n=7;tol=1e-8;elseif nargin==4tol=1e-8;elseif nargin==2||nargin>5error('The Number of Input Arguments Is Wrong!'); end% 计算求积节点syms xp=sym2poly(diff((x^2-1)^(n+1),n+1))/(2^n*factorial(n)); tk=roots(p); % 求积节点% 计算求积系数Ak=zeros(n+1,1);for i=1:n+1xkt=tk;xkt(i)=[];pn=poly(xkt);fp=@(x)polyval(pn,x)/polyval(pn,tk(i)); Ak(i)=quadl(fp,-1,1,tol); % 求积系数end% 积分变量代换,将[a,b]变换到[-1,1]xk=(b-a)/2*tk+(b+a)/2;% 检验积分函数fun有效性fun=fcnchk(fun,'vectorize');% 计算变量代换之后积分函数的值SS=fun(xk)*(b-a)/2;% 计算积分值ql=sum(Ak.*SS);计划表7月3号熟悉问题,准备工作,借阅相应的资料,搞清楚题目的用意题目要求多种方法计算,并尽量减少函数的调用。