第三章-Matlab图形绘制_第1页
第三章-Matlab图形绘制_第2页
第三章-Matlab图形绘制_第3页
第三章-Matlab图形绘制_第4页
第三章-Matlab图形绘制_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

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

文档简介

Matlab图形绘制一、二维曲线的绘制绘制二维图形最常用的函数是plot,调用格式有以下四种:plot(Y)如果Y为实向量,则以Y的索引坐标作为横坐标,以Y本身的元素作为纵坐标。如果Y为复数向量,则以该向量实部为横坐标,虚部为纵坐标。plot(X,Y)此时以X为横坐标,Y为纵坐标。X和Y要求维数必须相同。当变量X和Y是同阶矩阵时,将按照矩阵的行或列进行操作。plot(X,Y,s)第三个变量用于设置图形显示属性。设置图形的线型、颜色、标记等。plot(X1,Y1,s1,X2,Y2,s2,…..)每三项为一组绘制多条曲线。y=rand(100,1);plot(y)x=rand(100,1);z=x+y.*i;plot(z)示例:例子:多条曲线绘制t=0:0.1:2*pi;y=[sin(t);cos(t)];plot(t,y)(5)在MATLAB中绘图时,当线条多于一条时,若用户没有指定各线条的颜色时,MATLAB会自动以不同的颜色区分不同的线条,可以查看默认的颜色顺序:其颜色分别是:蓝色、深绿色、红色、浅橄榄绿色、紫红色、土黄色或灰色。注意:当指定了数据点标志类型,但不指定线型时,则表示只标记数据点,而不进行连线绘图。

x=linspace(0,2*pi,1000);y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2)二、图形处理坐标轴的控制Grid命令Box命令图形数据取点图形保持Hold特殊坐标系的图形函数在基本的绘图函数使用时,它们的坐标轴刻度均为线性刻度。但是当实际的数据出现指数变化时,指数变化就不能直观的从图形上体现出来。又假如当函数以极坐标等表示时,我们就不能用线性刻度来表示。为了解决这些问题,matlab提供了相应的绘图函数。这里所谓的特殊坐标系是区别于均匀直角坐标系而言,具体来说就是对数坐标系、极坐标系、柱坐标和球坐标等。对数坐标系MATLAB语言提供了绘制不同形式的对数坐标曲线的功能,具体实现该功能的函数是semilogx、semilogy

loglog。semilogx(x轴对数刻度坐标图)用该函数绘制图形时x轴采用对数坐标。

semilogx(y):对x轴的刻度求常用对数(以10为底),而y为线性刻度。对数坐标系>>x=0.001:0.01*pi:2*pi;>>y=log10(x);>>semilogx(x,y,'-*');(x轴对数刻度坐标图)>>plot(x,y)(均匀直角坐标系)对数坐标系

Semilogx绘制的y=log10(x)plot绘制的y=log10(x)

如图所示,x=(0.001~2Π)以0.01Π为间隔。semilogx函数中x轴的相邻坐标值之间的刻度是不等距的,它是是按照相等的指数变化来增加的

。而plot函数中的相邻坐标值之间的刻度是等距的。对数坐标系semilogy(y轴对数刻度坐标图)用该函数绘制图形时y轴采用对数坐标。调用格式与semilogx基本相同。>>x=0.001:0.1*pi:2*pi;>>y=10.^x;>>semilogy(x,y,'-*')>>plot(x,y)semilogy函数plot函数对数坐标系loglog

用该函数绘制图形时x和y轴均采用对数坐标。调用格式与semilogx基本相同。>>m=1:1*pi:20*pi;>>x=10.^m;>>y=log10(m);>>loglog(x,y,'-*');>>plot(x,y,'-*')loglog函数plot函数极坐标系polar命令该命令用于画极坐标图,它接受极坐标形式的函数rho=f(θ)。

polar的调用格式:

polar(theta,rho,LineSpec)

用极角theta和极径rho画出极坐标图形。极角theta为从x轴到半径的单位为弧度的向量,极径rho为各数据点到极点的半径向量,LineSpec指定极坐标图中线条的线型、标记符号和颜色等。

极坐标系>>rho0=1;theta=0:pi/20:4*pi;rho=rho0+theta*rho0;polar(theta,rho,'r')polar的调用格式:

polar(theta,rho)用极角theta和极径rho画出极坐标图形。极角theta为从x轴到半径的单位为弧度的向量,极径rho为各数据点到极点的半径向量。Matlab实现频数直方图----hist的使用

“hist”是“Histogram”(直方图、柱状图)的简称。

