第三章Matlab图形绘制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几个示例:
(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);
示例: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]) 适合于变化剧烈的函数。
Polar绘制极坐标
示例: theta=linspace(0,2*pi);r=cos(2*theta);polar(theta,r)
u=linspace(-5,5,10)';%设定参数列向量u v=linspace(-5,10,10); %设定参数行向量v X=u*ones(size(v)); %构成自变量矩阵X Y=ones(size(u))*v; %构成自变量矩阵Y Z=2-X.^2; %求因变量Z mesh(X,Y,Z)
(6)其他二次曲面 Matlab中使用绘图命令ezmesh或ezsurf也很方便,只需要把曲面
②极坐标系函数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或loglog ➢plotyy(X1,Y1,X2,Y2,fun1,fun2) fun1绘制(X1,Y1),fun2绘制(X2,Y2) 注:双坐标绘制图形的调用过程中,不能够像前面的plot函数那样对曲线 属性进行设置,需要使用句柄图形控制完成。
函数名 说明
fplot
函数图绘制
hist
直方图
pareto
Pareto图
pie
饼图
plotmatrix 分散矩阵绘制
ribbon
三维图的二维条状显示
Bar函数适合于数据点不多时使用 示例:x=1:15;y=rand(size(x));bar(x,y);
如果已知数据的误差量,可用 errorbar表示。
方程写成两个变量的显函数方程或参数方程即可。
对于旋转面,如果母线的方程可以表示成关于旋转轴变量的显式函 数,则可以直接使用Matlab工具箱中的命令cylinder,否则必须把旋转 面化成参数方程,然后使用ezmesh或ezsurf命令绘图。对于其它的二次 曲面,如果可以写成显函数直接使用命令ezmesh或ezsurf,否则必须先 化成参数方程。
3、显函数、隐函数和符号函数作图
(1)fplot(fun,lims)绘制由字符串fun指定函数名的函数在x轴区间为 lims=[xmin, xmax]的函数图。若lims=[xmin,xmax,ymin,ymax],则y轴也被 限制。
例题:
解 1)首先用M文件fun1.m定义函数f(x)如下 function y=Afun1(x); if x<1 y=x+1; else y=1+1./x; end 在matlab命令窗口输入fplot('Afun1',[-3,3])就可画出函数 f (x) 的图形。
函数名 surfc ezgraph3 scatter3 sphere
说明 着色图+等高线 函数控制绘制图 三维散射图 球面图
函数名 comet3 waterfall cylinder trimesh
说明 三维彗星图 瀑布图 柱面图 三角形网格图
(4)旋转曲面图 cylinder [X,Y,Z] = cylinder(r) 这里的r表示构成旋转曲面的曲线。
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,....)组合图形
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])
[m,n]=size(Z) 示例2:
示例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);
可以定义网格的划分方法,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,且
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);
Hist用来显示资料的分段情况和统 计特性,适合于大量数据的情况
示例:x=randn(9999,1);hist(x,50)
Rose与hist接近,将资料的大小视 为角度,资料的个数作为距离,采 示例:x=randn(9999,1);rose(x,50) 用极坐标绘图。
Stem产生针状图,常被用来绘制数 位讯号。
示例1:ezplot(‘x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)’,[-10 10]);
示例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]);
柱面平行于某个坐标轴,方程中不出现某个坐标轴的变量,方程表示 为F(x,y)=0或者F(x,z)=0或者F(y,z)=0
示例一:画出方程 z 2 x2 表示的柱面
解:方程中的x是自变量矩阵,z是因变量,则另一个自变量矩阵为y,自变量 平面是xoy面,x轴是真正的自变量,y轴是柱面方向。Matlab程序如下:
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(:)*.5 x(:)*.75 x(:)]; Y = [y(:)*.5 y(:)*.75 y(:)]; Z = [z(:)*.5 z(:)*.75 z(:)]; S = repmat([1 .75 .5]*10,numel(x),1); C = repmat([1 2 3],numel(x),1); scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60)
画图的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)绘制柱面图
[x,y]=meshgrid(-2:0.2:2);z=x.*exp(-x.^2-
Quiver用来绘制向量场图。 y.^2);[Dx,Dy]=gradient(z,0.2,0.2);
Contour(x,y,z);hold
on;quiver(x,y,Dx,Dy);colormap hsv ;hold off
以第二种形式为例: [x,y]=meshgrid(-2:0.1:2,-2:0.1:2); z=x.*exp(-x.^2-y.^2); plot3(x,y,z)
3.3 三维网线图和曲面图的绘制
(1)网线图mesh函数
函数名 mesh meshz
说明 三维网格图 屏蔽的网格图
函数名 meshc meshgrid
(2)二维特殊函数图形
函数名 area bar barh comet errorbar ezplot ezpolar
说明
函数名
填充绘图
feather
条形图
stem
水平条形图
fill
彗星图
stairs
误差带图
contour
简单绘制函数图 contourf
简单绘制极坐标图 scatter
说明 矢量图 离散序列饼状图 多边形填充 阶梯图 等高线图 填充的等高线图 散射图
x=linspace(0,10,100);y=sin(x).*exp(-
x/4);stem(x,y);
Fill将资料点视为多边形顶点,并将 x=linspace(0,10,100);y=sin(x).*exp(此多边形涂上颜数将每一个数据点视为 复数,并以箭头画出。
(2)着色函数surf
surf(X,Y,Z,C)输入参数的设置和mesh相同,不同的是mesh绘制的是网格 图,而surf绘制的着色的三维表面。两者对比如下图所示
(3)特殊的三维绘图命令
函数名 说明 bar3 三维条形图 trisurf 三角形表面图 pie3 三维饼状图 stem3 三维离散数据图
方法一: Matlab程序如下。 x=0:10:600; [X,Y,Z]=cylinder(30*exp(-x/400).*sin((x+25*pi)/100)+130); surf(X,Y,Z) 方法二:将旋转曲面用参数方程表示。
解 因为这里的函数是隐函数,化成显函数后有两支,必须使用参数方程,旋 转面的参数方程为
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的句柄。
说明 将网格与等高线结合 生成网格点
MATLAB对于网格的处理方法是:将xy平面按指定方式分隔成平面网 格,然后根据程序中给定的方式计算第三维变量的值,即z轴的值,与对 应的xy平面的坐标构成三维点元素,根据由此得到的(x,z)和(y,z)计算各平 面的曲线,彼此相连就构成了网格图。
[X,Y]=meshgrid(x,y) x和y是给定的向量,可以定义网格的划分区域,也
画图的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)
(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);
示例: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]) 适合于变化剧烈的函数。
Polar绘制极坐标
示例: theta=linspace(0,2*pi);r=cos(2*theta);polar(theta,r)
u=linspace(-5,5,10)';%设定参数列向量u v=linspace(-5,10,10); %设定参数行向量v X=u*ones(size(v)); %构成自变量矩阵X Y=ones(size(u))*v; %构成自变量矩阵Y Z=2-X.^2; %求因变量Z mesh(X,Y,Z)
(6)其他二次曲面 Matlab中使用绘图命令ezmesh或ezsurf也很方便,只需要把曲面
②极坐标系函数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或loglog ➢plotyy(X1,Y1,X2,Y2,fun1,fun2) fun1绘制(X1,Y1),fun2绘制(X2,Y2) 注:双坐标绘制图形的调用过程中,不能够像前面的plot函数那样对曲线 属性进行设置,需要使用句柄图形控制完成。
函数名 说明
fplot
函数图绘制
hist
直方图
pareto
Pareto图
pie
饼图
plotmatrix 分散矩阵绘制
ribbon
三维图的二维条状显示
Bar函数适合于数据点不多时使用 示例:x=1:15;y=rand(size(x));bar(x,y);
如果已知数据的误差量,可用 errorbar表示。
方程写成两个变量的显函数方程或参数方程即可。
对于旋转面,如果母线的方程可以表示成关于旋转轴变量的显式函 数,则可以直接使用Matlab工具箱中的命令cylinder,否则必须把旋转 面化成参数方程,然后使用ezmesh或ezsurf命令绘图。对于其它的二次 曲面,如果可以写成显函数直接使用命令ezmesh或ezsurf,否则必须先 化成参数方程。
3、显函数、隐函数和符号函数作图
(1)fplot(fun,lims)绘制由字符串fun指定函数名的函数在x轴区间为 lims=[xmin, xmax]的函数图。若lims=[xmin,xmax,ymin,ymax],则y轴也被 限制。
例题:
解 1)首先用M文件fun1.m定义函数f(x)如下 function y=Afun1(x); if x<1 y=x+1; else y=1+1./x; end 在matlab命令窗口输入fplot('Afun1',[-3,3])就可画出函数 f (x) 的图形。
函数名 surfc ezgraph3 scatter3 sphere
说明 着色图+等高线 函数控制绘制图 三维散射图 球面图
函数名 comet3 waterfall cylinder trimesh
说明 三维彗星图 瀑布图 柱面图 三角形网格图
(4)旋转曲面图 cylinder [X,Y,Z] = cylinder(r) 这里的r表示构成旋转曲面的曲线。
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,....)组合图形
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])
[m,n]=size(Z) 示例2:
示例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);
可以定义网格的划分方法,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,且
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);
Hist用来显示资料的分段情况和统 计特性,适合于大量数据的情况
示例:x=randn(9999,1);hist(x,50)
Rose与hist接近,将资料的大小视 为角度,资料的个数作为距离,采 示例:x=randn(9999,1);rose(x,50) 用极坐标绘图。
Stem产生针状图,常被用来绘制数 位讯号。
示例1:ezplot(‘x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)’,[-10 10]);
示例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]);
柱面平行于某个坐标轴,方程中不出现某个坐标轴的变量,方程表示 为F(x,y)=0或者F(x,z)=0或者F(y,z)=0
示例一:画出方程 z 2 x2 表示的柱面
解:方程中的x是自变量矩阵,z是因变量,则另一个自变量矩阵为y,自变量 平面是xoy面,x轴是真正的自变量,y轴是柱面方向。Matlab程序如下:
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(:)*.5 x(:)*.75 x(:)]; Y = [y(:)*.5 y(:)*.75 y(:)]; Z = [z(:)*.5 z(:)*.75 z(:)]; S = repmat([1 .75 .5]*10,numel(x),1); C = repmat([1 2 3],numel(x),1); scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60)
画图的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)绘制柱面图
[x,y]=meshgrid(-2:0.2:2);z=x.*exp(-x.^2-
Quiver用来绘制向量场图。 y.^2);[Dx,Dy]=gradient(z,0.2,0.2);
Contour(x,y,z);hold
on;quiver(x,y,Dx,Dy);colormap hsv ;hold off
以第二种形式为例: [x,y]=meshgrid(-2:0.1:2,-2:0.1:2); z=x.*exp(-x.^2-y.^2); plot3(x,y,z)
3.3 三维网线图和曲面图的绘制
(1)网线图mesh函数
函数名 mesh meshz
说明 三维网格图 屏蔽的网格图
函数名 meshc meshgrid
(2)二维特殊函数图形
函数名 area bar barh comet errorbar ezplot ezpolar
说明
函数名
填充绘图
feather
条形图
stem
水平条形图
fill
彗星图
stairs
误差带图
contour
简单绘制函数图 contourf
简单绘制极坐标图 scatter
说明 矢量图 离散序列饼状图 多边形填充 阶梯图 等高线图 填充的等高线图 散射图
x=linspace(0,10,100);y=sin(x).*exp(-
x/4);stem(x,y);
Fill将资料点视为多边形顶点,并将 x=linspace(0,10,100);y=sin(x).*exp(此多边形涂上颜数将每一个数据点视为 复数,并以箭头画出。
(2)着色函数surf
surf(X,Y,Z,C)输入参数的设置和mesh相同,不同的是mesh绘制的是网格 图,而surf绘制的着色的三维表面。两者对比如下图所示
(3)特殊的三维绘图命令
函数名 说明 bar3 三维条形图 trisurf 三角形表面图 pie3 三维饼状图 stem3 三维离散数据图
方法一: Matlab程序如下。 x=0:10:600; [X,Y,Z]=cylinder(30*exp(-x/400).*sin((x+25*pi)/100)+130); surf(X,Y,Z) 方法二:将旋转曲面用参数方程表示。
解 因为这里的函数是隐函数,化成显函数后有两支,必须使用参数方程,旋 转面的参数方程为
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的句柄。
说明 将网格与等高线结合 生成网格点
MATLAB对于网格的处理方法是:将xy平面按指定方式分隔成平面网 格,然后根据程序中给定的方式计算第三维变量的值,即z轴的值,与对 应的xy平面的坐标构成三维点元素,根据由此得到的(x,z)和(y,z)计算各平 面的曲线,彼此相连就构成了网格图。
[X,Y]=meshgrid(x,y) x和y是给定的向量,可以定义网格的划分区域,也
画图的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)