matlab级数逼近计算,实验七 matlab求解级数有关计算.doc

41528d3028836879cd698677c3999917.gif实验七 matlab求解级数有关计算.doc

1实验七matlab求解级数有关计算1.级数的基本概念常数项级数:称用加号将数列na的项连成的式子na321为(常数项)无穷级数,简记为1na。称级数1n前项构成的和nknaS1321为级数的部分和。若nlim,则称级数1n收敛,其和为S。Taylor级数:设函数)(xf在包含a的区域内具有各阶导数,则称幂级数nnnnaxfaxffaxaf)(!)(!2) )(!)(2)(0)(为函数f在的Taylor级数,当0a时称为Maclaurin(麦克劳林)级数。2.级数的MATLAB命令MATLAB中主要用symsum,taylor求级数的和及进行Taylor展开。symsum(s,v,a,b)表达式s关于变量v从a到b求和taylor(f,a,n)将函数f在a点展为n-1阶Taylor多项式可以用helpsymsum,helptaylor查阅有关这些命令的详细信息例1先用taylor命令观测函数xysin的Maclaurin展开式的前几项,例如观测前6项,相应的MATLAB代码为:>>clear;symsx;>>taylor(sin(x),0,1)>>taylor(sin(x),0,2)>>taylor(sin(x),0,3)>>taylor(sin(x),0,4)>>taylor(sin(x),0,5)>>taylor(sin(x),0,6)结果为:ans=0ans=xans=xans=x-1/6*x^3ans=x-1/6*x^32ans=x-1/6*x^3+1/120*x^5然后在同一坐标系里作出函数xysin和它的Taylor展开式的前几项构成的多项式函数,!53,!,3xyxy的图形,观测这些多项式函数的图形向sin的图形的逼近的情况。例如,在区间],0[上作函数xysin与多项式函数!53,!,3xyxy图形的MATLAB代码为:>>x=0:0.01:pi;y1=sin(x);y2=x;y3=x-x.^3/6;y4=x-x.^3/6+x.^5/120;>>plot(x,y1,x,y2,’:’,x,y3,’:’,x,y4,’:’)结果如图3.1,其中实线表示函数xysin的图形。0123400.511.5图3.1xysin的泰勒级数类似地,根据函数的Taylor级数).1,(,!2)1(1)(],,43ln),(,!21,,64cos32xxxxex作图观测其展开式的前几项多项式逼近原函数的情况。例2利用幂级数计算指数函数。指数函数可展开为幂级数),(,!!321xnxex3其通项为x^n/prod(1:n),因此用下列循环相加就可计算出这个级数>>x=( x= );n=( n= );y=1;%输入原始数据,初始化y>>fori=1:ny=y+x^i/prod(1:i);end,vpa(y,10),%将通项循环相加,得y执行此程序,分别带入x=1,2,4,-4这四个数,取n=10,y的结果如下2.718281801,7.388994709,54.44310406,.9671957672e-1而用vpa(exp(1),10),vpa(exp(2),10),vpa(exp(4),10),vpa(exp(-4),10)命令可得42,e的10位精确有效数字为2.718281828,7.389056099,54.59815003,.1831563889e-1对照可知,用级数法计算的有效数字分别为8,4,2,0位。由此可以看出,这个程序虽然原理上正确,但不好用。对不同的x,精度差别很大。其他存在的问题有:这个程序不能用于x的元素群运算;当x为负数时,它成为交错级数,收敛很慢;此程序要做2n次乘法,n很大时,乘法次数太多,计算速度很低;对不同的x,要取不同的n才能达到精度要求,因此n不应由用户输入,应该由软件按精度要求来选。正对上面的四个问题,可以采用下面四种方法改进:(1)允许数组输入,改进输出显示x=( x= );n=( n= );y=ones(size(x));%输入原始数据,初始化yfori=1:ny=y+x.^i/prod(1:i);%循环相加s1=sprintf( %13.0f ,i);s2=sprintf( %15.8f ,y);%将结果变为字符串disp([s1,s2])%显示end,执行此程序,输入x=[124-4],n=10,结果为12.000000003.000000005.00000000-3.0000000022.500000005.0000000013.000000005.0000000032.666666676.3333333323.66666667-5.6666666742.708333337.0000000034.333333335.0000000052.716666677.2666666742.86666667-3.5333333362.718055567.3555555648.555555562.1555555672.718253977.3809523851.80634921-1.0952381082.718278777.3873015953.431746030.5301587392.718281537.3887125254.15414462-0.19223986102.718281807.3889947154.443104060.09671958(2)可以利用exp(-x)=1/exp(x)来避免交错级数的计算;(3)为了减少乘法次数,设一个中间变量z,它的初始值为z=ones(size(x)),把循环体中的计算与句改为y=y+z;z=x.*z/i;这样,求得的z就是z=x.^i/i!,于是每个循环只需做一次乘法,计算整个级数只需n次乘法。按这种计算,y的初始值改为y=zeros(size(x))(4)为了按精度选择循环次数,不该使用for循环,而用while语句,它可以设置循环的条4件语句,通常可用y+z-y>tol,tol是规定的允许误差.只要相邻的两次y值之差大于tol,循环就继续进行,直到小于tol为止.当x较大时,exp(x)仍能很快收敛,还可以利用关系式kx)(ep)x,令x1=x/k.k通常取大于x而最接近x的2的幂,例如x=100,就取k=128,可以保证x1的绝对值小于1,这时级数收敛得很快从练习中可以看出,n取10时(即级数取10项)就能保证7位有效数,而128)ep(可以化成2)1(ep,即exp(x1)的7次自乘,总共用17次乘法就可完成8/0 x0 x的计算,这既保证了精度,又提高了速度.例3编写任意函数展开为各阶泰勒级数的程序,并显示其误差曲线.对于任意函数y=f(x),其泰勒展开式为).()(!)(!2)( )()(2)(xRaxnfaxfaxfaxfn其中)(Rn为余项,也就是泰勒展开式的误差.MATLAB语句为>>fxs=( 输入y=f(x)的表达式 , s );%输入原始条件,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值