1、N=hist(Y)功能:将向量Y的元素平均到十个等间隔的容器中,并且返回每个容器的元素个数;如果Y是一个矩阵,hist指令逐列元素操作。例1:执行指令Y=[1:10];Hist(Y)得到:10个蓝色方条,每个方条对应一个容器,其长度代表容器中数据的多少。由图知,容器中的数据量均为1。例2:执行指令Y=[1,2,2,5,6,6,8,11]Hist(Y)得到:長條圖之繪製Bar(y)为。範例5-1:bar01.m x=[13452]; bar(x);Fig.5-15-1長條圖之繪製(cont.)bar指令也可接受矩陣輸入,它會將同一橫列的資料聚集在一起。範例5-2:bar02.mx=[23457;12321];bar(x);Fig.5-25-1長條圖之繪製(cont.)bar及barh指令還有一項特異功能,就是可以將同一橫列的資料以堆疊(Stack)方式來顯示。範例5-3:bar03.mx=[23457;12321];bar(x,'stack')Fig.5-35-1長條圖之繪製(cont.)除了平面長條圖之外,MATLAB亦可使用bar3指令來畫出立體長條圖。範例5-4:bar04.m x=[23457;12321]; bar3(x)Fig.5-45-1長條圖之繪製(cont.)bar3指令還可以使用群組(Group)方式來呈現長條圖範例5-5:bar05.m x=[23457;12321]; bar3(x,'group')Fig.5-55-1長條圖之繪製(cont.)長條圖的指令和類別:垂直長條圖水平長條圖平面barbarh立體bar3bar3h5-1長條圖之繪製(cont.)若要指定長條圖的x座標,可使用兩個輸入向量給bar指令。假設新竹的月平均溫度如下:範例5-6:bar06.mx=1:6; %月份 y=35*rand(1,6); %溫度值(假設是介於0~35的亂數)bar(x,y); xlabel('月份'); %x軸的說明文字ylabel('平均溫度(^{o}c)'); %y軸的說明文字%下列指令將x軸的數字改成月數set(gca,'xticklabel',{'一月','二月','三月','四月','五月','六月'});5-1長條圖之繪製(cont.)Fig.5-65-2面積圖之繪製面積圖(AreaGraphs)和以堆疊方式呈現的長條圖很類似,特別適用於具有疊加關係的資料。舉例來說,若要顯示清華大學在過去10年來的人數(含大學部,研究生,及教職員)變化情況,可用面積圖顯示。範例5-7:area01.m y=rand(10,3)*100; x=1:10; area(x,y); xlabel('Year'); ylabel('Count')Fig.5-75-3扇形圖之繪製使用pie指令,可畫出平面扇形圖(PieCharts),並可加上說明。範例5-8:pie01.m x=[2354]; label={'東','南','西','北'}; pie(x,label);Fig.5-85-3扇形圖之繪製(cont.)pie指令直接將x元素視為面積百分比,因此可畫出不完全的扇形圖。範例5-9:pie02.m x=[0.21,0.14,0.38]; pie(x);Fig.5-95-3扇形圖之繪製(cont.)pie指令還有一特異功能,可將某個或數個扇形圖向外拖出,以強調部份資料。範例5-10:pie03.m x=[2354]; explode=[1100]; pie(x,explode);Fig.5-10其中指令explode中非零的元素即代表要向外拖出的扇形。5-3扇形圖之繪製(cont.)欲畫出立體扇形圖,可用pie3指令。範例5-11:pie301.m x=[2354]; explode=[1100]; label={'春','夏','秋','冬'}; pie3(x,explode,label);Fig.5-115-4針頭圖之繪製顧名思義,針頭圖(StemPlots)就是以一個大頭針來表示某一點資料,其指令為stem。範例5-12:stem01.m t=0:0.2:4*pi; y=cos(t).*exp(-t/5); stem(t,y)Fig.5-125-4針頭圖之繪製(cont.)針頭圖特別適用於表示「數位訊號處理」(DSP,DigitalSignalProcessing)中的數位訊號。若要畫出實心的針頭圖,可加“fill”選項。範例5-13:stem02.m t=0:0.2:4*pi; y=cos(t).*exp(-t/5); stem(t,y,'fill');Fig.5-135-4針頭圖之繪製(cont.)欲畫出立體的針頭圖, 可用stem3指令。範例5-14:stem301.m theta=-pi:0.05:pi; x=cos(theta); y=sin(theta); z=abs(cos(3*theta)).*exp(-abs(theta/3)); stem3(x,y,z);Fig.5-145-5階梯圖之繪製使用stairs指令,可畫出階梯圖(StairstepPlots),其精神和針頭圖很相近,只是將目前資料點的高度向右水平畫至下一點為止。(在數位訊號處理,此種作法稱為Zero-orderHold。)範例5-15:stairs01.m t=0:0.4:4*pi; y=cos(t).*exp(-t/5); stairs(t,y);Fig.5-155-5階梯圖之繪製(cont.)若再加上針頭圖,則可見兩 者相似之處。範例5-16:stairs02.m t=0:0.4:4*pi; y=cos(t).*exp(-t/5); stairs(t,y); holdon %保留舊圖形 stem(t,y); %疊上針頭圖 holdoffFig.5-165-6實心圖之繪製MATLAB指令fill將資料點視為多邊形頂點,並將此多邊形塗上顏色,呈現出實心圖(FilledPlots)的結果。範例5-17:fill01.m t=0:0.4:4*pi; y=sin(t).*exp(-t/5); fill(t,y,'b'); %'b'為藍色Fig.5-175-6實心圖之繪製(cont.)若與stem合用,則可創造出 一些不同的視覺效果。範例5-18:fill02.m t=0:0.4:4*pi; y=sin(t).*exp(-t/5); fill(t,y,'y'); %'y'為黃色 holdon %保留舊圖形 stem(t,y,'b'); %疊上藍色針頭圖 holdoffFig.5-185-6實心圖之繪製(cont.)fill3可用於三維的實心圖。範例5-19:fill301.m X=[0011]; Y=[0110]; Z=[0110]; C=[00.30.60.9]'; fill3(X,Y,Z,C);Fig.5-195-6實心圖之繪製(cont.)使用fill3指令,我們亦可以 畫出各種酷酷的圖形。範例5-20:fill302.m t=(1/16:1/8:1)'*2*pi; x=sin(t); y=cos(t); c=linspace(0,1,length(t)); fill3(x,y/sqrt(2),y/sqrt(2),c,x/sqrt(2),y,x/sqrt(2),c); axistightFig.5-205-7向量場圖之繪製使用quiver指令可畫出平面 上的向量場圖(QuiverPlots) ,特別適用於表示分布於平面 的向量場(VectorFields), 例如平面上的電場分布,或是流 速分布。範例5-21:quiver01.m [x,y,z]=peaks(20); [u,v]=gradient(z); contour(x,y,z,10); holdon,quiver(x,y,u,v);holdoff axisimageFig.5-215-7向量場圖之繪製(cont.)欲畫出空間中的向量場圖, 可用quiver3指令。範例5-22:quiver301.m [x,y]=meshgrid(-2:0.2:2,-1:0.1:1); z=x.*exp(-x.^2-y.^2); [u,v,w]=surfnorm(x,y,z); quiver3(x,y,z,u,v,w); holdon,surf(x,y,z);holdoff axisequalFig.5-225-8等高線圖之繪製我們可用contour指令來畫出「等高線圖」(ContourPlots)。範例5-23:contour01.m z=peaks; contour(z,30); %畫出30條等高線Fig.5-235-8等高線圖之繪製(cont.)若要畫出特定高度的等高線,可執行如下:範例5-24:contour02.m z=peaks; contour(z,[025]);Fig.5-245-8等高線圖之繪製(cont.)欲標明等高線的高度, 可用clabel指令。範例5-25:contour03.m z=peaks; [c,handle]=contour(z,10); clabel(c,handle);Fig.5-255-8等高線圖之繪製(cont.)若欲在等高線之間填入顏色,可用contourf 指令。範例5-26:contour04.m z=peaks; contourf(z);Fig.5-265-8等高線圖之繪製(cont.)若要使畫出的等高線對 應至正確的x及y 座標,則可執行如下:範例5-27:contour05.m [x,y,z]=peaks; contour(x,y,z);%使用三個輸入Fig.5-275-8等高線圖之繪製(cont.)contourf亦可接受x、y、z輸入引數。若要將等高線畫在曲面的正下方,可用surfc或meshc指令。範例5-28:contour06.m [x,y,z]=peaks; meshc(x,y,z); axistightFig.5-285-8等高線圖之繪製(cont.)若要畫出三度空間中的等高線,可用contour3指令。範例5-29:contour301.m [x,y,z]=peaks; contour3(x,y,z,30); axistighFig.5-295-8等高線圖之繪製(cont.)使用contour指令亦可畫出極座標中的等高線,但過程較為複雜,以下列複數函數為例: 其中z代表複數平面中的任一點複數,如果我們要畫出此函數的等高線,可見下列範例:範例5-30:contour07.m t=linspace(0,2*pi,61); %角度的格子點 r=0:0.05:1; %長度的格子點 [tt,rr]=meshgrid(t,r); %產生二維的格子點 [xx,yy]=pol2cart(tt,rr); %將極座標轉換至直角座標 zz=xx+sqrt(-1)*yy; %複數表示 ff=abs(zz.^3-1); %曲面的函數 contour(xx,yy,ff,50); %畫出等高線 axisimage5-8等高線圖之繪製(cont.)Fig.5-305-8等高線圖之繪製(cont.)在上例中,座標的標示仍為直 角座標。欲將等高線顯示於極 座標上,需先用polar指令產 生一個極座標圖,再移除圖形 ,留下圖軸,然後再進行作圖 。範例5-31:contour08.m h=polar([02*pi],[01]); delete(h); holdon contour(x,y,abs(f),30); holdoff%產生在極座標上的一條直線%移除上述圖形,但留下極座標圖軸Fig.5-31*要注意的是,你必須先執行contour07.m,然後再執行contour08.m,才能得到上述的及座標等高線的效果。5-8等高線圖之繪製(cont.)我們也可以同時畫出複數函數的曲面和等高線圖,例如,下列範例可以畫出複數函數:範例5-32:contour09.m t=linspace(0,2*pi,61); %角度的格子點 r=0:0.05:1; %長度的格子點 [tt,rr]=meshgrid(t,r); %產生二維的格子點 [xx,yy]=pol2cart(tt,rr); %將極座標轉換至直角座標 zz=xx+sqrt(-1)*yy; %複數表示 ff=abs(zz.^3-1); %曲面的函數值 h=polar([02*pi],[01]); %產生在極座標上的一條直線 delete(h); %移除上述圖形,但留下極座標圖軸 holdon contour(xx,yy,ff,20); %等高線 surf(xx,yy,ff); %曲面圖 holdoff view(-19,22); %設定觀測角度5-8等高線圖之繪製(cont.)Fig.5-325-8等高線圖之繪製(cont.)指令說明bar,barh,bar3,bar3h長條圖Area面積圖pie,pie3扇形圖stem,stem3針頭圖stairs階梯圖fill,fill3實心圖quiver,quiver3向量場圖contour,contourf,contour3等高線圖特殊繪圖函數:5-9 其他進階繪圖功能MATLAB在5.3版後,開始支援「容積目視法」(VolumeVisualization)、因此能夠畫出在三度空間中的流線圖、向量場圖、等高面圖(Isosurfaces)、切面圖(Slices)等,相關指令可列表如下頁:5-9 其他進階繪圖功能(cont.)指令說明coneplot以圓錐瓶畫出三度空間的向量場圖contourslice在三度空間的切面上畫出等高線isosurface從容積資料中算出等高面資料isocaps計算等高面在端點切片的等高資訊isonormals計算等高面的法向量slice在三度空間的切片streamline從2–D或3–D的流線資料來畫出流線圖isocolors計算等高區面頂點的顏色(第六版才支援)divergence計算3-D向量場的亂度(Divergence)(第六版才支援)curl計算3-D向量場的curl及垂直方向的角速度(第六版才支援)※

