Matlab数据与函数的作图a.ppt

上传人:牧羊曲112 文档编号:5439134 上传时间:2023-07-07 格式:PPT 页数:100 大小:852KB
返回 下载 相关 举报
Matlab数据与函数的作图a.ppt_第1页
第1页 / 共100页
Matlab数据与函数的作图a.ppt_第2页
第2页 / 共100页
Matlab数据与函数的作图a.ppt_第3页
第3页 / 共100页
Matlab数据与函数的作图a.ppt_第4页
第4页 / 共100页
Matlab数据与函数的作图a.ppt_第5页
第5页 / 共100页
点击查看更多>>
资源描述

《Matlab数据与函数的作图a.ppt》由会员分享,可在线阅读,更多相关《Matlab数据与函数的作图a.ppt(100页珍藏版)》请在三一办公上搜索。

1、第三章 数据与函数的作图,本章导读作图功能是MATLAB的特长之一,MATLAB提供高端和低端作图命令,我们可以非常方便地将数据绘制成二维、三维的图形,而高端命令可以让我们随心所欲地画出各种函数图形。作图分为两大类,一类是数据作图,如给定数组x,y作数据的图形。一类是给一个函数直接作图,如做的图形。事实上图形正在演变成一种语言,它可以用更直观的形式展示问题的内涵。在数学建模竞赛中,我们的论文广泛使用图文并茂的形式,可以更好地说明解决问题的思路。特别是在国际数学建模竞赛MCM、ICM中,由于中国学生的语言表达能力,特别是书面表达能力不如以英语为母语的美国、英国、澳大利亚的等国家,因此在论文中多插

2、图形往往可以收到事半功倍的效果。,MATLAB作图功能十分强大,在三维作图中甚至物体在视角、光线以及材质上都能反映出来。我们将介绍图形的基本概念,以及用构架数组描述图形的机理,一些基本的命令和方法,其他命令可以举一反三。在本章的后半部分介绍图形界面的产生,可视化方法产生图形界面的方法。利用可视化界面可以让我们构造一个实验环境,对研究和探讨问题有一定的帮助。,3.1 作图命令的搜索,在界面上点击help功能,然后进行plot关键字的搜索见图,在这里列出了几乎所有和plot有关的图形命令,单击任何你需要的命令,在右边的窗口中可以看到该命令的语法、使用方法和一些示例。例如打开plot,下面的例子初步

