MATLAB_程序设计与应用第二版_刘卫国---Matlab绘图_第1页
MATLAB_程序设计与应用第二版_刘卫国---Matlab绘图_第2页
MATLAB_程序设计与应用第二版_刘卫国---Matlab绘图_第3页
MATLAB_程序设计与应用第二版_刘卫国---Matlab绘图_第4页
MATLAB_程序设计与应用第二版_刘卫国---Matlab绘图_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图细节,只需给出一些基本参数即可得到所需图形。这些函数称为高层绘图函数。除此之外,Matlab还提供了一些直接对图形句柄进行操作的低层绘图操作。低层操作将图形的每一个图形元素(如坐标轴、曲线、曲面等)看成一个独立的对象,系统对每一个图形对象分配一个句柄,以后可通过该句柄对图形元素进行操作。而不影响图形的其他部分。 高层绘图操作简单明了、方便高效、是用户最常用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户更加自主地绘制图形创造条件。 事实上,高层绘图函数都是利用低层函数

2、而建立起来的。 本章重点介绍二维和三维图形的高层绘图函数。 一、二维图形 在Matlab中,最基本的且应用最广泛的绘图函数是:plot格式:plot(x,y) %x,y为纵横坐标值,且长度相同的向量例在0 x2区间内,绘制图形y=2e-0.5xsin(2 x) 程序如下:x=0:pi/100:2*pi;y=2*exp(-0.5*x).*sin(2*pi*x);plot(x,y)例:绘制曲线程序如下:t=-pi:pi/100:pi;x=t.*cos(3*t);y=t.*sin(t).*sin(t);plot(x,y)执行该程序可得到相应的图形。x=tcos(3t) - t t y=tsin2t例

3、:程序如下:x=linspace(0,2*pi,100); y=sin(x);cos(x);plot(x,y)以上提到plot函数的自变量x,y为长度相同的向量,实际应用还有一些变化,下面分别说明:当x是向量,y是有一维与x同维的矩阵,则可绘制出多条不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。 当x、y是同维矩阵时,则以x、y对应列元素为横纵坐标分别绘制曲线,曲线条数等于矩阵的列数。 Eg 在同一坐标中同时绘制出正弦和余弦曲线 t=linspcace(0,2*pi,100); x=t;t; y=sin(t);cos(t); plot(x,y);Plot函数最简单

4、的调用格式是只包含一个输入参数:plot(x)。在这种情况下,当x是实向量时,则以该向量元素的下标为横坐标,元素值为纵坐标画出一条曲线。当是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。t=0:0.01:2*pi;x=exp(i*t);plot(x)t=0:0.01:2*pi;x=exp(i*t);y=x;2*x;3*x;plot(y)程序如下:2、含多个输入参数的plot函数格式:plot(x1,y1,x2,y2,xn,yn)plot函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。当输入参数都为向量时,x1和y1,x2和y2,xn和yn分别组成一组向量对,每一组

