第二章MATLAB在数值分析中的应用董素君新主楼C-503dsj@buaa.edu.cn思考题进行下列计算,给出不使用for和while等循环语句的计算方法;1.2.求出y=x*sin(x)在0x100的每个峰值,并绘制曲线6302iiksum(2.^[0:63])ans=1.8447e+019x=0.01*pi:0.01*pi:32*pi;y=x.*sin(x);plot(x,y)holdongridmaxsort主要内容1.1MATLAB环境1.2基本程序元素1.3数据类型及常用函数1.4矩阵1.5字符串数组1.6程序设计1.7图形可视化1.8MATLAB在数值分析中的应用1.9图形用户界面GUI开发1.8MATLAB在数值分析中的应用多项式使用降幂系数的行向量表示,如多项式表示为:p=[1-12025116]roots:求多项式等于0的根,根用列向量表示poly:已知多项式的根,构建相应多项式polyval(p,n):求多项式函数值polyder(p):求多项式的微分多项式11625012234xxxx》p=[1-12025116]》r=roots(p)r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i》p=poly(r)p=1-12-025116》a=[123];》polyval(a,2)ans=11》polyder(a)ans=221.8MATLAB在数值分析中的应用多项式使用降幂系数的行向量表示,如多项式表示为:p=[1-12025116]roots:求多项式等于0的根,根用列向量表示poly:已知多项式的根,构建相应多项式polyval(p,n):求多项式函数值polyder(p):求多项式的微分多项式11625012234xxxx》p=[1-12025116]》r=roots(p)r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i》p=poly(r)p=1-12-025116polyval(p,5)ans=-634pp=polyder(p)pp=4-360251.8MATLAB在数值分析中的应用多项式使用降幂系数的行向量表示,如多项式表示为:p=[1-12025116]roots:求多项式等于0的根,根用列向量表示poly:已知多项式的根,构建相应多项式polyval(p,n):求多项式函数值polyder(p):求多项式的微分多项式11625012234xxxx求极值:p=[1,-12,0,25,116];x=[0:1:10];y=polyval(p,x);plot(x,y)holdongridpp=polyder(p)xx=roots(pp)yy=polyval(p,xx)plot(xx,yy,'ro')1.8MATLAB在数值分析中的应用多项式多项式的运算[例14]:相乘conv》a=[123];》b=[12];》c=conv(a,b)c=1476conv指令可以嵌套使用,如:》conv(conv(a,b),c)ans=183068978436例15]:相除deconv》[q,r]=deconv(c,b)q=123r=0000q为商多项式,r为余多项式1.8MATLAB在数值分析中的应用插值一维插值interp1()yi=interp1(x,y,xi)yi=interp1(x,y,xi,’method’)yi=interp1(x,y,xi,’method’,’extrap’)‘method’用于指定插值算法,其值可以是:‘nearest’——最近插值(执行速度最快,输出结果为直角转折)‘linear’——线性插值(默认值,在样本点上斜率变化很大)‘spline’——分段三次样条插值(最花时间,输出结果最平滑)‘cubic’,‘pchip’——分段三次Hermite插值(最占内存,输出结果与spline差不多)二维插值zi=interp2(x,y,z,xi,yi,’method’)三维插值vi=interp3(x,y,z,v,xi,yi,zi,’method’)三次样条插值pp=spline(x,y),返回三次样条插值的分段多项式形式的向量,以进行插值计算:yi=ppval(pp,xi)例exp2_16.m1.8MATLAB在数值分析中的应用例2:多项式插值》ys=[00.90.6100.1-0.3-0.7-0.9-0.2];%已有的样本点ys》xs=0:length(ys)-1;%已有的样本点xs》x=0:0.1:length(ys)-1;%新的样本点x》y1=interp1(xs,ys,x,'nearest');%插值产生新的样本点y1》y2=interp1(xs,ys,x,'linear');%插值产生新的样本点y2》y3=interp1(xs,ys,x,'spline');%插值产生新的样本点y3》y4=interp1(xs,ys,x,'cubic');%插值产生新的样本点y4》plot(xs,ys,'+k',x,y1,':r',x,y2,'-m',x,y3,'--c',x,y4,'--b')%分别绘制不同方法产生的曲线》legend('sampledpoint','nearest','linear','spline','cubic')exm19.m1.8MATLAB在数值分析中的应用1.8MATLAB在数值分析中的应用拟合最小二乘法多项式拟合函数p=ployfit(x,y,n)或[p,s]=ployfit(x,y,n)(x,y)为已知数据,n为多项式阶数;输出参数p为拟合生成的多项式的系数向量(长度为n+1),s为结构参数通过调用y=polyval(p,x)可以获得x处估计相应的多项式函数值y样条拟合函数helpsplines可快速查看函数列表使用这些函数拟合得到曲线函数sp以后,可利用fnval()计算任意自变量下的函数值1.8MATLAB在数值分析中的应用[例18]:多项式的拟合》clc》clear》x=0:0.1:2*pi;%生成样本点x》y=sin(x)+0.5*rand(size(x));%生成样本点y,通过随机矩阵》p=polyfit(x,y,3)%拟合出多项式(3阶)》y1=polyval(p,x);%求多项式的值》plot(x,y,'+',x,y1,'-r')%绘制多项式曲线,以验证结果程序运行结果如图3-1所示:图3-1多项式拟合示例程序运行结果图1.8MATLAB在数值分析中的应用微/积分已知函数y=f(x),在区间[a,b]内y对x的积分为梯形法数值积分:z=trapz(y):单位步长计算y的积分,否则需乘以步长自适应simpson法数值积分:quad()q=quad(@fun,a,b)q=quad(@fun,a,b,tol)q=quad(@fun,a,b,tol,trace,p1,p2,…)输入:fun为被积函数,表达式必须使用点运算符(.*、./和.^)以支持向量;a,b即积分上下限;tol绝对误差限(默认1.e-6);p1,p2…直接传递给函数fun的已知参数输出:q积分结果自适应Lobatto法数值积分:quadl()使用方法同上y=exp(-0.5*t).*sin(t+pi/6)1.8MATLAB在数值分析中的应用[例42]对进行数值积分。用梯形求积函数trapz()、自适应Simpson求积(低阶)函数quad()和自适应Lobatto求积(高阶)函数quad了()进行计算。注:被积函数func()的表达式必须是向量形式:y=exp(-0.5*t).*sin(t+pi/6),式中t和y为向量,所以用到点乘符号“.*”。functionxIntegrationclearallclc%theinterval:[a,b],thestep:da=0;%积分下限b=3*pi;%积分上限d=pi/1000;%积分步长t=a:d:b;y=func(t);formatlong%梯形数值积分y_trapz=trapz(y)*d%自适应Simpson法y_quad=quad(@func,a,b)y_quadl=quadl(@func,a,b)disp('Results:')disp('TrapzQquadQuadl')disp([y_trapz,y_quad,y_quadl])functiony=func(t)y=exp(-0.5*t).*sin(t+pi/6);1.8MATLAB在数值分析中的应用梯形法数值积分:z=trapz(y)自适应simpson法数值积分:quad()q=quad(@fun,a,b)q=quad(@fun,a,b,tol)q=quad(@fun,a,b,tol,trace,p1,p2,…)y=exp(-0.5*t).*sin(t+pi/6)a=0;%积分下限b=3*pi;%积分上限d=pi/1000;%积分步长1.9句柄图形系统句柄图形对象层次结构创建:Root,figure,axed,uicontrol,uimenu,uicontextmenu,uitoolbar,uibuttongroup,uipanelimage,light,line,patch…1.9句柄图形系统句柄图形对象对象的句柄:创建对象时,MATLAB返回的用于标识此对象的数值每个对象都有一个独一无二的句柄,通过操作句柄,可查看对象的所有属性或修改大部分属性将“句柄值为h的对象”简称为“对象h”根对象的句柄值为0,图形窗口的句柄值默认为正整数,其他对象的句柄值为系统随机产生的正整数图形对象属性每个图形对象都有一个属性列表,记录了该图形对象的所有信息属性列表示一个结构体,字段名为对象的属性名,字段值为对象的属性值对图形对象进行操作就是对图形对象属性值的操作1.9句柄图形系统句柄图形对象基本操作获取对象属性值:get(h),a=get(h),get(figure),get(h,’PropertyName’)设置对象属性值:set(h,’PropertyName’,’PropertyValue’),set(h),set(h,’PropertyName’)获取当前的图形、坐标轴和对象gcf:获取当前图形窗口句柄值gca:获取当前图形窗口中当前坐标轴的句柄值gco:获取当前图形窗口中当前对象的句柄值gcbf:获取正在执行的回调程序对应的对象所在窗口句柄值gcbo:获取正在执行的回调程序对应的对象句柄值get(0,'ScreenSize')ans=111280800set(0,'Units','norm');get(0,'ScreenSize')ans=0011figure(‘Units’,‘norm’,…'position',[0011])1.9句柄图形系统句柄图形对象基本操作查找对象:h=findobj:返回根对象及其子对象数柄h=findobj(‘P1’,’Values1’,’-logical’,’P2’,’Value2’)h=findall(h_list):查找h_list包含的所有对象及其子对象,包含句柄隐藏的对象h=allchild(h_list):查找对象的所有子对象h=ancestor(h_list,type):查找对象给定类型的父对象复制对象copyobj(h,p)删除对象delete(h)clf或claclose(h)或者closenamefigure(1)set(1,’HandleVisibility’,’off’)findobjans=0h=findall(0,’type’,’figure’)delete