3、展示MATLAB作离散图和连续图的例子。,【例3.1.1】打开plot,我们可以看到有关plot的语法说明,实例等。见图,根据帮助功能我们就可以方便地编程,例如作函数的图形,这里用数据作图。x=-pi:pi/10:pi;%产生自变量数组x(-pi,pi)y=tan(sin(x)-sin(tan(x);%产生相应因变量点的数组yplot(x,y,-rs,LineWidth,2,MarkerEdgeColor,k,.MarkerFaceColor,g,.MarkerSize,10)%作数据x,y的图形,并定义线的颜色、点的形状等。,【例3.1.2】用图形表示连续调制波形。t1=(0:11)/11*

4、pi;%产生12个自变量的点y1=sin(t1).*sin(9*t1);t2=(0:100)/100*pi;产生101个自变量的点y2=sin(t2).*sin(9*t2);subplot(2,2,1),plot(t1,y1,r.),axis(0,pi,-1,1),title(子图(1)subplot(2,2,2),plot(t2,y2,r.),axis(0,pi,-1,1),title(子图(2)subplot(2,2,3),plot(t1,y1,t1,y1,r.)axis(0,pi,-1,1),title(子图(3)subplot(2,2,4),plot(t2,y2),axis(0,pi,

5、-1,1)title(子图(4),【例3.1.4】用曲面图表现函数。首先取x,y轴的点,利用meshgrid命令产生x-y平面的网格点,在每个网格点上计算函数的值。x=-4:4;y=x;X,Y=meshgrid(x,y);%生成 x-y 坐标网格点矩阵Z=X.2+Y.2;%计算格点上的函数值surf(X,Y,Z);hold on,colormap(hot)stem3(X,Y,Z,bo)%用来表现在格点上计算函数值,3.2 图形基本概念和图形设置命令,3.2.1 图形基本概念 图形事实上是我们使用计算机命令在计算机屏幕(root)上绘制的各种对象(object)的组合,这些对象包括图形显示框及其

6、子对象,如各种菜单、各种工具图标和正方形的空白绘图显示区,以及在这个区域中用plot、surf等命令作出的图形对象、颜色对象、光线对象、注释对象等等。众多的对象组成的有机体形成了特色鲜明的计算机图形。下面我们列出主要的对象及其注释,见表,对象是分层次的,在一个图形中有父对象、子对象、兄妹对象等。如Root是Fiugre的父对象,Image是Figure的孙对象,而Axes和Uicontrol等是同辈对象。此图形结构可以用构架数组来表示,如MATLAB特有的句柄构架数组(handle structure)。典型的层次见图,在一个图形中除了图形本身外还有各种修饰命令,例如图形的标题、坐标的名称、线

7、条的颜色和粗细,在三维图形中还要考虑立体光线等等。合理地使用这些修饰命令将使我们的图形更好看,更具说服力。下例是由多个对象组成的图形。,3.2.2 图形各目标的设置命令set和信息传递命令get当我们用高端作图命令如plot、surf进行作图时,实际是调用个图形的构架数组。包括图形框架、菜单、工具图标、坐标、图形背景颜色以及图形等等各种层次对象(objects)。有关这些对象的设置都是系统内定的值,如果想改变某一个对象的属性的值,使用set命令来重新设置。在一个图形界面上对各对象之间进行信息传递,可以用get命令获取某窗口中的信息。先介绍图形句柄的概念。我们来看几个术语:gcf:为当前图形句柄

8、(current figure handle),即获得由作图命令产生的图的图形层次结构。gca:为图形当前的坐标系统(the handle to the current axes)。设置图形参数命令set的语法和获取属性信息的命令get:,set(H,PropertyName,PropertyValue,.)%对句柄H各种属性重新设置,set(H,a)%和上面命令等价,而将参数全部放入构架数组a,set(H,pn,pv.)%和上面命令等价,而将参数全部放入元胞数组pn和pv,set(H,pn,)%对多个句柄进行同时设置,a=set(h)%对象h的属性和值放到构架数组a中,a=get(0,Fac

9、tory)%将当前整个句柄所有属性的值放到构架数组a中,a=get(0,FactoryObjectTypePropertyName)%将当前句柄的某个属性和值放入a中,a=set(h,Default)%将对象h的内定值放到构架数组中,a=set(h,DefaultObjectTypePropertyName)%将某个属性放到构架数组中,=set(h,PropertyName)%将某个属性值放到元胞数组中,H:为句柄,如gcf、gca等等。PropertyName:为该句柄下的属性名,如线型、点的颜色等。PropertyValue:一个属性名的值,如线型实线或虚线等,点可以取红、蓝等等。a:为一

10、个构架数组,用于存放参数PropertyName,PropertyValue,.,当参数很多时用构架数组进行说明较为方便。pn:为元胞数组,存放各种属性名PropertyName1,PropertyName2,vp:为元胞数组,存放各种属性名相应的值PropertyValue1,PropertyValue2,,【例3.2.1】作两幅图,并用set命令重设一些属性,用get显示属性的改变。x=linspace(-pi,pi,10);y=sin(x)subplot(1,2,1),h=plot(x,y)%用系统内定的参数作图a=get(h)%显示图形的每种特性的参数subplot(1,2,2),h=

11、plot(x,y)set(h,LineStyle,-,LineWidth,1,Marker,d)b=get(h)%显示修改过的特性的参数,属性参数为:b=BeingDeleted:off BusyAction:queue ButtonDownFcn:Children:0 x1 double Clipping:onColor:0 0 1 CreateFcn:DeleteFcn:EraseMode:normal HandleVisibility:on HitTest:on Interruptible:on,LineStyle:-%已改变 LineWidth:1%已改变 Marker:diamond

12、%已改变 MarkerEdgeColor:auto MarkerFaceColor:none MarkerSize:6 Parent:150.0005 Selected:off SelectionHighlight:on Tag:Type:line UIContextMenu:UserData:Visible:on XData:1x10 double YData:1x10 double ZData:1x0 double,【例3.2.2】对于例可以用构架数组来改变特性的参数,以下程序可以获得一样的结果。x=linspace(-pi,pi,10);y=sin(x)subplot(1,2,1),h=

13、plot(x,y)%用系统内定的参数作图a=get(h)subplot(1,2,2),h=plot(x,y)b=get(h)act.LineStyle=-;%定义构架数组中线形的参数act.LineWidth=1;%定义构架数组中线宽的参数act.Marker=d;%定义构架数组中点型的参数set(h,act)set和get命令在作图,特别是以后介绍的界面设计中起着关键性的作用,在后面的部分还有介绍。进一步的学习可查阅help中的set和get的关键字。,3.3 数据二维作图和图形编辑,3.3.1 二维作图 表列出了作图的大概步骤,【例3.3.1】以我国国民生产总值的数据为例,进行作图和拟合研

14、究,首先作出数据的图形,然后我们进行拟合的各种实验,从中找出满意的结果。A=load(e:datazggdp.txt)%定义n行两列的时间序列数组x=A(:,1)%将时间定义为数组xy=A(:,2)%将gdp(国民生产总值)定义为yplot(x,y,r*)%将数据点用红色,*形绘制图形结果我们可以看界面图,打开界面菜单Tools,并点击Basic Fitting 我们就可以看到以下界面。见图,在Basic Fitting栏下我们可以选择各种拟合方法,选择线性linear和7阶多项式进行拟合。对作残差图Plot residuals进行勾选,表示要做残差分析。我们可以明显地看出7阶多项式拟合明显好

15、与线性拟合。在第二张图形上显示了两种拟合的残差,残差图更证明了我们的判断。见图,二维图形的编辑与完善 另一方法是直接在图形窗口上对图形进行编辑。一、用图形修饰命令对图形进行编辑用命令来完整地修饰图形,事实上是编一套程序,其具体格式为:作图命令(数据,子命令,子命令,子命令)修饰命令1修饰命令2 修饰命令n以下将二维作图的曲线线型选择和颜色选择命令罗列为表,点的颜色、点边界的颜色、点的大小设置等见表3.3.3,点型的选择见表,图形标注辅助修饰命令与图形子命令不同,它不在图形命令内,而是作为独立的命令紧跟在图形命令后面。主要的图形辅助修饰命令见表,【例3.3.2】利用上面的修饰命令作一个完的整修饰

16、图形,图形标题为“我的完善图”。x=-pi:pi/10:pi;y=tan(sin(x)-sin(tan(x);%准备数据%作曲线图,曲线设为虚线,线宽为2,红颜色。点的边界为黑色,点面色为绿色,%点的大小设为10。plot(x,y,-rs,LineWidth,2,.MarkerEdgeColor,k,.MarkerFaceColor,g,.MarkerSize,10);legend(tan(sin(x)-sin(tan(x),1)%在图内标注公式xlabel(时间)%坐标x标为时间ylabel(函数)%坐标y标为函数 title(我的完善图)%图形标题注为“我的完善图”,clf;t=0:pi/

17、50:2*pi;y=sin(t);plot(t,y);axis(0,2*pi,-1.2,1.2)text(pi/2,1,fontsize16leftarrowitsin(t)fontname隶书极大值),二、在窗口界面上对图形进行直接修饰 利用命令进行修饰的大部分功能可以更方便、更直观地利用窗口编辑功能进行。免去了编程步骤。我们以下面的例子来说明。,【例3.3.4】用窗口编辑功能对图形进行修饰。首先仅将图形简单绘出。t=0:pi/50:2*pi;y=sin(t);plot(t,y),进入编辑状态,对图形加文字,在图形中加箭头,在编辑状态下我们选定曲线,即用鼠标单击曲线的任何部位,这时我们可以看

18、见该曲线对象变为当前状态。见图,双击该曲线,我们就可以看到设置曲线的界面,如图,在这里我们可以设置曲线的类型如实线、各类虚线,线宽,颜色等,还可以设置点的类型、大小、边界颜色和点的颜色等等。现在我们来设置一下,同时加入一些注释,其效果图见图,3.4 数据三维图形绘制和各种修饰,三维图形为立体图形,和二维图形有了本质的不同。(1)三维图形有了视角的概念,不同的视角对于同一物体会产生不同的视觉效果,因此必须有刻画视角的view修饰命令。(2)光线的照射角度也会对物体的视觉效果产生影响,因此必须有刻画光线照射角度的命令。(3)颜色的设置也会对视觉产生影响,因此要有刻画颜色的命令。(4)对于一个空间的

19、物体,我们不但需要从外观上了解它的性状,同时需要对它的横截面进行了解。例如利用磁共振方法我们可以得到人的大脑的数据,我们可以利用解剖图来检查脑部是否有病变,因此我们还需要有能够进行切片的命令slice来描述这样的情况。MATLAB为我们提供了丰富的立体修饰命令,因此三维作图的内容多也较二维图形复杂的多。,3.4.1 三维图形的绘制,MATLAB为我们提供了各种三维数据的曲面作图命令,它们可以作空间的曲线、空间的曲面、等高线图、各种方向上的投影图、空间的散点图等等。这些命令都是高端命令,既可以根据数据矩阵作图,又可以根据函数进行作图。现将主要命令列表如下:,尽管三维图形的修饰命令比较多,然而其基

20、本步骤和二维图形还是差不多的。表列出了三维作图的基本步骤。,MATLAB中提供了很多实际例子的数据,这些例子都是广泛流行的教材中的实例,为我们理解和学习提供了方便。如美国人口从1900年到1970的普查数据,peaks(峰函数数据)、wind(风向数据)、mri(脑部磁共振数据)等。下面我们来看一些实例。,【例3.4.1】利用plot3命令,对极坐标三维数据作空间曲线图。t=0:pi/50:10*pi;plot3(t.*sin(t),t.*cos(t),t,LineWidth,2)%作空间曲线图,线宽为2axis square;grid on%x,y,x坐标的比例是相等的,peaks是MATL

21、AB提供的一个产生peaks函数数据的命令,它可以根据用户的要求产生peaks数据点的稀密程度,从而产生精确度不同视觉效果的图形。【例3.4.2】利用MATLAB给定的数据矩阵peaks作立体图。X,Y,Z=peaks(50);%用peaks函数产生5050的X-Y面上的点,并计算Zsurfc(X,Y,Z)%用数据X,Y,Z产生曲面图形和等高线图colormap hsv%对图形着色 axis(-3 3-3 3-10 5)%给出作图的坐标范围,注意,有关图形的其他修饰上面的程序没有写出,如图形的视角、光线的设置、曲面表面的性质、曲面的材质等等,这时计算机对这些对象有一个系统内定值或者称为缺省。,

22、【例3.4.3】人体头部磁共振数据mri为MATLAB提供的案例数据,它是大脑内部结构的影像数据。数据结构为四维(128128127)数组,其中最后的维数是按z轴对脑部切片的27幅横截面映像图。我们可以从各个角度、内部和外部来窥视这批数据。本例只是观看该多维数据的外表,并显示对数据的平滑和光线的处理并作图。load mri%读入脑磁共振数据并放如数组D中D=squeeze(D);%抽去D中第三维,数据变为立体数据(12812827)Ds=smooth3(D);%对数据进行平滑处理hcap=patch(isocaps(D,5),.%对脑上部用一片横截面盖住,对颜色进行插值平滑。FaceColor

23、,interp,.EdgeColor,none);hiso=patch(isosurface(Ds,5),.%对脑周围数据建立外表面,并着色。FaceColor,1,.75,.65,.EdgeColor,none);view(45,30)%建立视角axis tight%设置坐标为紧凑参数值daspect(1,1,.4)%对坐标设置适当的比率lightangle(45,30);%定义光源的角度set(gcf,Renderer,zbuffer);lighting phong%对当前图形句柄进行设置isonormals(Ds,hiso)%计算数据边缘的模 set(hcap,AmbientStreng

24、th,.6)%设置头顶部参数set(hiso,SpecularColorReflectance,0,SpecularExponent,50);%设置表面的参数,3.4.2 图形颜色命令colormap,现在我们开始学习图形修饰命令,三维图形修饰命令十分丰富,包括对图形上色、设置图形的视角、对图形进行平滑处理、设置图形目标的材质等等。我们面对的是一个平面的屏幕,何以能显示一个立体的图形呢?例如我们在纸上画一个球。首先用圆规画一个圆,然后根据光学和透视原理在圆中画上深浅不同的色彩,这时我们就可以在平面的纸上看出一个逼真的球形了。同样的道理,计算机显示一个立体物,除了给定的数据点组成的图形框架外,还

25、对每一数据点映射一个颜色,或者说在作图时每个数据矩阵对应一个颜色矩阵,我们就可以作出形象逼真的立体彩色图形了。颜色矩阵是3列n行的,它对应n个数据点。colormap就是对数据点加载某种颜色矩阵的函数,其示意图如下:,数据矩阵DM 颜色矩阵CM,colormap(CM),这里,颜色矩阵的元素为界于0和1之间的实数,因此颜色矩阵CM的每一行都是由红、绿、蓝调成的某种颜色。例如:表列出了部分颜色数据的调色结果。,【例3.4.4】利用colormap命令选择颜色趋势。读入液体流出的数据(1)取灰色load flujetimage(X)colormap(gray),(2)colormap选择参数为je

26、tload flujetimage(X)colormap(jet),3.4.3 图形的视角选择view,图形的视角可以很好地刻画从某个位置观察一个立体的图形,我们知道从不同的角度看立体物体可以得到不同的图形感观,这个视角命令为view。而视角还包括观察距离的远近,这个命令为zoom。从不同的视角观察物体,我们的视角事实上只要两个参数,即水平旋转角和升降旋转角。因此视角的一般形式为:view(az,el)view(az,el)view(x,y,z)这里az为azimuth水平旋转角度,el为elevation上下旋转角度,而view(x,y,z)为在向量方向(x,y,z)上的视角。我们来看以下示

27、意图。,【例3.4.5】当我们不使用view命令时,系统有一个内定的视角,即view(-37.5,30),本例给出四个不同的角度的图形。X,Y=meshgrid(-2:.25:2);Z=X.*exp(-X.2-Y.2);subplot(2,2,1),surf(X,Y,Z),title(系统缺省视角)subplot(2,2,2),surf(X,Y,Z),view(180,0),title(180,0)视角)subplot(2,2,3),surf(X,Y,Z),view(-37.5,-30),title(-37.5,-30)视角)subplot(2,2,4),surf(X,Y,Z),view(0,

28、90),title(0,90)视角),3.4.4 光线对立体的影响 我们都知道光线对三维图形有影响,如一个球正对光线的部分发亮,而背光处则发暗。对光的反映还根据物体的材料不同而有不同,例如强光照在一个网球上没有非常强烈的反光,而如果强光照在一个抛光的金属球上则有非常强烈的反光。所有这些现象在MATLAB中都可以模拟,既有各种光线强度、位置的命令,也有物体材质的刻画命令。,创建光线对象命令light,light命令的语法为:light(PropertyName,PropertyValue,.)这里特性PropertyName 可以为:Color 光源的颜色 颜色的值可以用数组a,b,c,元素均为

29、小于等于1,大于等于0的数,也可以用y,r,分别表示黄,红等来表示。,Style 光源的距离类型,即是无限远还是某距离的光源 infinite|localPosition 光源的方位,某个角度 用a,b,c表示光源的方位,系统内定为1,0,1创建材质对象的命令为material,其语法为:material shiny 抛光材质,即具有强烈的反光效应material dull 具有吸光效应的材质,反光度差 material metal 金属材质,具有反光效应利用参数ka,kd,ks自定义反光效果的命令为:material(ka kd ks)material(ka kd ks n)material

30、(ka kd ks n sc),【例3.4.6】作四个球,显示材质的不同,对光线的反映不同cc=0,1,0;p=30subplot(2,2,1);%作第一幅子图,完全按系统内定的参数sphere(p);%利用sphere函数产生圆球数据title(material default)subplot(2,2,2)%作第二幅子图sphere(p);,shading interp%对阴影进行插值平滑处理 set(gcf,Renderer,zbuffer)%对图形句柄进行设置set(findobj(gca,type,surface),.%对图形对象进行表面处理,如光线等 FaceLighting,pho

31、ng,.AmbientStrength,.3,DiffuseStrength,.8,.SpecularStrength,.9,SpecularExponent,25,.BackFaceLighting,unlit)light(Position,0-2 1,color,cc)%设置光源位置material dull%设置图形对象的材质为吸收型材质title(material dull)subplot(2,2,3)sphere(p);shading interp set(gcf,Renderer,zbuffer)set(findobj(gca,type,surface),.FaceLighting

32、,phong,.AmbientStrength,.3,DiffuseStrength,.8,.SpecularStrength,.9,SpecularExponent,25,.BackFaceLighting,unlit)light(Position,0-2 1,color,cc)material shinytitle(material shiny),subplot(2,2,4)sphere(p);shading interp set(gcf,Renderer,zbuffer)set(findobj(gca,type,surface),.FaceLighting,phong,.AmbientS

33、trength,.3,DiffuseStrength,.8,.SpecularStrength,.9,SpecularExponent,25,.BackFaceLighting,unlit)light(Position,0-2 1,color,cc)material metaltitle(material metal)colormap(jet),3.4.5 透视效果函数,我们可以利用透明函数对立体对象进行透明处理。透明处理的对象为物体表面、图像、边缘等。透明函数为alpha(p),这里p取(0,1)之间的实数,当取0时图形对象完全透明,而取1时则完全不透明。【例3.4.7】对射流表面进行透明处

34、理,射流数据为flow。计算结果见图x y z v=flow;subplot(1,2,1);p=patch(isosurface(x,y,z,v,-3);isonormals(x,y,z,v,p);set(p,facecolor,red,edgecolor,none);daspect(1 1 1);view(3);axis tight;grid on;camlight;lighting gouraud;title(系统内定值,不透明)subplot(1,2,2);p=patch(isosurface(x,y,z,v,-3);isonormals(x,y,z,v,p);set(p,facecol

35、or,red,edgecolor,none);daspect(1 1 1);view(3);axis tight;grid on;camlight;lighting gouraud;alpha(.4);title(透明度为0.4),3.4.6 立体图形的切片处理 在科学研究中我们常常将物体进行切片处理,观察物体内部的结构。典型的有对人体的磁共振获得人体某部位的立体数据,然后进行截取某截面进行深入研究。或将人体组织进行冷冻,然后进行病理切片进行病理研究。2001年全国大学生数学建模竞赛就是有关切片问题的例子。MATLAB提供了各种命令可以对立体进行切片处理。切片命令的语法为:,slice(V,s

36、x,sy,sz)slice(X,Y,Z,V,sx,sy,sz)slice(V,XI,YI,ZI)slice(X,Y,Z,V,XI,YI,ZI)slice(.,method)h=slice(.)slice命令可以分别按x,y,z方向进行切片这里。V:是立体数据sx,sy,sz:为数据点或向量,分别在三个轴上按向量给定的点作切面。,对slice产生的切片作旋转处理,rotate命令可以对切片进行任意角度的旋转。rotate的语法为:rotate(h,direction,alpha)rotate(.,origin)这里h:为由slice建立的切片direction:为二维或三维显示方向的数组alph

37、a:对给定的方向按右手准则旋转的角度,【例5.4.8】仍然是对射流数据进行处理,现在我们对它进行切片处理,并从不同的角度来看切片的图像。结果见图x,y,z,v=flow;ax=-38.5,16;0,45%建立视角数据for m=1:2%建立切片大小xmin=min(x(:);ymin=min(y(:);zmin=min(z(:);xmax=max(x(:);ymax=max(y(:);zmax=max(z(:);%同时作两幅不同方向的切片图subplot(1,2,m)hslice=surf(linspace(xmin,xmax,100),.linspace(ymin,ymax,100),.ze

38、ros(100);%建立切片rotate(hslice,-2,0,0,-45)%旋转切片45度,形成新的切片。%获取新切片的数据xd=get(hslice,XData);yd=get(hslice,YData);zd=get(hslice,ZData);delete(hslice)%将原切片删除%对切片上色、插值加密等附加修饰h=slice(x,y,z,v,xd,yd,zd);set(h,FaceColor,interp,EdgeColor,none,DiffuseStrength,.8),daspect(1,1,1)axis tightbox offview(ax(m,:)camzoom(1

39、.4)camproj perspectivelightangle(-45,45)colormap(jet(24)set(gcf,Renderer,zbuffer)end 图 3.4.10,【例3.4.9】本例为2001全国大学生数学建模竞赛A题,题例见第十章。再现血管的原状并切片,进行比较来验证恢复的正确性。图为血管的再现图,图为切片比较图。flops(0);tic load(f:cmcmtuResult)%读取数据,中轴线上100点的坐标,半径imgnumber=100R=sum(Result(:,1)/imgnumber;%Result(:,2:3)=Result(:,2:3)z=1:im

40、gnumber;Poly_zx=polyfit(z,Result(z,2),6);Poly_zy=polyfit(z,Result(z,3),6);x=polyval(Poly_zx,z);y=polyval(Poly_zy,z);%用多项式拟合中轴方程并在上面取100个点%作三维图for k=1:imgnumber X,Y,Z=ellipsoid(x(k),y(k),z(k),R,R,R,10);h=surf(X,Y,Z);set(h,FaceColor,interp,.EdgeColor,none,.DiffuseStrength,.8)hold onend,hold onalpha(0.

41、2)hslice=surf(linspace(0,512,100),.linspace(0,512,100),.zeros(100)+30)%建立切片colormap(jet(24)delete(h),图是由给定的100个等距离横截面图像,计算出血管的中轴线方程。然后在计算机上进行血管的原样恢复。为验证恢复的正确性,我们可以对血管进行切片并跟原截面进行比较。图为切片示意图,为说明问题对血管进行了透明处理。,事实上我们对100片截面进行了比较,这里仅取5、40、70、90四幅图像的比较图,在图中,左上图为第5个截面与复原血管切片的图形,我们可以看出拟合的很好。右上的小图为第40幅截面与复原血管切

42、片的图形,左下图为第70幅截面与复原血管切片的图形,而右下图为第90幅截面与复原血管切片的图形。我们可以看到第90幅图像拟合的不好,这是因为复原的血管末端没有延伸出去。如果再近一步进行处理,如对血管进行外延,则结果会大大地改善。,3.5 多子图绘图MATLAB为我们提供了多图共显的功能,这为我们进行比较研究提供了方便。前面我们已经大量使用了多图共显的图形。例如图,同时显示四幅截面拟合图形,比较好地说明了血管恢复的整体情况。多子图绘图的基本命令为:subplot(m,n,k)表示在mn个图形中的第k个子图。subplot(position,)在指定的位置上作子图。,【例3.5.1】演示subpl

43、ot指令对图形窗的分割。clc;t=(pi*(0:1000)/1000);y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);subplot(2,2,1),plot(t,y1);axis(0,pi,-1,1)subplot(2,2,2),plot(t,y2);axis(0,pi,-1,1)subplot(position,0.2,0.05,0.6,0.45)plot(t,y12,b-,t,y1,-y1,r:);axis(0,pi,-1,1)计算结果见图,【例3.4.2】在人口预测的例子中,我们作出6子个图形。,3.6 特殊三维作图,有时在作立体图时我们需要

44、挖去其中的某一部分或裁减某一部分,这时我们可以利用“非数”方法进行处理,从而获得挖去图形一块的效果。3.6.1 图形的镂空【例3.6.1】利用“非数”NaN,对图形的第三部分进行剪切处理。clf;t=linspace(0,2*pi,100);r=1-exp(-t/2).*cos(4*t);%旋转母线X,Y,Z=cylinder(r,60);%产生旋转柱面数据ii=find(X0colormap(spring),shading interplight(position,-3,-1,3,style,local)%设置光源material(0.5,0.4,0.3,10,0.3)%设置表面反射,【例3

45、.6.2】演示:如何利用“非数”NaN,对图形进行镂空处理。P=peaks(30);P(18:20,9:15)=NaN;%镂空surfc(P);colormap(summer)light(position,50,-10,5),lighting flatmaterial(0.9,0.9,0.6,15,0.4),3.6.2 裁切【例3.6.3】将单位球x-y平面绝对值大于0.5的部分图形只置为0。X,Y,Z=sphere(100)ii=find(abs(X).5|abs(Y).5);%找x-y平面的带形部分Z(ii)=zeros(size(ii);%强制为0surf(X,Y,Z)shading i

46、nterp;colormap(hsv)%对阴影进行平滑插值并置色light(position,0,-15,1);lighting phong%设置光线material(0.8,0.8,0.5,10,0.5)%设置材质,3.7 统计图形的作图,在图形中另一类经常使用的图形是统计图形,统计模型在数学建模中所占比例不断加大。统计图形包括直方图、条形图、饼形图等等十分丰富。这里仅做简单介绍,我们将在统计工具箱中作详细介绍。3.7.1 方差分析图 方差分析是对给定的样本推断样本是否来自一个总体,这仅介绍单因素方差分析的图表,它可以对方差分析表进行更直观的说明。结果是非常显著的不同。【例3.7.1】Hog

47、g 和 Ledolter(1987)对来自五个不同地方牛奶细菌的含量进行了研究,目的是研究不同地方牛奶的细菌含量是否有显著的差异。load hogg%调出hogg数据hoggp,tbl,stats=anova1(hogg);%产生方差分析表和图形p%显示显著性水平,hogg=24 14 11 7 19 15 7 9 7 24 21 12 7 4 19 27 17 13 7 15 33 14 12 12 10 23 16 18 18 20p=1.1971e-004,3.7.2 正态分布检验图、经验分布图检验一组随机样本是否为正态分布是统计分析中经常要使用的方法,用正态分布检验图可以直观地看出一组

48、随机数是否为正态分布。【例3.7.2】用正态分布随机数发生器产生20个随机数,再用卡方分布随机数发生器产生20个随机数,用正态分布检验图来判断那个是正态分布随机数。x=normrnd(2,1,20,1);%产生20个均值为2的正态分布随机数y=chi2rnd(2,20,1)%产生20个均值为2的卡方分布随机数subplot(1,2,1),normplot(x)%作正态分布检验图subplot(1,2,2),normplot(y);%作正态分布检验图,可以看出在红线附近的是服从正态分布的样本,而第二幅图明显不服从正态分布。【例3.7.3】对样本作经验分布图,然后进行拟合优度检验也是常用的统计方法

49、,以下作样本的经验分布图。,x=normrnd(2,1,500,1)y=weibrnd(2,1,500,1);subplot(1,2,1),cdfplot(x),title(正态经验分布图CDF)subplot(1,2,2),cdfplot(y),title(威布尔经验分布图CDF),3.7.3 直方图、饼形图 直方图是常用的统计图形之一,可以直观显示各种数据。【例3.7.4】在生物化学领的实验中,往往在一个自变量中有两个因变量。我们想把这两个因变量画在一起,并且其中一个是条形图,一个是曲线图。,TCE=515 420 370 250 135 120 60 20;temp=29 23 27 2

50、5 20 23 23 27;days=0:5:35;%先作条型图,横坐标为天数,纵坐标为温度。bar(days,temp,c),xlabel(天数),ylabel(温度(oC)%现在加一条化学元素浓度曲线h1=gca;h2=axes(Position,get(h1,Position);%建立第二条纵坐标plot(days,TCE,LineWidth,3)%作曲线图%将第二个图形固定在正确的位置set(h2,YAxisLocation,right,Color,none,XTickLabel,)set(h2,XLim,get(h1,XLim),Layer,top)text(11,380,化学元素浓

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号