MATLAB总结隐函数符号函数作图.docx
《MATLAB总结隐函数符号函数作图.docx》由会员分享,可在线阅读,更多相关《MATLAB总结隐函数符号函数作图.docx(11页珍藏版)》请在冰豆网上搜索。
MATLAB总结隐函数符号函数作图
MATLAB总结---隐函数、符号函数作图
I.隐函数f(x,y)=0,f(x(t),y(t),z(t))=0;z=f(x,y)
ezplot,ezplot3,ezcontour,conctourf,ezpolar,ezmesh,ezmeshc,ezsurf,ezsurfc
1.ezplot:
画符号函数图形
ezplot(f):
对于显式函数f=f(x),在默认的范围[-piezplot(f,[min,max]):
在指定的范围[min若没有图形窗口存在,则该函数先生成标题为FigureNo.1的新窗口,再在该窗口中操作;若已经有图形窗口存在,这在标号最该的图形窗口中进行操作。
ezplot(f,[xminxmax],fing):
在指定标号为fign的窗口中、指定范围[xminxmax]内画函数f=f(x)的图形。
ezplot(f,[xmin,xmax,ymin,ymax]):
在平面矩形区域[xminezplot(x,y):
在默认范围0ezplot(x,y,[tmin,tmax)]:
在指定范围[tminezplot(…,figure):
在由参量文件figure句柄指定的图形窗口中画函数图形。
例如:
画下面的隐函数
>>symsxy
>>ezplot(2*x^4-y^9)
2.ezplot3:
三维曲线图
ezplot3(x,y,z):
在默认的范围0ezplot3(x,y,z,[tmin,tmax]):
在默认的范围tminezplot3(…,’animate’):
以动画形式画出空间三维曲线。
例如:
>>symst
>>ezplot3(t*sin(t),t*cos(t),t,[0,20*pi])
此外,三维曲线的视角可以通过程序命令来控制,也可以手动设置。
3.ezcontour:
画符号函数的等高线图
ezcounter(f):
画出二元符号函数f=f(x,y)的等高线图。
函数f将被显示在默认的平面区域[-2pi系统将根据函数变动的激烈程度自动选择相应的计算栅格。
若函数f在某些栅格点上没有定义,则这些点不显示。
ezcontour(f,domain):
在指定的定义域domain内画出二元函数f(x,y),参量domain可以是四维向量[xmin,xmax,ymin,ymax]或二维向量[min,max](其中显示区域为minezcontour(…,n):
用指定n*n个栅格点(对定义域的一种划分),在默认(若没有指定)的区域内画出函数f的图形。
n的默认值为60.
例如:
>>symsxy
>>f=(1-x)^2*exp(-(x^2)-(y+1)^2)-5*(x/5-x^3-y^5)*sin(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2);
>>ezcontour(f,[-3,3],49)
4.contourf:
用不同颜色填充的等高线图
ezcontourf(f):
画二元函数f=f(x)的等高线图,且在不同的等高线之间自动用不同的颜色进行填充。
函数f兼备现实与默认的平面区域[-2pi系统将根据函数变动激烈程度自动选择相应的计算栅格。
若函数f在某些栅格点上没有意义,这些点将不显示。
ezcontourf(f,domain):
在指定的定义域domain内画出二元函数f(x,y)的等高线图,且在不同的等高线之间自动用不同的颜色进行填充。
定义域domain可以是四维向量[xmin,xmax,ymin,ymax]或者二维向量[min,max])(其中显示区域为:
minezcontourf(……,n)用指定的n*n个栅格点,在默认(若没有指定)的区域内画出函数f的等高线,且在不同的等高线之间自动用不同的颜色进行填充。
n的默认值是60.
例如:
>>symsxy
>>f=(1-x)^2*exp(-(x^2)-(y+1)^2)-5*(x/5-x^3-y^5)*sin(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2);
>>ezcontourf(f,[-3,3],60)
例如:
>>symsxy
>>ezmesh(x*sin(-x^2-y^2),40,'circ')
>>colormap([001])%获取当前图色
7.ezmeshc:
同时画曲面网格图和等高线图
ezmeshc(f):
画出二元数学符号函数z=f(x,y)的网格图形,同时在xy平面上显示等高线图。
函数f将被显示于默认的平面区域[-2pi系统将根据函数变动的激烈程度自动选择相应的计算栅格。
若函数f在某些栅格点没有意义,则这些点将不显示。
ezmeshc(f,domian):
在指定的定义域domain内画出二元数学符号函数z=f(x,y)的网格图及其等高线图,domain可以是四维向量[xmin,xmax,ymin,ymax]或者二维向量[min,max])(其中显示区域为:
minezmeshc(x,y,z):
在默认的矩形定义域范围[-2pi
ezmeshc(x,y,z,[smin,smax,tmin,tmax]):
在指定的矩形定义域范围[smin
ezmeshc(f,……,n):
用指定n*n个栅格点,在默认(若没有指定)的区域内画出函数f的网格图形及其等高线图。
n的默认值是60.
ezmeshc(…,’circ’):
在一圆形区域(圆心位于定义域中心)的范围内画出函数f的网格图形以及其等高线图。
例如:
>>symsxy
>>ezmeshc(x*y/(1+x^2+y^2),[-5,5,-2*pi,2*pi],35)
(颜色使用了colormap函数控制,上面对应的代码是colormap(cool(64)。
)
8.ezsurf:
三维带颜色的曲面图
ezsurf(f):
画出二元数学符号函数z=f(x,y)的曲面图形。
函数f将显示于默认的平面区域[-2pi系统将根据函数变动的激烈程度自动选择相应的计算栅格。
若函数f在某些栅格点没有意义,则这些点将不显示。
ezsurf(f,domian):
在指定的定义域domain内画出二元数学符号函数z=f(x,y)的曲面图形,domain可以是四维向量[xmin,xmax,ymin,ymax]或者二维向量[min,max])(其中显示区域为:
minezsurf(x,y,z):
在默认的矩形定义域范围[-2pi
ezsurf(x,y,z,[smin,smax,tmin,tmax]):
在指定的矩形定义域范围[smin
ezsurf(f,…,n):
用指定n*n个栅格点,在默认(若没有指定)的区域内画出函数f的图形。
n的默认值是60.
ezsurf(…,’circ’):
在一圆形区域(圆心位于定义域中心)的范围内画出函数f的图形。
例如:
>>symsxy
>>ezsurf(real(atan(x+i*y)))
9.ezsurfc:
同时画曲面图与等高线图
>>symsxy
>>ezsurfc(x*y/(1+x^2+y^2),[-5,5,-2*pi,2*pi],35,'circ')
II.Matlab画三维隐函数曲面
implicitmesh,implicitmesh
利用ezplot甚至可以直接绘制隐函数曲线F(x,y)=0而无需将其写成y=f(x)的形式。
然而十分可惜的是与之对应的ezsurf和ezmesh却对隐函数曲面F(x,y,z)=0的绘制无能为力。
那么matlab究竟有没有用来绘制诸如F(x,y,z)=0的命令呢?
答案毫无疑问是肯定的。
事实上利用matlab的等值面函数isosurface就可以轻松搞定。
关于isosurface的具体用法大家可以自己参看help。
下面两个函数就是我利用isosurface编写的通用隐函数曲面绘制命令。
1.隐函数曲面网格图函数implicitmesh
functionh=implicitmesh(f,xlimit,ylimit,zlimit,gd)
%implicitmesh(f,span,gd):
画隐函数曲面f(x,y,z)=0的网格图,
% 各坐标范围均限定在span=[lb,ub],
% 网格数为gd,默认为25
%implicitmesh(f,xspan,yspan,zspan,gd):
画隐函数曲面f(x,y,z)=0,
% 各坐标范围分别限定在xspan,yspan,zspan
%h=implicitmesh(...):
画隐函数曲面并输出句柄
%例一:
%implicitmesh(inline('x.*y+z.^2'),[-55])%注意*\^一定要设成点运算
%例二:
%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。
%implicitmesh(f,[-11],10)
%例三:
%f=@(x,y,z)(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3;
%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;
%implicitmesh(f,[-1.51.5],[-.8.8],[-1.51.5],50);
%holdon%可以添加图形
%h=implicitmesh(g,[-2.3,2.3]);
%colormaphsv;set(h,'facecolor','none');%可以设置各种效果
%axisoff;axisequal;
ifnargin==2
ylimit=xlimit;zlimit=xlimit;gd=25;
elseifnargin==3
gd=ylimit;ylimit=xlimit;zlimit=xlimit;
elseifnargin==4
gd=25;
elseifnargin==5
else
error('Errorininputarguments')
end
x=linspace(xlimit
(1),xlimit
(2),gd);
y=linspace(ylimit
(1),ylimit
(2),gd);
z=linspace(zlimit
(1),zlimit
(2),gd);
[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);
[f,v]=isosurface(x,y,z,val,0);
ifisempty(f)
warning('Thereisnographintherange.');
p=[];
else
newplot;
p=patch('Faces',f,'Vertices',v,'CData',v(:
3),'facecolor','w','EdgeColor','flat');
isonormals(x,y,z,val,p);view(3);gridon
end
ifnargout==0
else
h=p;
end
效果图:
2.隐函数曲面表面图函数implicitsurf
functionh=implicitsurf(f,xlimit,ylimit,zlimit,gd)
%implicitsurf(f,span,gd):
画隐函数曲面f(x,y,z)=0的网格图,
% 各坐标范围均限定在span=[lb,ub],
% 网格数为gd,默认为25
%implicitsurf(f,xspan,yspan,zspan,gd):
画隐函数曲面f(x,y,z)=0,
% 各坐标范围分别限定在xspan,yspan,zspan
%h=implicitsurf(...):
画隐函数曲面并输出句柄
%例一:
%implicitsurf(inline('x.*y+z.^2'),[-55])%注意*\^一定要设成点运算
%例二:
%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。
%implicitsurf(f,[-11],10)
%例三:
%f=@(x,y,z)(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3;
%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;
%h=implicitsurf(f,[-1.51.5],[-.8.8],[-1.51.5],50);
%set(h,'AmbientStrength',.5);%可以设置各种效果
%holdon%可以添加图形
%h=implicitsurf(g,[-2.3,2.3],[-2.3,2.3],[-.3,.3]);
%colormaphsv;set(h,'AmbientStrength',.8,'FaceAlpha',.5);%可以设置各种效果
%axisoff;axisequal;shadinginterp;camlight;lightinggouraud;
ifnargin==2
ylimit=xlimit;zlimit=xlimit;gd=25;
elseifnargin==3
gd=ylimit;ylimit=xlimit;zlimit=xlimit;
elseifnargin==4
gd=25;
elseifnargin==5
else
error('Errorininputarguments')
end
x=linspace(xlimit
(1),xlimit
(2),gd);
y=linspace(ylimit
(1),ylimit
(2),gd);
z=linspace(zlimit
(1),zlimit
(2),gd);
[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);
[f,v]=isosurface(x,y,z,val,0);
ifisempty(f)
warning('Thereisnographintherange.');
p=[];
else
newplot;
p=patch('Faces',f,'Vertices',v,'CData',v(:
3),'facecolor','flat','EdgeColor','k');
isonormals(x,y,z,val,p);view(3);gridon
end
ifnargout==0
else
h=p;
end
效果图:
III.关于ezplot作图之后数据提取的问题
clear;clc
figure
h=ezplot('x*y',[-2,2]);
x1=get(h
(1),'XData'); y1=get(h
(1),'YData');
x2=get(h
(2),'XData'); y2=get(h
(2),'YData');
figure
plot(x1,y1); hold on
plot(x2,y2);