MATLAB有關於「容積目視法」的指令:

5-9 其他進階繪圖功能(cont.)streamtube由向量資料畫出流線管(StreamTubes)(第六版才支援)streamribbon由向量資料畫出流線緞帶(StreamRibbons)(第六版才支援)streamslice由向量資料畫出間隔分明的流線(第六版才支援)streamparticles由向量資料畫出流線粒子(StreamParticles)(第六版才支援)interpstreamspeed由速度對流線頂點做內差(Interpolation)(第六版才支援)volumebounds傳回容積資料的座標及顏色極限值(第六版才支援)※

MATLAB有關於「容積目視法」的指令:

5-9 其他進階繪圖功能(cont.)這些指令的用法較為繁複,由於篇幅有限,在此不詳細說明,讀者可查閱相關的線上支援。若要一睹這些「容積目視」指令所能創造的繽紛效果,您可在MATLAB指令視窗下輸入「volvec」,以開啟展示視窗,在點選「Multiple」之後,產生圖形如右:②极坐标系函数polar,调用形式为:polar(theta,rho)或polar(theta,rho,s)③双纵坐标(双y轴坐标系)函数plotyy,调用形式为:plotyy(X1,Y1,X2,Y2)plotyy(X1,Y1,X2,Y2,fun)fun可以是plot、semilogx、semilogy或loglogplotyy(X1,Y1,X2,Y2,fun1,fun2)fun1绘制(X1,Y1),fun2绘制(X2,Y2)注:双坐标绘制图形的调用过程中,不能够像前面的plot函数那样对曲线属性进行设置,需要使用句柄图形控制完成。x=0:0.01:20;y1=200*exp(-0.05*x).*sin(x);y2=0.8*exp(-0.5*x).*sin(10*x);[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');AX是对应两个坐标轴的句柄,H1和H2分别是对应plot的句柄。(2)二维特殊函数图形函数名说明函数名说明函数名说明area填充绘图feather矢量图fplot函数图绘制bar条形图stem离散序列饼状图hist直方图barh水平条形图fill多边形填充paretoPareto图comet彗星图stairs阶梯图pie饼图errorbar误差带图contour等高线图plotmatrix分散矩阵绘制ezplot简单绘制函数图contourf填充的等高线图ribbon三维图的二维条状显示ezpolar简单绘制极坐标图scatter散射图Polar绘制极坐标示例:theta=linspace(0,2*pi);r=cos(2*theta);polar(theta,r)Hist用来显示资料的分段情况和统计特性,适合于大量数据的情况示例:x=randn(9999,1);hist(x,50)Rose与hist接近,将资料的大小视为角度,资料的个数作为距离,采用极坐标绘图。示例:x=randn(9999,1);rose(x,50)Bar函数适合于数据点不多时使用示例:x=1:15;y=rand(size(x));bar(x,y);如果已知数据的误差量,可用errorbar表示。示例:x=linspace(0,2*pi,20);y=sin(x);z=std(y)*ones(size(x));errorbar(x,y,z);fplot函数可以绘制较精确的图形,适合于变化剧烈的函数。示例:fplot(‘sin(1/x)’,[0.01,0.3])Stem产生针状图,常被用来绘制数位讯号。x=linspace(0,10,100);y=sin(x).*exp(-x/4);stem(x,y);Fill将资料点视为多边形顶点,并将此多边形涂上颜色。x=linspace(0,10,100);y=sin(x).*exp(-x/4);fill(x,y,’c’);Feather函数将每一个数据点视为复数,并以箭头画出。theta=linspace(0,2*pi,40);z=cos(theta)+i*sin(theta);feather(z);Compass函数与feather函数接近,只是每个箭头的起点都在圆内theta=linspace(0,2*pi,40);z=cos(theta)+i*sin(theta);compass(z);Quiver用来绘制向量场图。[x,y]=meshgrid(-2:0.2:2);z=x.*exp(-x.^2-y.^2);[Dx,Dy]=gradient(z,0.2,0.2);Contour(x,y,z);holdon;quiver(x,y,Dx,Dy);colormaphsv;holdoff3、显函数、隐函数和符号函数作图(1)fplot(fun,lims)绘制由字符串fun指定函数名的函数在x轴区间为lims=[xmin,xmax]的函数图。若lims=[xmin,xmax,ymin,ymax],则y轴也被限制。例题:解

1)首先用M文件fun1.m定义函数f(x)如下functiony=Afun1(x);ifx<1y=x+1;elsey=1+1./x;end在matlab命令窗口输入fplot('Afun1',[-3,3])就可画出函数f(x)的图形。2)这里也可以使用匿名函数,编写程序如下fun2=@(x)(x+1)*(x<1)+(1+1/x)*(x>=1);fplot(fun2,[-3,3])(2)ezplot(f)可用来绘制显函数、隐函数和参数方程的图形,x轴的默认范围为[-2pi,2pi]。1)对于显函数y=f(x),调用格式为:ezplot(f,[xmin,xmax])2)对于隐函数f(x,y)=0,调用格式为:ezplot(f,[xmin,xmax],[ymin,ymax])ezplot(f,[a,b]),x与y在(a,b)区间之内。3)对于参数方程x=x(t),y=y(t),调用格式为:ezplot(x,y)或者ezplot(f,[tmin,tmax])示例1:ezplot(‘x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)’,[-1010]);示例2:ezplot('cot(x)')示例3:ezplot('x^2+y^2/4=1')示例4:ezplot(‘x^2+y^2-1’,[-1,1],[-1,1])示例5:ezplot(‘x^3+y^3-5*x*y’)示例6:ezplot(‘2*cos(t)’,’sin(t)’,[0,2*pi]);3.2三维曲线的绘制绘制三维曲线的函数是plot3,与plot函数的调用格式相同,也有以下四种:plot3(x,y,z)plot3(X,Y,Z)X,Y,Z是相同阶数的矩阵,绘出三矩阵的列向量的曲线。plot3(X,Y,Z,s)plot3(x1,y1,z1,s1,x2,y2,z2,s2,....)组合图形以第二种形式为例:[x,y]=meshgrid(-2:0.1:2,-2:0.1:2);z=x.*exp(-x.^2-y.^2);plot3(x,y,z)函数名说明函数名说明mesh三维网格图meshc将网格与等高线结合meshz屏蔽的网格图meshgrid生成网格点MATLAB对于网格的处理方法是:将xy平面按指定方式分隔成平面网格,然后根据程序中给定的方式计算第三维变量的值,即z轴的值,与对应的xy平面的坐标构成三维点元素,根据由此得到的(x,z)和(y,z)计算各平面的曲线,彼此相连就构成了网格图。3.3三维网线图和曲面图的绘制(1)网线图mesh函数[X,Y]=meshgrid(x,y)x和y是给定的向量,可以定义网格的划分区域,也可以定义网格的划分方法,X和Y是网格划分后的数值矩阵。mesh(X,Y,Z,C)绘制四个矩阵变量的彩色网格面图形,观测点由view定义,坐标轴由axis定义,C设置颜色,由colormap实现。mesh(X,Y,Z)使用C=Z,即颜色正比于图高。mesh(x,y,Z,C)由两个向量代替矩阵,要求length(x)=n,length(y)=m,且[m,n]=size(Z)示例1:x=-2:0.1:2;y=-2:0.1:2;[xx,yy]=meshgrid(x,y);zz=xx.^2+yy.^2;%ii=find(xx.^2+yy.^2>4);zz(ii)=NaN;surf(xx,yy,zz);x=-10:0.5:10;y=-8:0.5:8;[x,y]=meshgrid(x,y);z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);mesh(x,y,z);示例2:(2)着色函数surfsurf(X,Y,Z,C)输入参数的设置和mesh相同,不同的是mesh绘制的是网格图,而surf绘制的着色的三维表面。两者对比如下图所示函数名说明函数名说明函数名说明bar3三维条形图surfc着色图+等高线comet3三维彗星图trisurf三角形表面图ezgraph3函数控制绘制图waterfall瀑布图pie3三维饼状图scatter3三维散射图cylinder柱面图stem3三维离散数据图sphere球面图trimesh三角形网格图(3)特殊的三维绘图命令(4)旋转曲面图cylinder[X,Y,Z]=cylinder(r)这里的r表示构成旋转曲面的曲线。方法一:

Matlab程序如下。x=0:10:600;[X,Y,Z]=cylinder(30*exp(-x/400).*sin((x+25*pi)/100)+130);surf(X,Y,Z)方法二:将旋转曲面用参数方程表示。

解因为这里的函数是隐函数,化成显函数后有两支,必须使用参数方程,旋转面的参数方程为画图的Matlab程序如下:alpha=[0:0.1:2*pi]';beta=0:0.1:2*pi;x=4*cos(alpha)*ones(size(beta));y=(5+4*sin(alpha))*cos(beta);z=(5+4*sin(alpha))*sin(beta);surf(x,y,z)画图的Matlab程序也可以写成x=@(alpha,beta)4*cos(alpha);y=@(alpha,beta)(5+4*sin(alpha))*cos(beta);z=@(alpha,beta)(5+4*sin(alpha))*sin(beta);ezsurf(x,y,z)(5)绘制柱面图柱面平行于某个坐标轴,方程中不出现某个坐标轴的变量,方程表示为F(x,y)=0或者F(x,z)=0或者F(y,z)=0示例一:画出方程

表示的柱面解:方程中的x是自变量矩阵,z是因变量,则另一个自变量矩阵为y,自变量平面是xoy面,x轴是真正的自变量,y轴是柱面方向。Matlab程序如下:u=linspace(-5,5,10)';%设定参数列向量uv=linspace(-5,10,10);%设定参数行向量vX=u*ones(size(v));%构成自变量矩阵XY=ones(size(u))*v;%构成自变量矩阵YZ=2-X.^2;%求因变量Zmesh(X,Y,Z)(6)其他二次曲面Matlab中使用绘图命令ezmesh或ezsurf也很方便,只需要把曲面方程写成两个变量的显函数方程或参数方程即可。对于旋转面,如果母线的方程可以表示成关于旋转轴变量的显式函数,则可以直接使用Matlab工具箱中的命令cylinder,否则必须把旋转面化成参数方程,然后使用ezmesh或ezsurf命令绘图。对于其它的二次曲面,如果可以写成显函数直接使用命令ezmesh或ezsurf,否则必须先化成参数方程。几个示例:(1)x=@(s,t)3*tan(s)*cos(t);y=@(s,t)2*tan(s)*sin(t);z=@(s,t)tan(s);ezsurf(x,y,z)(2)ellipsoid(0,0,0,3,2,sqrt(6))(3)ezsurf(@(x,y)x*y)(4)x=@(s,t)3*cos(s);y=@(s,t)2*sin(s);z=@(s,t)t;ezmesh(x,y,z)(7)Matlab三维散点插值曲面图的绘制1、scatter3函数,调用方法:scatter3(X,Y,Z)示例1:[x,y,z]=sphere(16);X=[x(:)*.5x(:)*.75x(:)];Y=[y(:)*.5y(:)*.75y(:)];Z=[z(:)*.5z(:)*.75z(:)];S=repmat([1.75.5]*10,numel(x),1);C=repmat([123],numel(x),1);scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'),view(-60,60)示例2:x=[4229042.63

4230585.02

4231384.96

4231773.63

4233028.58

4233296.71

4235869.68

4236288.29];

