资源描述:
《2013第四章matlab攻略》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第4章数值计算与符号计算相比,数值计算在科研和工程屮的应用更为广泛。MATLAB也正是凭借其卓越的数值计算能力而称雄世界。随着科研领域、工程实践的数字化进程的深入,具有数字化本质的数值计算就显得愈益重要。较Z十年、二十年前,在计算机软硬件的支持下当今人们所能拥有的计算能力已经得到了巨大的提升。这就自然地激发了人们从新的计算能力出发去学习、理解概念的欲望,鼓舞了人们用新计算能力试探解决实际问题的雄心。鉴于当今髙校木科教学偏重符号计算和便于手算简单示例的实际,也出于帮助读者克服对数值计算生疏感的考虑,本章在内容安排上仍从“微积分”开始。这一方面与第2章符号
2、计算相呼应,另方面通过“微积分”说明数值计算离散本质的微观和宏观影响。为便于读者学习,本章内容的展开脉络基本上沿循高校数学教程,而内容深度力求控制在高校本科水平。考虑到知识的跳跃和交叉,本书对重要概念、算式、指令进行了尽可能完整地说明。4.1数值微积分4.1.1近似数值极限及导数I—cos2xsinx【例4.M]设5",f^x)=^l±9试用机器零阈值eps替代理论0计算极xsinx〜x限厶(0)=limfAx),厶2(0)=limf2(x)。xtOjvtOx=eps;Ll=(1-cos(2*x))/(x*sin(x)),L2=sin(x)/x,LI=
3、0L2=1symstfl=(1-cos(2*t))/(t*sin(t));f2=sin(t)/t;Lsl=limit(fl,t,0)Ls2=limit(f2,t,0)Lsl=2Ls2=1【例4.1-2]已知x=sin(Z),求该函数在区间[0,2龙]中的近似导函数。d=pi/100;t=0:d:2*pi;x=sin(t);dt=5*eps;x_eps=sin(t+dt);dxdt_eps=(x_eps-x)/dt;plot(tzxz1LineWidth1,5)holdonplot(t,dxdt_eps)holdofflegend(*x(t)*,1dx/
4、dt*)xlabel(P)图4.M坍量过小引起冇效数字严重丢失后的毛刺Illi线x_d=sin(t+d);dxdt_d=(x_d-x)/d;plot(t,x,*LineWidth*z5)holdonplot(t,dxdt_d)holdofflegend(*x(t)*,1dx/dt*)xlabel(111)01234567图4.1-2增量适当所得导帧数比较光滑【例4.1・3】已知x=sin(r),釆用diff和gradient计算该函数在区间[0,2龙]中的近似导函数…elfd=pi/100;t=0:d:2*pi;x=sin(t);dxdt_diff=d
5、iff(x)/d;dxdt_grad=gradient(x)/d;subplot(1,2,1)plot(t,x,1b1)holdonplo七(七,dxdt_gradz'm','LineWidth*,8)plot(t(1:end-1).dxdt_diffz1.k1z1MarkerSize1z8)axis([0,2*pi,-l.l,l.l])title(*[Oz2pi]»)legend(1x(t)1z1dxdt_{grad)1z!dxdt_{diff}1z1Location1z1North1)xlabel(111)zboxoffholdoffsubplo
6、t(1,2,2)kk=(length(t)-10):length(t);holdonplot(t(kk),dxdt_grad(kk),!omf,1MarkerSize1,8)plot(t(kk-1),dxdt_diff(kk-1),1•k1,1MarkerSize1,8)title(1[end-10,end]*)legend(!dxdt_{grad}1,1dxdt_{diff}1,TLocation1,1SouthEast1)xlabel(1t1),boxoffholdoff图4.1-3diff和gradient求数值近似导数的异同比较4.1.2数值求
7、和与近似数值积分【例4.1・4】求积分s(x)=
8、y(t)dt,其中y=0.2+sin(r)。Jocleard=pi/8;t=0:d:pi/2;y=0•2+sin(t);s=sum(y);s_sa=d*s;s_ta=d*trapz(y);disp([1sum求得积分',blanks(3)z'trapz求得积分'])disp([s_sa,s_ta])t2=[t,t(end)+d];y2=[y,nan];stairs(t2,y2,1:k1)holdonplot(t,y,1r1,1LineWidth1,3)h=s1LineWidth1,2);set(h(1)
9、,1MarkerSize1,10)axis([0,pi/2+d,0z1.5])holdoffs