杨海勇
摘 要:MATLAB作为一种功能强大的仿真软件,在科学计算和工程绘图方面也有广泛的应用。针对隐函数求解不便并且图形难以手工绘制的问题,该文研究用MATLAB软件绘制二维隐函数曲线和三维隐函数曲面的方法:利用软件提供的ezplot函数可以直接绘制二维隐函数曲线,并讨论了二维隐函数带变量使用的情况;采用等值面计算函数isosurface和面元渲染函数patch可以分步实现三维隐函数曲面的绘图。根据上述方法给出一些具体应用实例和绘图结果。实践表明,MATLAB软件能有效解决比较复杂的隐函数绘图问题。
关键词:MATLAB 二维隐函数 三维隐函数 绘图
中图分类号:TP31 文献标识码:A 文章编号:1672-3791(2014)11(a)-0011-02
MATLAB是当今流行世界的仿真软件,更是一种效率高、功能强的工程数学软件,它具有出色的图形处理能力,在科学计算和工程绘图方面有大量的应用。
对于一些多元函数特别是隐函数类的数学问题,其求解和图形绘制工作仅仅依靠人工是难以实现的,而MATLAB软件正是解决这类复杂数学问题的一种很好的工具。
MATLAB软件包含了一系列种类齐全的绘图函数,例如二维图形中基本的plot函数、三维曲面的mesh函数。在隐函数绘图方面,软件提供了ezplot函数可以直接绘制二维隐函数曲线,但在解决三维隐函数曲面的图形绘制方面,却仍然是一个难题,因为软件里并没有提供能直接绘制三维隐函数曲面的函数,需要我们寻找其他方法解决这一问题。
该文主要探讨利用MATLAB软件绘制二维隐函数曲线和三维隐函数曲面的方法,并给出具体应用实例。
1 二维隐函数绘图
二维隐函数是指满足方程f(x,y)=0的x,y之间的关系式,由于隐函数求解不便,很多都无法求出x、y之间的关系,也就不能写成y=f(x)的形式,因此基本的二维绘图命令plot(x,y)是不能应用的。对于这类隐函数的图形绘制问题,MATLAB提供了函数ezplot( )可以直接绘制隐函数f(x,y)=0的曲线。
1.1 函数ezplot基本格式及绘图应用
对于隐函数f=f(x,y),ezplot的基本调用格式是:ezplot(f),这是在默认区间-2pi 也可以人工指定区间范围:xmin 例如要绘制隐函数 的曲线,可以采用下列两种语句: 执行后得出如图1所示的绘图结果,这是一种心形线。 1.2 隐函数带变量使用的情况 隐函数带变量的情况也很常见,例如隐函数。 根据实际需要可将a事先具体赋值,但使用中应注意,绘图语句不能简单采用前面基本格式的形式,例如a=2;ezplot('x^2+y^2+a*x-a*sqrt(x^2+y^2)'),这样并不能执行绘图。因为函数包括单引号时,相当于是符号表达式,变量a的值作为一个参数,不能传进函数,导致ezplot()不能正常绘图。 要把参数a的值传进函数,就不能用单引号括起函数,因此正确的做法是先利用syms函数定义多个变量,再用ezplot()对隐函数画图,应注意函数不带单引号。绘图语句如下,绘图结果和前面图1完全相同。 1.3 带有多个变量的隐函数组的绘图 已有方程组f(x,y)=x+y^2=a,g(x,y)=x^2-y=b,(a,b均为常数),可以方便地解决这类带有多个变量的隐函数组的绘图问题。以a=3,b=-3这种情况为例,给出绘图的语句和绘图结果图2。 其中hold on语句的作用是将当前已有图形保持,并允许添加新绘制的图形。title( )的作用是给图形加题头。 2 三维隐函数绘图 三维隐函数是指在满足方程f(x,y,z)=0的条件下,z关于x、y的关系式,即z=g(x,y),这里g(x,y)的显式表达式无法求取,不能采用普通的绘图函数来绘制其曲线。下面主要探讨采用等值面计算函数isosurface()和面元渲染函数patch( )来分步实现三维隐函数曲面的绘图方法。 2.1 三维隐函数分步绘图步骤 首先对要使用的两个重要的图形函数做一些简要介绍。 isosurface的调用格式:[f,v] = isosurface(x,y,z,val,isovalue),它是等值面计算函数,其作用是返回由isovalue指定的某个等值面的表面(Faces)和顶点(Vertices)数据,并存放在结构体f、v中。对于画隐函数v=f(x,y,z)=0的三维图形,则isovalue=0。 patch是面元渲染函数,对曲面进行修饰。它的调用格式包括: patch(x,y,z,c)以三维坐标(x,y,z)为顶点,构造三维曲面,c是RGB颜色向量。 patch(f,v)通过包含Faces、Vertices两个域的结构体f、v来构造三维曲面,f和v可以由等值面函数isosurface计算而得。 对于三元显函数v=f(x,y,z)来说,当v=0时的等值面就是z=g(x,y)的三维曲面。isosurface函数可以计算v=0的等值面,返回结果包括表面和顶点数据,并存放于结构体f、v中,再输入给patch函数,能构造三维曲面,还可以根据需要设置颜色、亮度、三维视角等。 根据上述方案可以归纳出三维隐函数的分步绘图步骤。 (1)用meshgrid函数产生网格点,同时可确定坐标范围。 (2)引用隐函数表达式计算格点函数值val。 (3)调用[f,v]=isosurface(x,y,z,val,0)计算隐函数等值面并返回到f、v。 (4)调用patch('Faces',f,'Vertices',v,'facecolor','none','EdgeColor','flat')对曲面修饰。 2.2 三维隐函数绘图应用举例 以心形图函数 为例,按照上述绘图步骤,给出程序语句和三维心形图的绘图结果图3。 3 结语 该文介绍了利用MATLAB软件中的绘图函数ezplot()直接绘制二维隐函数曲线的方法,以及采用等值面计算函数isosurface()和面元渲染函数patch( )分步实现三维隐函数曲面的绘图方法。实践表明,上述方法效率高、容易实现,能有效解决比较复杂的隐函数绘图问题。 参考文献 [1] 李国勇,程永强.计算机仿真技术与CAD[M].北京:电子工业出版社,2012. [2] 薛定宇,陈阳泉.基于MATLAB/Simulink的系统仿真技术与应用[M].北京:清华大学出版社,2011. [3] 陈艳男,徐爱军,保进烽.MATLAB在高等数学课程中的应用[J].科技信息,2010(14):39-40. [4] 张志涌.精通MATLAB6[M].5版.北京:北京航空航天大学出版社,2003.