y=[431695.4

441585.8

432745.6436933.7

428734.4

431946.3428705.0

432999.5];

z=[1.0191.023

1.011

1.022

1.020

1.022

1.022

1.023];

scatter3(x,y,z)2、griddata函数,用来产生经插值后均匀间隔数据作图。常用的调用方法是:[XI,YI,ZI]=griddata(x,y,z,XI,YI,’method’),其中x,y,z来自关系式z=f(x,y),也可以是离散的数据点,ZI是有XI和YI插值后得到的对应点。其中method可以是linear,cubic和nearest。V1=[110;

-110;

-1-10;

1-10];x=V1(:,1);y=V1(:,2);z=V1(:,3);xmin=min(x);xmax=max(x);ymin=min(y);ymax=max(y);x0=linspace(xmin,xmax,20);y0=linspace(ymin,ymax,20);[x0,y0]=meshgrid(x0,y0);z0=griddata(x,y,z,x0,y0,'v4');figure;holdon;view(3);plot3(x,y,z,'r.','MarkerSize',20);plot3(x0,y0,z0,'k.');col=zeros(size(z0));col(:,end)=1;mesh(x0,y0,z0,col)示例1:x=10*(0.5-rand(1000,1));y=10*(0.5-rand(1000,1));z=sqrt(x.*x+y.*y).*(9.995+rand(1000,1)/100);clf;plot3(x,y,z,'rp','markerSize',4);holdon;[xx,yy]=meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y)));zz=griddata(x,y,z,xx,yy,'cubic');mesh(xx,yy,zz);shadinginterp;colormapgray;holdon;示例2:示例3:x=rand(100,1)*4-2;y=rand(100,1)*4-2;z=x.*exp(-x.^2-y.^2);ti=-2:.25:2;[xi,yi]=meshgrid(ti,ti);zi=griddata(x,y,z,xi,yi);mesh(xi,yi,zi),holdon,plot3(x,y,z,'o'),holdoff3、TriScatteredInterp函数,该函数可以看作是griddata的升级版,可以取代griddata对离散数据点进行插值。主要用于不规则数据点的插值。主要调用方法:F=TriScatteredInterp(x,y,z),相当于定义了一个关于x,y,z的插值函数。示例1:x=10*(0.5-rand(1000,1));y=10*(0.5-rand(1000,1));%生成随机数据z=sqrt(x.*x+y.*y).*(9.995+rand(1000,1)/100);clf;plot3(x,y,z,‘rp’,‘markerSize’,4);%绘制三维散点图holdon;F=TriScatteredInterp(x,y,z);%可以理解为定义了一个函数F(.)[xx,yy]=meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y)));zz=F(xx,yy);%把x,y的坐标输入其中,可以计算出插值的z维度数值mesh(xx,yy,zz);%然后可以采用常规的方法绘制曲面shadinginterp;colormapgray;holdon;注:1、对F还可以设置方法F.method=‘nature’/’linear’/’nearest’,前两个针对连续曲线。2、类似的一些地形图的绘制也是通过这种插值的方法进行绘制。示例2:z=x.^2+y.^2;F=TriScatteredInterp(x,y,z);[xi,yi]=meshgrid(-0.3:.02:0.3,-0.0688:0.01:0.0688);zi=F(xi,yi);mesh(xi,yi,zi)xlabel('Interpolatedsurface','fontweight','b');figure;zi=xi.^2+yi.^2;mesh(xi,yi,zi)(8)四维表现图针对v=v(x,y,z)类型的函数,引入了三维实体的四维切片色图,由函数slice实现。slice(X,Y,Z,V,Sx,Sy,Sz)绘制向量Sx,Sy,Sz中的点沿x,y,z方向切片图,数组X,Y,Z用来定义V的坐标,V是M×N×P的矩阵。slice(X,Y,Z,V,XI,YI,ZI)绘制沿XI,YI,ZI数组定义的曲面的通过容量V的切片图。slice(V,Sx,Sy,Sz)或slice(V,XI,YI,ZI)默认X=1:N,y=1:M,Z=1:Pslice(...,’method’)由method指定使用的插值方法,可以为linear,cubic或nearestH=slice(...)返回处理surface对象的向量。3.4

