第四讲 matlab数学建模之图像处理、程序设计课件.ppt
1,第四讲,图 形 处 理MATLAB 7程序设计,2,1. 基本的绘图命令,基本的绘图命令 绘图的一般步骤 绘制二维曲线图 极坐标图形的绘制 多个图形的绘制方法 曲线的色彩、线型和数据点型,3,(1)基本的绘图命令,绘制基本线性图的函数表,图形的标注 为清晰表达图形和图中曲线的意义,应在图形中加入适当的标注,包括图形标题、X轴、Y轴名称等。,4,5,(2)绘图的一般步骤,基本的绘图步骤,6,(3)绘制二维曲线图,二维曲线图在MATLAB 7中的绘制是最为简便的。如果将X轴和Y轴的数据分别保存在两个向量中,同时向量的长度完全相等,那么可以直接调用函数进行二维图形的绘制。在MATLAB 7中,使用plot函数进行二维曲线图的绘制。,7,A、二维平面图形与坐标系 1. 几个基本的绘图命令 a. 线性坐标曲线 plot 函数命令 plot 是 MATLAB 二维曲线绘图中最简单、最重要、使用最广泛的一个线性绘图函数。它可以生成线段、曲线和参数方程曲线的函数图形。 命令格式: plot(X,Y)plot(x1,y1,x2,y2,):综合调用方式,8,用命令 plot(x,y)绘制函数 y=cos(x)在两个周期内的图形。 x=0:0.01:2*pi; y=cos(x); plot(x,y)在同一图形窗口中用命令 plot(x,y)绘出正弦余弦函数的图形。 x=0:0.01:2*pi; y=sin(x);cos(x); plot(x,y),9,调用格式:plot(x,y,s) ,s 为类型说明参数,是字符串。s 字符串可以是三种类型的符号之一,也可以是线型与颜色和定点标记与颜色的组合;如果没有 s 参数,plot 将使用缺省设置(实线,前七种颜色顺序着色)绘制曲线; 在当前坐标系中绘图时,每调入一次绘图函数,MATLAB将擦掉坐标系中已有的图形对象。可以用 hold on 命令在一个坐标系中增加新的图形对象。注意MATLAB会根据新图形的大小,重新改变坐标系的比例。用不同的线型和标注来绘制两条曲线。 t1=0:0.1:2*pi; t2=0:0.1:6; y1=sin(t1); y2=sqrt(t2); plot(t1,y1,:hb,t2,y2,-g),10,绘制二维曲线图, x= 0:0.01:10; y=tan(x); plot(x,y),11,(4)极坐标图形的绘制,MATLAB提供了polar函数来在极坐标下绘制图形 : x= 0:0.01:10; y1=sin(x); y2 = cos(x-2.5); polar(y1,y2,-r+),2. 极坐标图 polar(theta, rho) 绘制以theta为角度,rho为半径的极坐标曲线。 例 :绘制以y=sin(2t)*cos(2t)的极坐标曲线。 t=0:2*pi/100:2*pi; sin2t=sin(2*t); cos2t=cos(2*t); polar(t, sin2t.*cos2t),13,(5)多个图形的绘制方法,subplot函数 可以实现多个图形的绘制: x = 0:.1:20; subplot(2,2,1) plot(x,sin(x);,14,多个图形的绘制方法, x = 0:.1:20; subplot(2,2,2) plot(x,cos(x);,15,多个图形的绘制方法, subplot(2,2,3) x = 0:.1:2; y1=tan(x); plot(x,y1,-b*);,16,(6)曲线的色彩、线型和数据点型,曲线的色彩、线型和数据点型参数定义,17,(1) 图题的标注,在MATLAB中,通常可以使用3种方式给图形添加图题:使用Insert 菜单中的Title命令;使用属性编辑器(Property Editor);使用title函数。,18,图题的标注, x = 0:.1:2;y1=sin(x);y2 = sin(x-0.25); y3 = sin(x-0.5); plot(x,y1,-.b, x,y2,-r*, x,y3,-.gh) title(There three lines),19,文本标注举例, x=linspace(-3,5,100); y=cos(x); z=sin(x); plot(x,y,x,z) title(一条正弦曲线和一条余弦曲线) xlabel(x的取值范围) ylabel(Y和Z的值),20,(4)图例的添加,为了更好地区分所绘制的多条曲线,可以使用图例加以说明,对它们表示的数据进行更准确的区分。可以使用如下3种方法生成图例:打开Insert 菜单中并选择Legend命令;单击工具栏中的legend图标;使用legend函数。,21,图例的添加 举例,22,(5)坐标网格的添加,在图形绘制过程中,为了精确地知道图形上某点的坐标,需要绘制坐标网格来定位,MATLAB 7语言中提供了grid函数来实现这一功能:grid off命令关闭坐标网格; grid on命令打开坐标网格 grid mirror命令使用更细化的网格; grid(AX,)命令使用AX坐标系代替当前坐标系。,23,坐标网格的添加举例, x=linspace(-5,5,100); y=x.4+22*x.2-6*x+10; plot(x,y) grid on,24,(6) 使用矩形或是椭圆在图形中圈出重要部分,用户可以使用矩形或是椭圆在图形中圈出特别的区域,从而使得该区域能引起特别的注意。当其中的一个矩形或是椭圆被选中时,用户可以移动并改变它的大小,或是右击它,在弹出的快捷菜单中用户可以选择改变它的属性和外观。,25,应用举例,当右击矩形或是椭圆时,将弹出一个菜单,26,3. 三维图形的绘制,MATLAB语言提供了三维图形的处理功能。与二维图形相似,绘制三维图形时可以使用MATLAB语言提供的相关函数:三维线图指令plot3 三维网线图和曲面图 三维网线图三维曲面图,27,(1)三维线图指令plot3, % 该程序用于绘制三维的螺旋曲线图 t = 0:pi/50:20*pi; plot3(sin(t),cos(2*t),sin(t)+cos(t),28,(2) 三维网线图,使用mesh函数来绘制三维网格图形: z=peaks(50); mesh(z);,(2) 三维图形的绘制,三. 三维曲面图的绘制 例 试单独使用山峰演示函数peaks( ) 。 peaks(30)z = 3*(1-x).2.*exp(-(x.2) - (y+1).2) - 10*(x/5 - x.3-y.5) .*exp(-x.2-y.2) - 1/3*exp(-(x+1).2 - y.2),30,(3)三维曲面图,可是使用surf函数来绘制三维表面图形 : X,Y=meshgrid(-4:0.2:4); Z=exp(-0.5*(X.2Y.2); surf(X,Y,Z),三维图形的绘制,三维曲面图的绘制 例 : t=0:pi/10:2*pi; X1,Y1,Z1=cylinder(3,20); Z1=2*Z1; X2,Y2,Z2=cylinder(2+cos(t),20); Z2=2*Z2; subplot(1,2,1) surf(X1,Y1,Z1) title(圆柱面) subplot(1,2,2) surf(X2,Y2,Z2) title(半径变化的圆柱面),三维图形的绘制,三维曲面图的绘制 例 : X1,Y1,Z1=sphere(8); X2,Y2,Z2=sphere(20); subplot(1,2,1) surf(X1,Y1,Z1) title(64个面构成的球面) subplot(1,2,2) surf(X2,Y2,Z2) title(400个面构成的球面),33,4. 特殊图形的绘制,条形图和面积图(Bar and Area Graphs) 饼形图(Pie Charts)离散型数据图 方向和速度矢量图形 等高线的绘制(Contour Plots),34,(1)条形图和面积图,条形图和面积图用于绘制向量和矩阵数据,这两种图形可以用来比较不同组数据的在总体数据中所占的比例,其中条形图适于表现离散型数据,而面积图适于表现连续型数据。,35,条形图举例,集合式条形图的绘制 y=1 2 3 4 5 6 7 8 9 10bar(y),36,(2)饼形图,在统计学中,人们经常要用到饼形图来表示各个统计量占总量的份额,饼形图可以显示向量或矩阵中的元素占所有元素总和的百分比,MATLAB提供了pie函数和pie3函数,分别用于绘制二维饼形图和三维饼形图。,37,(3)离散型数据图,MATLAB 7提供了一系列适于表现离散型数据的函数。其中常用的主要有stem 函数、stem3函数和stairs函数。,38,离散型数据图举例,使用 stem(y)函数来绘制句柄状图形 。 y=rand(20,1); stem(y),39,(4)方向和速度矢量图形,MATLAB 7提供了一些函数用于绘制方向矢量和速度矢量图形,这些函数有compass、feather、quiver和quiver3。,40,方向和速度矢量图形举例,用compass函数绘制矢量图形 : w=0:0.1:6; z=sin(w).*exp(j*w); compase(z),41,(5)等高线的绘制,等高线函数为创建、显示并标注由一个或多个矩阵确定的等值线。,42,等高线的绘制举例,使用contour函数绘制等高线图形: x,y,z=peaks; contour(x,y,z),三维图形的绘制,三. 等高线图的绘制 例: X,Y,Z=peaks(30); subplot(2,2,1) surf(X,Y,Z) title(演示山峰的三维曲面图) subplot(2,2,2) contour(X,Y,Z,5) title(演示山峰的等高线图) subplot(2,2,3) contourf(Z,5) title(在相邻等高线之间用颜色填充) subplot(2,2,4) C,h=contour(Z,5); clabel(C,h) title(为等高线添加高度值),43,44,视点控制举例,view函数的使用 : X,Y=meshgrid(-5:0.2:5); Z=exp(0.5*(X.2-Y.2); surf(X,Y,Z) view(30,60) ,45,光照控制举例,本例首先绘制一个膜面图,然后使用位置向量 0 -2 1 设置光源的方向。 z=peaks(50); surf(z) light(Position,0.5 -3 2),46,绘制图形的图形框架窗口对象,MATLAB 7语言中实现句柄访问的函数,47,核心(Core)对象,MATLAB 7语言中创建核心对象的函数,48,核心(Core)对象举例, x,y = meshgrid(-2:.4:2);Z = x.*exp(-x.2-y.2);fh = figure(Position,350 275 600 450,Color,w);ah = axes(Color,.8 .8 .8,XTick,-2 -1 0 1 2,. YTick,-2 -1 0 1 2);sh = surface(XData,x,YData,y,ZData,Z,. FaceColor,get(ah,Color)+.1,. EdgeColor,k,Marker,o,. MarkerFaceColor,.5 1 .85);view(3),49,绘图(Plot )对象举例, x,y,z = peaks; c,h = contour(x,y,z);set(h,LineWidth,3,LineStyle,:),50,set函数,在MATLAB 7中,使用set函数可以设置对象的属性值,其通常的调用格式如下。set(H,PropertyName,PropertyValue)命令设置PropertyName的属性为PropertyValue。set(H,a)命令中,a为结构型变量,字段名为图形对象的属性名,字段值为映像的属性值。set(H,PropertyName1,PropertyValue1,PropertyName2,PropertyValue2,.)命令同时设置多个属性的值。,51,默认属性举例, whitebg(w) %create a figure with a white color schemeset(0,DefaultAxesColorOrder,0 0 0,. DefaultAxesLineStyleOrder,-|-|:|-.) Z = peaks; plot(1:49,Z(4:7,:),52,M文本编辑器的基本知识MATLAB 7的控制流语言变量和函数的种类程序设计的辅助函数程序的调试和优化,MATLAB 7程序设计,53,1. M文本编辑器的基本知识,M文本编辑器 M文件的基本属性 M文件的组成部分 脚本式M文件 函数式M文件,54,M文件的组成部分,函数式M文件的组成部分。调出Medit窗口,在里边输入如下内容:function f = fact(n) %函数的定义行% Compute a factorial value. %H1行% FACT(N) returns the factorial of N, %帮助文本% usually denoted by N!% Put simply, FACT(N) is PROD(1:N). %注释f = prod(1:n); % 函数体,55,M文件的组成部分及其功能,M文件的组成部分及其功能,56,脚本式M文件举例,本脚本式M文件绘制一个正弦曲线: %此文件用于绘制【2pi,2pi】区间的正弦曲线图x=-2*pi:0.05:2*pi;y=sin(x);plot(x,y,c+)legend(正弦曲线图),57,函数式M文件举例,例 判断某一年是否为闰年。解:调出Medit窗口,在里边输入如下内容。%该函数用于判断某一年是否为闰年%使用格式为isleapea(y),其中y是用户所要计算的年份function isleapyear(year)sign=0;if rem(year,4)=0 sign=sign+1;end,if rem(year,100)=0 sign=sign-1; end if rem(year,400)=0 sign=sign+1; end if sign=1 fprintf(%4d year is a leap year.n,year) else fprintf(%4d year is not a leap year.n,year)end,58,2. 控制流,最简单的程序控制就是顺序结构,用户依次输入命令语句即可。MATLAB 7语言还提供了4种高级的控制结构。它们是:if-else-end结构、switch-case-otherwise-end结构、for循环和while循环。,59,(1)顺序结构,顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照程序的物理位置顺次执行。 a=1;b=2;c=3;s1=a+bs2=s1+cs3=s2/s2,60,(2)ifend语句,只有一种选择时的情况 if 表达式执行语句end,61,ifend语句,有两种选择时的情况 if 表达式 执行语句1 else 执行语句2end,62,ifend语句,有3种或3种以上选择时的情况 if 表达式1 表达式1为真时的执行语句1 elseif表达式2 表达式2为真时的执行语句2 elseif表达式3 表达式3为真时的执行语句3elseifelse 所有的表达式都为假时的执行语句 end,63,(3) switchcaseend语句,switch开关语句 case条件语句, 执行语句,执行语句 case 条件语句1,条件语句2, 条件语句3, 执行语句,执行语句 otherwise, 执行语句,执行语句 end,64,(5) for循环语句,For语句是一种循环语句,可以让用户很方地实现循环操作,从而可以从容地应付大规模的循环语句。 for i =表达式, 执行语句,执行语句 end,65,(6)while循环语句,与for循环不同,while循环的判断控制可以是逻辑判断语句,因此,它的循环次数可以是一个不定数。这样就赋予了它比for循环更广泛的用途。 while表达式 执行语句end,66,(7) 人机交互命令,终止命令break和return 继续命令continue 等待用户反应命令pause echo命令 用户输入提示命令input 请求键盘输入命令keyboard,67,(2)函数的分类,主函数 匿名函数 嵌套式函数 子函数 局部函数,68,主函数,M文件中的第一个函数就叫做主函数,前边章节中所引用的函数事实上都是主函数,主函数之后可以是任意数量的子函数, 它们可以作为主程序的子程序。一般来说,在命令窗口或是其他的M文件只能调用主函数,调用的时候就是直接调用其函数名。 比如,函数average的M文件average.m如下:function y = average(x)% AVERAGE Mean of vector elements.y = sum(x)/length(x); % Actual computation,69,子函数,与其他的高级语言一样,在MATLAB 7语言中也可以很方便地定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。子函数只能为主函数或同一主函数下的其他子函数所使用。,