第4MATLAB的数值计算.ppt
《第4MATLAB的数值计算.ppt》由会员分享,可在线阅读,更多相关《第4MATLAB的数值计算.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4MATLAB的数值计算 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望4.1数值微积分数值微积分4.1.1 近似数值极限及导数近似数值极限及导数4.1.2 数值求和与近似数值积分数值求和与近似数值积分4.1.3 计算精度可控的数值积分计算精度可控的数值积分4.1.4 函数极值的数值求解函数极值的数值求解4.1.5 常微分方程的数值解常微分方程的数值解12/6/2022第2页u在在MATLAB数值计算中,既没有专门的求极限指令,数值计算中,既没有专门的求极限指令
2、,也没有专门的求导指令。但也没有专门的求导指令。但MATLAB提供了与提供了与“求导求导”概念有关的概念有关的“求差分求差分”指令。指令。udx=diff(X)%计算向量计算向量X的前向差分的前向差分uFX=gradient(F)%求一元求一元(函数函数)梯度梯度uFX,FY=gradient(F)%求二元(函数)梯度求二元(函数)梯度u对对diff而言,当而言,当X是向量时,是向量时,dx=X(2:n)-X(1:n-1);当当X是矩阵时,是矩阵时,dx=X(2:n,:)-X(1:n-1,:)。dx的长度比的长度比x的长度少的长度少1个元素个元素。4.1.1 近似数值极限及导数近似数值极限及导
3、数12/6/2022第3页udx=diff(X)%计算向量计算向量X的前向差分的前向差分uFX=gradient(F)%求一元求一元(函数函数)梯度梯度uFX,FY=gradient(F)%求二元(函数)梯度求二元(函数)梯度u对对gradient而言,当而言,当F是向量时,是向量时,FX(1)=F(2)-F(1),FX(2:end-1)=(F(3:end)-F(1:end-2)/2,FX(end)=F(end)-F(end-1);FX长度与长度与F的长度相同的长度相同u当当F是矩阵时,是矩阵时,FX,FY是与是与F同样大小的矩阵。同样大小的矩阵。FX的的每行对应每行对应F相应行元素间的梯度相
4、应行元素间的梯度;FY的每列对应的每列对应F相应相应列元素间的梯度列元素间的梯度;4.1.1 近似数值极限及导数近似数值极限及导数12/6/2022第4页数值极限和导数的应用应十分谨慎数值极限和导数的应用应十分谨慎x=eps;L1=(1-cos(2*x)/(x*sin(x),L2=sin(x)/x,L1=0L2=1syms tf1=(1-cos(2*t)/(t*sin(t);f2=sin(t)/t;Ls1=limit(f1,t,0)Ls2=limit(f2,t,0)Ls1=2Ls2=1 x=pi/1000;%可得到正确结果可得到正确结果12/6/2022第5页数值极限和导数的应用应十分谨慎数值
5、极限和导数的应用应十分谨慎%(1)自变量的增量取得过小()自变量的增量取得过小(eps数量级)数量级)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(t,x,LineWidth,5)hold onplot(t,dxdt_eps)hold offlegend(x(t),dx/dt)xlabel(t)【例【例4.1-2】已知】已知,求求该该函数在区函数在区间间 中的近似中的近似导导函数。函数。数数值导值导数受数受计计算中有限精度困算中有限精度困扰扰,当增量,当增量dt过过小小时时,f(
6、t+dt)与与f(t)的数的数值值十分接近,高位有效数字完全相十分接近,高位有效数字完全相同,同,df=f(t+dt)-f(t)造成高位有效数字消失,精度造成高位有效数字消失,精度急急剧变剧变差。差。12/6/2022第6页数值极限和导数的应用应十分谨慎数值极限和导数的应用应十分谨慎%(2)自变量的增量取得适当)自变量的增量取得适当x_d=sin(t+d);dxdt_d=(x_d-x)/d;plot(t,x,LineWidth,5)hold onplot(t,dxdt_d)hold offlegend(x(t),dx/dt)xlabel(t)【例【例4.1-2】已知】已知,求求该该函数在区函数
7、在区间间 中的近似中的近似导导函数。函数。d=pi/100;12/6/2022第7页d=pi/100;t=0:d:2*pi;x=sin(t);dxdt_diff=diff(x)/d;dxdt_grad=gradient(x)/d;【例【例4.1-3】已知】已知 采用采用diff和和gradient计算该计算该函数在区间函数在区间 中的近似导函数。中的近似导函数。subplot(1,2,1);plot(t,x,b);hold onplot(t,dxdt_grad,m,LineWidth,8)plot(t(1:end-1),dxdt_diff,.k,MarkerSize,8)axis(0,2*pi
8、,-1.1,1.1);title(0,2pi)legend(x(t),dxdt_grad,dxdt_diff,Location,North)xlabel(t),box off;hold offsubplot(1,2,2)kk=(length(t)-10):length(t);hold on;plot(t(kk),dxdt_grad(kk),om,MarkerSize,8)plot(t(kk-1),dxdt_diff(kk-1),.k,MarkerSize,8)title(end-10,end)legend(dxdt_grad,dxdt_diff,Location,SouthEast)xlabe
9、l(t),box off;hold off 宏观上宏观上,diff和和gradient结果大致相同结果大致相同细节上细节上,diff和和gradient数值有差异,数值有差异,diff没有给出最后一点导数没有给出最后一点导数12/6/2022第8页Sx=sum(X)%sum按列向求和得按列向求和得(1n)数组数组Scs=cumsum(X)%沿沿X列向求列向求累计和累计和,仍是数组仍是数组,第第(i,k)个元素是个元素是X数组第数组第k列前列前i个元素的和。最后一行等于个元素的和。最后一行等于Sx4.1.2 数值求和与近似数值积分数值求和与近似数值积分St=trapz(t,X)或或 St=dt*
10、trapz(X)%梯形法求積分梯形法求積分Sct=cumtrapz(t,X)或或 Sct=dt*cumtrapz(X)%梯形法沿列向求梯形法沿列向求X关于关于x的的累计积分累计积分,最后一个值等于最后一个值等于StS=dt*sum(X),S=sum(t,X)%近似矩形法求积分近似矩形法求积分Scs=cumsum(t,X)=dt*cumsum(X)12/6/2022第9页clear;d=pi/8;t=0:d:pi/2;y=0.2+sin(t);s=sum(y);s_sa=d*s;%s_sa=sum(t,y),近似矩形法积分近似矩形法积分s_ta=trapz(t,y);%梯形法积分梯形法积分【例【
11、例4.1-4】求积分】求积分,其中其中disp(sum求得积分求得积分,blanks(3),trapz求得积分求得积分)disp(s_sa,s_ta)t2=t,t(end)+d;y2=y,nan;stairs(t2,y2,:k);hold onplot(t,y,r,LineWidth,3)h=stem(t,y,LineWidth,2);set(h(1),MarkerSize,10)axis(0,pi/2+d,0,1.5)hold off;shg sum求得积分求得积分 trapz求得积分求得积分 1.5762 1.301312/6/2022第10页4.1.3 计算精度可控的数值积分计算精度可控
12、的数值积分一重积分一重积分(quadrature精度可控精度可控):S1=quad(fun,a,b,tol)%自适应自适应Simpson法法S2=quadl(fun,a,b,tol)%自适应罗巴托自适应罗巴托 Lobatlo法法二重积分二重积分(精度可控精度可控):S3=dblquad(fun,xmin,xmax,ymin,ymax,tol)三重积分三重积分(精度可控精度可控):S4=triplequad(fun,xmin,xmax,ymin,ymax,zmix,zmax,tol)fun:可为字符串可为字符串,内联对象内联对象,匿名函数匿名函数,函数句柄函数句柄,注意乘注意乘除法运算一定加点除
13、法运算一定加点.用数组运算用数组运算 tol:默认积分的绝对精度为默认积分的绝对精度为10-612/6/2022第11页(1)syms xIsym=vpa(int(exp(-x2),x,0,1)%x.2数组乘方亦可数组乘方亦可Isym=0.74682413281242702539946743613185 例例4.1-5:求:求 .%(2)梯形法积分梯形法积分format longd=0.001;x=0:d:1;Itrapz=d*trapz(exp(-x.*x)%x.*x必须为数组乘必须为数组乘Itrapz=0.746824071499185 (3)fx=exp(-x.2);%一定用数组乘一定用
14、数组乘Ic=quad(fx,0,1,1e-8)Ic=0.746824132854452%实际精度控制到实际精度控制到1e-1012/6/2022第12页(1)符号计算法)符号计算法syms x ys=vpa(int(int(xy,x,0,1),y,1,2)Warning:Explicit integral could not be found.s=0.40546510810816438197801311546435 例例4.1-6:求:求 .(2)数值积分法)数值积分法format longs_n=dblquad(x,y)x.y,0,1,1,2)%匿名函数表示被积函数匿名函数表示被积函数s_n
15、=0.405466267243508 s_n=dblquad(x.y,0,1,1,2)%字符串表示被积函数字符串表示被积函数s_n=dblquad(inline(x.y),0,1,1,2)%内联函数表示被积函数内联函数表示被积函数%一定为数组乘一定为数组乘12/6/2022第13页4.1.4 函数极函数极值值的数的数值值求解求解 x,fval,exitflag,output=fminbnd(fun,x1,x2,options)%一元函数一元函数在区间在区间bound(x1,x2)中极小值中极小值 x,fval:极值点坐标和对应目标函数极值极值点坐标和对应目标函数极值x,fval,exitfla
16、g,output=fminsearch(fun,x0,options)%单纯形法求搜索起点单纯形法求搜索起点x0附近附近多元函数多元函数极值点极值点%x每列代表一个候选极值点,各列按每列代表一个候选极值点,各列按目标函数极小值递增顺序目标函数极小值递增顺序%x(:,1)对应的目标函数极小值点由对应的目标函数极小值点由fval给出给出 fun:字符串字符串,内联函数内联函数,匿名函数匿名函数,函数句柄函数句柄,注意乘除法注意乘除法运算一定加点运算一定加点.用数组运算用数组运算 options:配置优化参数配置优化参数,可略可略 exitflag:给出大于给出大于0的数的数,则成功搜索到极值点则成
17、功搜索到极值点 output:给出具体的优化算法和迭代次数给出具体的优化算法和迭代次数12/6/2022第14页【例【例4.1-7】已知】已知 ,在在-10 x1010区区间间,求函数的最小求函数的最小值值。(1)用)用“导数为零法导数为零法”求极值点求极值点syms xy=sin(x)2*exp(-0.1*x)-0.5*sin(x)*(x+0.1);yd=diff(y,x);%求导函数求导函数xs0=solve(yd,x)%求导函数为零的根,即极值点求导函数为零的根,即极值点yd_xs0=vpa(subs(yd,x,xs0)%验证极值点处导函数为零验证极值点处导函数为零y_xs0=vpa(s
18、ubs(y,x,xs0)%求极值点处极值求极值点处极值xs0=matrix(0.050838341410271656880659496266968)yd_xs0=2.2958874039497802890014385492622*10(-41)y_xs0=-0.001263317776974196724544154344118 无法判断是否最小值无法判断是否最小值12/6/2022第15页【例【例4.1-7】已知】已知 ,在在-10 x1010区区间间,求函数的最小求函数的最小值值。(2)采用优化算法求极小值)采用优化算法求极小值x1=-10;x2=10;yx=(x)(sin(x)2*exp(
19、-0.1*x)-0.5*sin(x)*(x+0.1);xn0,fval,exitflag,output=fminbnd(yx,x1,x2)xn0=2.514797840754235fval=%比比“导数为零法导数为零法”求得的极值更小求得的极值更小,更可能是最小值更可能是最小值 -0.499312445280039exitflag=1output=iterations:13 funcCount:14 algorithm:golden section search,parabolic interpolation message:1x112 char 12/6/2022第16页【例【例4.1-7】
20、已知】已知 ,在在-10 x1010区区间间,求函数的最小求函数的最小值值。(4)据图形观察,重设)据图形观察,重设fminbnd的搜索区间的搜索区间x11=6;x2=10;yx=(x)(sin(x)2*exp(-0.1*x)-0.5*sin(x)*(x+0.1);xn00,fval,exitflag,output=fminbnd(yx,x11,x2)xn00=8.023562824723015fval=-3.568014059128578%最小值最小值exitflag=1output=iterations:9 funcCount:10 algorithm:golden section sea
21、rch,parabolic interpolation message:1x112 char y=sin(x)2*exp(-0.1*x)-0.5*sin(x)*(x+0.1);(3)绘图观察最小值)绘图观察最小值xx=-10:pi/200:10;yxx=subs(y,x,xx);plot(xx,yxx)xlabel(x),grid on 12/6/2022第17页例4.1-8:f(x,y)=100(y-x2)2+(1-x)2在区间-5,5的极小值ff=(x)100*(x(2)-x(1).2).2+(1-x(1).2;%匿名函数 x0=-5,-2,2,5;-5,-2,2,5;%4个搜索起点 sx
22、,sfval,sexit,soutput=fminsearch(ff,x0)其理论极小值点为其理论极小值点为x=1,y=1%sx给出一组使优化函数值非减的局部极小点给出一组使优化函数值非减的局部极小点 sx=0.99998 -0.68971 0.41507 8.0886 0.99997 -1.9168 4.9643 7.8004sfval=2.4112e-0102.4112e-010 5.7525e+002 2.2967e+003 3.3211e+005 format short e%取5位科学计数法 disp(ff(sx(:,1),ff(sx(:,2),ff(sx(:,3),ff(sx(:,
23、4)用用x的的二元向量二元向量表示表示x,yx0=-5 -2 2 5 -5 -2 2 512/6/2022第18页4.1.5 常微分方程常微分方程Ordinary Differential Equation的数的数值值解解t,Y=ode45(odefun,tspan,y0)%4阶阶龙格库塔龙格库塔 数值数值法法odefun:待求解待求解一阶一阶微分方程组的函数文件句柄微分方程组的函数文件句柄tspan:自变量微分二元区间自变量微分二元区间t0,tfy0:一阶微分方程组的一阶微分方程组的(n*1)初值初值列向量列向量matlab为解常微分方程初值问题提供了一组配套齐全为解常微分方程初值问题提供了
24、一组配套齐全,结构严结构严整的指令整的指令,包括包括:ode45,ode23,ode113,ode23t,ode15s,ode23s,ode23tb.在此只介绍最常用的在此只介绍最常用的ode45的基本使用方法的基本使用方法.ode45使用方法使用方法:t-二元区间二元区间的点系列的点系列Y-原函数在微分区间点系列上的函数值原函数在微分区间点系列上的函数值12/6/2022第19页例例4.1-9求解:求解:%解算微分方程解算微分方程tspan=0,30;y0=1;0;tt,yy=ode45(DyDt,tspan,y0);figure(1)plot(tt,yy(:,1)xlabel(t),tit
25、le(x(t)解解:令令,上式写成,上式写成一阶一阶微分方程组形式微分方程组形式%画相平面图画相平面图(函数和其导数函数和其导数勾画的曲线称为勾画的曲线称为相轨迹相轨迹)figure(2)plot(yy(:,1),yy(:,2)xlabel(位移位移),ylabel(速速度度)function ydot=DyDt(t,y)mu=2;ydot=y(2);mu*(1-y(1)2)*y(2)-y(1);据以上方程组,编写据以上方程组,编写M函数文件函数文件DyDt.m12/6/2022第20页4.2矩阵和代数方程矩阵和代数方程4.2.1 矩阵运算和特征参数矩阵运算和特征参数4.2.2 矩阵的变换和特
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 数值 计算
限制150内