Matlab图形处理的基本技术1、图形的控制图形处理的基本技术包括图形控制、图形标注、图形保持以及子图的绘制等,前三项除了使用函数命令之外,还可以直接在生成的图形界面内进行对应修改。坐标轴控制函数axis

两种调用形式:axis(V),V是一个数组,存储坐标轴的范围,V=[Xmin,Xmax,Ymin,Ymax,Zmin,Zmax]。axis‘控制字符串’用户可以通过选择不同的控制字符串完成对坐标轴的操作。坐标轴缩放函数zoom

调用形式:zoom‘控制字符串’对图形的缩放不会改变图形的基本结构。平面的坐标网图函数grid调用形式:gridon/off图形中绘制/取消坐标网格坐标轴封闭函数box调用形式:boxon/off图形四周都显示/常规显示坐标轴2、图形的标注坐标轴标注主要函数有title,xlabel,ylabel,调用形式为:xlabel(‘标注’,’属性1’,属性值1,’属性2’,属性值2,...)属性包括字体大小,字体名,字体粗细等。例如:title(‘正弦函数’,’FontSize’,12,’FontWeight’,’bold’,’FontName’,’隶书’)标注中的特殊符号有相应的转换字符,例如\alpha表示α,\beta表示β,\gamma表示γ,\delta表示δ等等。显示控制\bf:黑体,\it:斜体,\rm:标准形式,\fontname{fontname}:字体名\fontsize(fontsize):字体大小。其他符号如^,{等只需使用”\”来引导即可,有分数或指数的形式,相应的指数或分母放到大括号内即可。例如:title(‘\bfy=e^{-x^{2}/2}’);文本标注函数texttext(x,y,’标注文本或控制字符串’)x和y表示标注的位置,标注中可以实时调用返回值为字符串的函数,如char,num2str等

交互式文本标注legend用于解决同一张图中绘制多条曲线的情况。legend(’标注1’,’标注2’,....,’定位代号’)标注1,标注2等分别对应绘图过程按绘制先后顺序所生成的曲线。定位代号为0-4和-1,分别针对不同的位置,默认为1,置于图形的右上角。③图形的保持和子图图形的保持函数holdon/off子图命令subplot(m,n,p)3.5动画技术Matlab使科学计算余动画自然结合,实现完美的效果,Matlab中有很多动画的应用程序,如travel,truss,lorenz等。Matlab中产生动画的两种形式:1、以影片方式产生动画。这种方式是以图像的方式预存多个画面,再将这些画面助阵播放,即可得到动画的效果。这种方法需要事先准备图片,无法进行实时成像,占内存大。产生动画的方法是使用getframe命令来抓取图形作为动画,每个画面都是以一个列向量的方式置于存放整个电影的矩阵M中。然后使用movie(M,k)命令来播放电影。示例:clear;s=0.2;x1=0;nframes=50;fork=1:nframesx1=x1+s;x=0:0.01:x1;y=sin(x);plot(x,y);axis([02*pi-11]);gridoff;M(k)=getframe;//将当前图形存入Mendmovie(M,3);2、以对象方式产生动画。这种方式保持图形窗口中的大部分对象,即整个背景不变,而只更新部分运动的对象,以便加快整幅图像的实时生成速度。缺点是无法产生复杂的动画。产生移动的动画效果需要先计算对象的新位置,并在新位置上显示出对象,然后擦除原位置上的旧对象,并刷新屏幕。需要用到擦除属性drasemode(取值有normal,xor,background,none),一般设置为xor。然后用drawnow命令刷新屏幕,有时会通过pause函数进行延迟运行。a=45;b=2;c=-300;s=0;t=0;forn=1:5000x=t-sign(s)*(sqrt(abs(b*s-c)));y=a-s;plot(x,y,'o');holdon;pause(0.1)s=x;t=y;end示例1:示例2:t=0:pi/20:2*pi;y=exp(sin(t));h=plot(t,y,'YDataSource','y');fork=1:.1:10y=exp(sin(t.*k));refreshdata(h,‘caller’);drawnow;pause(.1)end3.6

Matlab图形用户界面设计图形窗口本身是由不同的图形对象组成,如坐标轴,曲线,曲面或者文字等,Matlab给每一个图形对象都分配了一个标识符,成为句柄(handle),可以通过该句柄对对象的属性进行编程控制。直接对图形句柄进行操作的绘图方法称为底层绘图操作。GUI就是由窗口、菜单、对话框等各种图形元素组成的用户界面。1、创建图形对象的底层函数。(1)h=figure(n),创建图形窗口,n为窗口序号;(2)h=uicontrol(‘property’,value),图形界面控制,property和value确定控制类型,如BackGroundColor,CallBack,FontName等(3)h=uimenu(‘property’,value),创建用户界面菜单(4)h=axes(‘property’,RECT),创建轴对象,RECT用于定义轴对象的位置和大小。(5)h=line(x,y,z),创建线对象,二维用x和y。(6)h=patch(x,y,z,c),创建块对象,x,y,z定义多边形,c填充颜色。(7)h=surface(x,y,z,c)创建面对象,x,y,z定义三维曲面坐标,c定义颜色矩阵。(8)h=image(x)显示图像,x为图像矩阵(9)h=text(x,y,’string’)标注文字示例1:xdata=[22025;

28245;

88248];ydata=[44420;

84622;

40400];cdata=[1504610;

12579;

23083];hp=patch(xdata,ydata,cdata,'Marker','o','MarkerFaceColor','flat','FaceColor','none')set(hp,‘EdgeColor’,‘g’)或者set(hp,'EdgeColor','none')示例2:t=0:pi/20:2*pi;hline1=plot(t,sin(t),'k');hline2=line(t+.06,sin(t),'LineWidth',4,'Color',[.8.8.8]);2、图形对象属性的操作(1)对象属性的获取。主要命令有:get:获得句柄图形对象的属性和返回某些对象的句柄值。get(h),get(gcf)set:改变图形对象的属性。gcf:当前窗口对象的句柄,对应Figure。h=gcf:返回当前窗口对象的句柄。gca:当前轴对象的句柄,对应Axes。delete(gcf):删除当前窗口的属性。示例1:h=figure(1);h1=line(2:36,3:37);h3

温馨提示

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

评论

0/150

提交评论