1 第 4 章 数值计算 与符号计算相比,数值计算在科研和工程中的应用更为广泛。MATLAB 也正是凭借其卓越的数值计算能力而称雄世界。随着科研领域、工程实践的数字化进程的深入,具有数字化本质的数值计算就显得愈益重要。 较之十年、二十年前,在计算机软硬件的支持下当今人们所能拥有的计算能力已经得到了巨大的提升。这就自然地激发了人们从新的计算能力出发去学习、理解概念的欲望,鼓舞了人们用新计算能力试探解决实际问题的雄心。 鉴于当今高校本科教学偏重符号计算和便于手算简单示例的实际,也出于帮助读者克服对数值计算生疏感的考虑,本章在内容安排上仍从“微积分”开始。这一方面与第2 章符号计算相呼应,另方面通过“微积分”说明数值计算离散本质的微观和宏观影响。 为便于读者学习,本章内容的展开脉络基本上沿循高校数学教程,而内容深度力求控制在高校本科水平。考虑到知识的跳跃和交叉,本书对重要概念、算式、指令进行了尽可能完整地说明。 4 .1 数值微积分 4 .1 .1 近似数值极限及导数 【例4.1-1】设xxxxfsin2cos1)(1,xxxfsin)(2,试用机器零阈值eps替代理论0 计算极限)(lim)0(101xfLx ,)(lim)0(202xfLx 。 x=eps; L1=(1-cos(2*x))/(x*sin(x)), L2=sin(x)/x, L1 = 0 L2 = 1 syms t f1=(1-cos(2*t))/(t*sin(t)); f2=sin(t)/t; Ls1=limit(f1,t,0) Ls2=limit(f2,t,0) Ls1 = 2 Ls2 = 1 【例4.1-2】已知)sin(tx ,求该函数在区间 ]2 ,0[ 中的近似导函数。 d=pi/100; t=0:d:2*pi; x=sin(t); dt=5*eps; x_eps=sin(t+dt); 2 dxdt_eps=(x_eps-x)/dt; plot(t,x,'LineWidth',5) hold on plot(t,dxdt_eps) hold off legend('x(t)','dx/dt') xlabel('t') 图 4.1-1 增量过小引起有效数字严重丢失后的毛刺曲线 x_d=sin(t+d); dxdt_d=(x_d-x)/d; plot(t,x,'LineWidth',5) hold on plot(t,dxdt_d) hold off legend('x(t)','dx/dt') xlabel('t') 图 4.1-2 增量适当所得导函数比较光滑 【例4.1-3】已知)sin(tx ,采用diff 和gradient计算该函数在区间 ]2 ,0[ 中的近似导函数。。 clf d=pi/100; t=0:d:2*pi; x=sin(t); dxdt_diff=diff(x)/d; dxdt_grad=gradient(x)/d; subplot(1,2,1) 3 plot(t,x,'b') hold on plot(t,dxdt_grad,'m','LineWidth',8) plot(t(1:end-1),dxdt_diff,'.k','MarkerSize',8) axis([0,2*pi,-1.1,...