5、向量对的长度可以不同。 x=linspace(0,2*pi,100); plot(x,sin(x),x,2*sin(x),x,3*sin(x)当输入参数有矩阵形式时,配对的当输入参数有矩阵形式时,配对的x,yx,y按对应列元素为横、纵坐标分别绘按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。制曲线,曲线条数等于矩阵的列数。 x=linspace(0,2*pi,100); y1=sin(x); y2=2*sin(x); y3=3*sin(x); x1=x;x;x; y=y1;y2;y3; plot(x1,y,x,cos(x)格式:plot(x1,y1,选项1,xn,yn,选项n)3

6、、含选项的、含选项的plot函数函数 线 型 颜 色 - 实线 b 蓝色 : 虚线 g 绿色 -. 点划线 r 红色 - 双划线 c 青色 m 品红色 y 黄色 k 黑色 w 白色 标记符号 . 点 d 菱形符 + 加号 * 星号 s 方块符 X 叉号例:用不同线型和颜色在同一坐标内绘制曲线 y=2e-0.5xsin(2 x) 及其包络线。程序如下:x=(0:pi/100:2*pi);y1=2*exp(-0.5*x)*1,-1; %包络线y2=2*exp(-0.5*x).*sin(2*pi*x); x1=(0:12)/2;y3=2*exp(-0.5*x1).*sin(2*pi*x1);plot

7、(x,y1,k:,x,y2,b-,x1,y3,rp)双纵坐标函数plotyy 在Matlab中,如果需要绘制具有不同坐标的两个图形,可以用plotyy函数。这种图形能把函数值具有不同量纲、不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比和分析。格式:plotyy(x1,y1,x2,y2)对应一条曲线例:用不同标度在同一坐标内绘制曲线x1=0:pi/100:2*pi;x2=0:pi/100:3*pi;y1=exp(-0.5*x1).*sin(2*pi*x1);y2=1.5*exp(-0.1*x2).*sin(x2);plotyy(x1,y1,x2,y2)程序如下:y1=e-0.5xs

8、in(2 x)及其曲线 y2=1.5e-0.1xsin(x)二、绘制图形的辅助操作 图形绘制好后,需要进行一些辅助操作,一是图形意义更加明确,可读性更强。1、图形标注有关图形标注的调用格式:title(图形名称)xlabel(x轴说明)ylabel(y轴说明)text(x,y,图形说明)gtext(图形说明)legend(图例1,图例2,)说明:l前三个函数分别说明图形和坐标轴的名称ltext和gtext是在坐标处添加图形说明。llegend函数用于绘制所用线型、颜色或数据点标记图例,图放置在图形的空白处,用户还可通过鼠标移动图例说明放置在希望处。l除legend函数外,其他均可用于三维图形,

9、z坐标轴说明用zlabel。2、坐标控制 Matalb的绘图中,可以自动根据数据范围选择合适的坐标刻度,若用户重新定义坐标范围可用函数axis 格式:axis(xmin xmax ynim ymax zmin zmax) 若绘制二维图形则给出前4个参数即可,除此之外,aixs函数的常用功能还有:axis equal:纵横坐标轴采用等长刻度axis square:产生方形坐标系(默认为矩形)axis auto:使用默认设置axis off:取消坐标轴axis on:显示坐标轴grid on/off:控制是画还是不画网格线,不带参数的gridgrid函数命令在两种状态之间切换box on/off:

10、控制是加边框还是不加边框,不带参数的boxbox函数命令在两种状态之间切换例 绘制分段函数曲线并添加图形标注x=linspace(0,10,100);y=;for x0=x if x0=8 y=y,1; %y=1 elseif x0=6 y=y,5-x0/2; %y=5-x/2 elseif x0=4 y=y,2; %y=2 elseif x0=0 y=y,sqrt(x0); %y=sqrt(x) endendplot(x,y)axis(0 10 0 2.5)title(分段函数曲线分段函数曲线);xlabel(Variable x);ylabel(Variable y);text(2,1.3

11、,y=x(1/2);text(4.5,1.9,y=2);text(7.3,1.5,y=5-x/2);text(8.5,0.9,y=1);程序如下:方法二:方法二: 方法四:方法四:x=linspace(0,10,100); x=linspace(0,10,100); y=; y=(x=0 & x=4 & x=6 & x=8 (x=8)*1; y(i)=1; elseif x(i)=6 y(i)=5-x0/2; elseif x(i)= 4 y(i)=2; elseif x(i)=0 y(i)=sqrt(x(i); endend方法三:方法三:x=linspace(0,1

12、0,100);y=zeros(size(x);K1=find(x=8);y(k1)=x(k1).2;K2=find(x=6&x=4&x6);y(k3)=2;3、图形保持 一般情况下,每执行一次绘图命令,就刷新一次图形窗口,图形窗口原有的图形将不复存在。若希望在已存在图形的窗口上添加新的图形,Matlab提供了函数hold,hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态下切换。例:用图形保持功能在同一坐标内绘制下面函数曲线及包络线程序如下:x=(0:pi/100:2*pi);y1=2*exp(-0.5*x)*1,-1;y2=2*ex

13、p(-0.5*x).*sin(2*pi*x);plot(x,y1,b:);axis(0, 2*pi ,-2 ,2) %设置坐标设置坐标hold on; %设置图形保持装态设置图形保持装态plot(x,y2,k);legend(包络线包络线,包络线包络线,曲线曲线y) %加说明加说明hold off; %关闭图形保持关闭图形保持gridy=2e-0.5xsin(2 x) 在实际应用中,经常需要在一个图形窗口绘制若干个独立的图形,这就需要对窗口进行分割。分割后的图形窗口由若干个绘图区组成,每个绘图区可以建立独立的坐标系并绘制图形。4、图形窗口的分割格式: subplot(m,n,p)说明: 将图形

14、窗口分割成m行、n列个绘图区例:在一个图形窗口同时绘制正弦、余弦、正切和余切曲线程序如下:x=linspace(0,2*pi,60);y=sin(x);z=cos(x);t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);subplot(2,2,1);plot(x,y)title(sin(x);axis(0,2*pi,-1,1);subplot(2,2,2);plot(x,z)title(cos(x);axis(0 2*pi -1 1);subplot(2,2,3);plot(x,t)title(tg(x);axis(0 2*pi -40 40);su

15、bplot(2,2,4);plot(x,ct)title(ctg(x),axis(0 2*pi -40 40)三、绘制二维图形的其他函数三、绘制二维图形的其他函数1、其他形式的线性直角坐标图 在线性直角直角坐标系中,其他形式的图形有条形图、阶梯形图、杆图和填充图等。格式:bar(x,y,选项) %条形图stairs(x,y,选项) %阶梯图 stem(x,y,选项) %杆图fill(x1,y1,选项1,x2,y2,选项2,) %填充图例:分别绘制函数 的条形图、填充图、阶梯图和杆图程序如下:x=0:0.35:7;y=2*exp(-0.5*x);subplot(2,2,1);bar(x,y,g)

16、; %绘制条形图title(bar(x,y,g);axis(0 7 0 2);subplot(2,2,2);fill(x,y,r);%绘制填充图title(fill(x,y,r);axis(0 7 0 2);subplot(2,2,3);stairs(x,y,b);%绘制阶梯图 title(stairs(x,y,b);axis(0 7 0 2);subplot(2,2,4);stem(x,y,k);%绘制杆图title(stem(x,y,k);axis(0 7 0 2);y=2e-0.5x2、极坐标图polar 函数用来绘制极坐标图,其调用格式为:格式: polar(theta,rho,选项)

17、说明:theta,rho分别为矢量的幅角、幅值程序如下:theta=0:0.01:2*pi;rho=sin(2*theta).*cos(2*theta);polar(theta,rho,k)3、对数坐标图在实际应用中,经常用到对数坐标图,例如控制理论中的bode图。格式:semilogx(x1,y1,选项1,x2,y2,选项2,)semilogy(x1,y1,选项1,x2,y2,选项2,)loglog(x1,y1,选项1,x2,y2,选项2,)其中:选项的定义与plot函数完全一致,前两项为半坐标对数图,第三个为全坐标图例:绘制 的对数坐标图,并于直角坐标图进行比较x=0:0.1:10;y=1

18、0*x.*x;subplot(2,2,1);plot(x,y);title(plot(x,y););grid on;subplot(2,2,2);semilogx(x,y);title(semilogx(x,y);grid onsubplot(2,2,3);semilogy(x,y);title(semilogy(x,y);grid onsubplot(2,2,4);loglog(x,y);title(loglog(x,y);grid on程序如下:y=10 x24、对函数自适应采样的绘图函数格式:fplot(filename,lims,tol,选项)说明:filename为函数名,用以字符串

19、形式出现,它可以是由多个分量函数构成的行向量,分量函数可以是函数的直接字符串,也可以是内部函数名或函数文件名,但自变量都必须为x。Lims为x,y的取值范围,以行向量形式出现,若取二元向量xmin,xmax时,x轴的范围被人为确定,若取四维向量xmin,xmax,ymin,ymax时,x,y轴的范围被人为确定。Tol为相对允许误差。默认值为2e-3。选项定义与plot相同。例:用fplot函数绘制 的曲线先建立函数文件myf.m:function y=myf(x)y=cos(tan(pi*x);在用fplot函数绘制myf.m函数曲线。在命令窗口键入fplot(myf,-0.4,1.4,1e-

20、4)输出结果:也可直接用fplot函数绘图fplot(cos(tan(pi*x),-0.4,1.4,1e-4)f(x)=cos(tan(x)5、其他形式的二维图形举例说明例:某次考试优良、良好、中等、及格、不及格的人数为7、17、23、19、5,试用饼形图进行成绩统计分析 绘制复数的向量图:3+2i、5.5-i、-1.5+5isubplot(1,2,1);pie(7,17,23,19,5);title(饼图);legend(优秀,良好,中等,及格,不及格);subplot(1,2,2);compass(3+2i,5.5-i,-1.5+5i);title(向量图);输出结果二、三维图形二、三维图

21、形1、绘制三维图形的基本函数最基本的函数为plot3,它是将plot扩展到三维中去,因此他们十分相似。格式:plot3(x1,y1,z1,选项1,)例如:绘制空间曲线 x2+y2+z2=64 y+z=0t=0:pi/50:2*pi;x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);plot3(x,y,z,rp);title(Line in 3-D space);text(0,0,0,origin);xlabel(x);ylabel(y);zlabel(z);grid程序如下:输出结果输出结果2、三维曲面(1)平面网格坐标矩阵的生成绘制z=f(x

22、,y)所代表的三维曲面,首先要在xy平面选定一矩形区域,假定矩形区域D=a,bc,d,然后将a,b在x方向分成m份,将c,d在y方向分为n份,由各划分点分别作平行于两坐标轴的直线,将区域D分成mn各小矩形,生成代表每一个小矩形顶点坐标平面网络坐标矩阵,最后利用有关矩阵函数绘图。产生平面区域内的网络坐标矩阵有两种方法利用矩阵运算生成x=a:dx:b;y=(c:dy:d);X=ones(size(y)*x;Y=y*ones(size(x);上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。于是X和Y相同位置上的元素(X(i,

23、j),Y(i,j)恰好是区域D的(i,j)网络坐标。若根据每个网格点上的x,y坐标求函数值z,则得到函数值矩阵Z。由X,Y,Z各列或各行所对应坐标,对应空间一条曲线,而空间曲线的集合组成空间曲面利用meshgrid函数生成x=a:dx:b;y=c:dy:d;X,Y=meshgrid(x,y)执行上述语句后,所得到的网络坐标X,Y与得到的相同,当X=Y时,meshgrid函数可写成meshgrid(x)(2)绘制三维曲面的函数格式:格式:mesh(x,y,z,c) surf(x,y,z,c)一般情况:x,y,z是维数相同的矩阵,x,y是网络坐标矩阵,z是网点上的高度矩阵,c是指在不同高度下的颜色

24、范围。C省略时,Matlab认为c=z,即颜色的设定正比于图形的高度,这样可以得到层次分明的三维图。例:用三维曲面表现函数x=0:0.1:2*pi;X,Y=meshgrid(x);z=sin(Y).*cos(X);mesh(X,Y,z); %用mesh函数绘制三维曲面图xlabel(x-axis),ylabel(y-axis),zlabel(z-axis),title(mesh)程序1输出结果输出结果z=sinycosx程序2x=0:0.1:2*pi;X,Y=meshgrid(x);z=sin(Y).*cos(X);surf(X,Y,z);%用surf函数绘制三维曲面图xlabel(x-axi

25、s),ylabel(y-axis),zlabel(z-axis),title(surf)输出结果输出结果程序3x=0:0.1:2*pi;X,Y=meshgrid(x);z=sin(Y).*cos(X);plot3(X,Y,z); %用plot函数绘制三维曲面图xlabel(x-axis),ylabel(y-axis),zlabel(z-axis),title(plot3-1),grid输出结果输出结果例:分析由函数z=x2-2y2构成的曲面形状及平面z=a的交线x,y=meshgrid(-10:0.3:10);z1=(x.2-2*y.2)+eps;a=input(a=?);z2=a*ones(

26、size(x);subplot(1,2,1);surf(x,y,z1);hold on;surf(x,y,z2);axis(-10,10,-10,10,-100,100);grid;hold offr0=abs(z1-z2)6|abs(Y)6); %确定超出-6.6范围的各点下标ZZ(ii)=zeros(size(ii); %强制为0surf(X,Y,ZZ),shading interp;colormap(copper)light(position,0,-15,1);lighting phongmaterial(0.8,0.8,0.5,10,0.5) 例:表面切面程序如下观看执行的效果P=pe

27、aks(30); %从Matlab提供的双变量正态分布曲面获取数据P(18:20,9:15)=NaN;%为镂空赋值surfc(P);%带等位线的曲面图colormap(hot)light(position,50,-10,5)material(0.9,0.9,0.6,15,0.4)grid off,box on 例:利用“非数”NaN,对图形进行镂空处理程序如下观看执行的效果clfx,y,z = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2); %产生三维点格阵v =x.*exp(-x.2-y.2-z.2);xs = -0.7,0.7; ys = 0; zs =0;%确定

28、切片位置slice(x,y,z,v,xs,ys,zs)%产生切片图colorbarshading interpcolormap hsvxlabel(x),ylabel(y),zlabel(z)title(The color-to-v(x,y,z) mapping)view(-22,39)alpha(0.3) 例:图形函数 222zyxxev程序如下观看执行的效果x,cmap=imread(c:winter.jpg);image(x);colormap(cmap)axis image off例:在c盘根目录下有一图形文件winter.jpg,在图形窗口显示该图像。程序如下七、动画制作Matlab

29、中的动画形式有两种:(1 1)一种是影片动画-影片动画预先制作图形,存放在图形缓冲区,然后逐贞播放,这种动画适用于难于实时绘制的复杂图画,这种方法计算量大,占用内存多,但回放速度快,画面连贯。(2)另一种是实时动画-实时动画保持图形窗口中绝大部分的像素色彩不变,而知识更新部分像素的颜色从而构成运动图像。这种动画适用于每次变化较少、图形精度变化不是很高的场合。x,y,z=sphere(50);m=moviein(30);for i=1:30 surf(i*x,i*y,i*z) m(:,i)=getframe;endmovie(m,10)例:播放一个直径不断变化的球体影片动画播放例:例:制作红色小

30、球沿一条封闭路径的下璇线运动的实时动画。首先编写anim_zzy1.m函数文件,并将其存放在Mtalab的work文件夹内然后在命令窗口键入f=anim_zzy1(2,450)执行后得function f=anim_zzy1(k,ki);%anim_zzy1.m演示红色小沿一条封闭螺线运动的实时动画%仅演示实时动画的调用格式为: anim_zzy1(k)%即演示实时动画又拍摄照片的调用格式为: f=anim_zzy1(k,ki)%k-红球运动循环数(不小于1)%ki-制定拍照的瞬间,取11034(自变量采样点数)间的任意值%f-存储拍摄照片数据,可用image(f.cdata)观察照片%产生封

31、闭的运动轨迹t1=(0:1000)/1000*10*pi;x1=cos(t1);y1=sin(t1);z1=-t1;t2=(0:10)/10;x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(x2);t3=t2;z3=(1-t3)*z1(end);x3=zeros(size(z3);y3=x3;t4=t2;x4=t4;y4=zeros(size(x4);z4=y4;x=x1 x2 x3 x4;y=y1 y2 y3 y4;z=z1 z2 z3 z4;plot3(x,y,z,color,1,0.6,0.4,LineWidth,2.5)

32、axis off%定义活动对象的颜色定义活动对象的颜色,点形点形,大小和擦除方式大小和擦除方式h=line(xdata,x(1),ydata,y(1),zdata,z(1),Color,1 0 0,Marker,.,MarkerSize,40,. EraseMode,xor)%使小球运动使小球运动n=length(x);i=2;j=1;while 1 set(h,xdata,x(i),ydata,y(i),zdata,z(i); drawnow; pause(0.0005) i=i+1; if nargin=2 & nargout=1 if (i=ki & j=1);f=get

33、frame(gcf);end end if in i=1;j=j+1; if jk;break;end endend小球沿螺旋线运动n=30;s=0.02;%产生n个随机点(x,y),处于-0.5到0.5之间x=rand(n,1)-0.5;y=rand(n,1)-0.5;h=plot(x,y,.); %绘制随机点axis(-1 1 -1 1);axis squaregrid offset(h,EraseMode,Xor,MarkerSize,20)%循环5000次,%产生动画效果for i=linspace(1,10,500); drawnow x=x+s*randn(n,1); y=y+s*

34、randn(n,1); set(h,XData,x,YData,y);end例:例:模拟布朗运动模拟布朗运动程序如下程序如下clf;shg,x=3*pi*(-1:0.05:1);y=x;X,Y=meshgrid(x,y);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;h=surf(X,Y,Z);colormap(jet);axis offn=12;mmm=moviein(n);for i=1:nrotate(h,0 0 1,25);mmm(:,i)=getframe;endmovie(mmm,5,10)例如:例如:n=20;for i=1:n x=0:0.1:i; y=1-1/sqrt(1-0.32)*exp(-0.3*x).*sin(sqrt(1-0.32)*x+acos(0.3); plot(x,y) axis(0,20,0,1.5); %固定坐标轴 M(i)=getframe; %抓取画面endmovie(M,3) %播放3次例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论