楊海勇
摘 要:MATLAB作為一種功能強大的仿真軟件,在科學(xué)計算和工程繪圖方面也有廣泛的應(yīng)用。針對隱函數(shù)求解不便并且圖形難以手工繪制的問題,該文研究用MATLAB軟件繪制二維隱函數(shù)曲線和三維隱函數(shù)曲面的方法:利用軟件提供的ezplot函數(shù)可以直接繪制二維隱函數(shù)曲線,并討論了二維隱函數(shù)帶變量使用的情況;采用等值面計算函數(shù)isosurface和面元渲染函數(shù)patch可以分步實現(xiàn)三維隱函數(shù)曲面的繪圖。根據(jù)上述方法給出一些具體應(yīng)用實例和繪圖結(jié)果。實踐表明,MATLAB軟件能有效解決比較復(fù)雜的隱函數(shù)繪圖問題。
關(guān)鍵詞:MATLAB 二維隱函數(shù) 三維隱函數(shù) 繪圖
中圖分類號:TP31 文獻標識碼:A 文章編號:1672-3791(2014)11(a)-0011-02
MATLAB是當今流行世界的仿真軟件,更是一種效率高、功能強的工程數(shù)學(xué)軟件,它具有出色的圖形處理能力,在科學(xué)計算和工程繪圖方面有大量的應(yīng)用。
對于一些多元函數(shù)特別是隱函數(shù)類的數(shù)學(xué)問題,其求解和圖形繪制工作僅僅依靠人工是難以實現(xiàn)的,而MATLAB軟件正是解決這類復(fù)雜數(shù)學(xué)問題的一種很好的工具。
MATLAB軟件包含了一系列種類齊全的繪圖函數(shù),例如二維圖形中基本的plot函數(shù)、三維曲面的mesh函數(shù)。在隱函數(shù)繪圖方面,軟件提供了ezplot函數(shù)可以直接繪制二維隱函數(shù)曲線,但在解決三維隱函數(shù)曲面的圖形繪制方面,卻仍然是一個難題,因為軟件里并沒有提供能直接繪制三維隱函數(shù)曲面的函數(shù),需要我們尋找其他方法解決這一問題。
該文主要探討利用MATLAB軟件繪制二維隱函數(shù)曲線和三維隱函數(shù)曲面的方法,并給出具體應(yīng)用實例。
1 二維隱函數(shù)繪圖
二維隱函數(shù)是指滿足方程f(x,y)=0的x,y之間的關(guān)系式,由于隱函數(shù)求解不便,很多都無法求出x、y之間的關(guān)系,也就不能寫成y=f(x)的形式,因此基本的二維繪圖命令plot(x,y)是不能應(yīng)用的。對于這類隱函數(shù)的圖形繪制問題,MATLAB提供了函數(shù)ezplot( )可以直接繪制隱函數(shù)f(x,y)=0的曲線。
1.1 函數(shù)ezplot基本格式及繪圖應(yīng)用
對于隱函數(shù)f=f(x,y),ezplot的基本調(diào)用格式是:ezplot(f),這是在默認區(qū)間-2pi 也可以人工指定區(qū)間范圍:xmin 例如要繪制隱函數(shù) 的曲線,可以采用下列兩種語句: 執(zhí)行后得出如圖1所示的繪圖結(jié)果,這是一種心形線。 1.2 隱函數(shù)帶變量使用的情況 隱函數(shù)帶變量的情況也很常見,例如隱函數(shù)。 根據(jù)實際需要可將a事先具體賦值,但使用中應(yīng)注意,繪圖語句不能簡單采用前面基本格式的形式,例如a=2;ezplot('x^2+y^2+a*x-a*sqrt(x^2+y^2)'),這樣并不能執(zhí)行繪圖。因為函數(shù)包括單引號時,相當于是符號表達式,變量a的值作為一個參數(shù),不能傳進函數(shù),導(dǎo)致ezplot()不能正常繪圖。 要把參數(shù)a的值傳進函數(shù),就不能用單引號括起函數(shù),因此正確的做法是先利用syms函數(shù)定義多個變量,再用ezplot()對隱函數(shù)畫圖,應(yīng)注意函數(shù)不帶單引號。繪圖語句如下,繪圖結(jié)果和前面圖1完全相同。 1.3 帶有多個變量的隱函數(shù)組的繪圖 已有方程組f(x,y)=x+y^2=a,g(x,y)=x^2-y=b,(a,b均為常數(shù)),可以方便地解決這類帶有多個變量的隱函數(shù)組的繪圖問題。以a=3,b=-3這種情況為例,給出繪圖的語句和繪圖結(jié)果圖2。 其中hold on語句的作用是將當前已有圖形保持,并允許添加新繪制的圖形。title( )的作用是給圖形加題頭。 2 三維隱函數(shù)繪圖 三維隱函數(shù)是指在滿足方程f(x,y,z)=0的條件下,z關(guān)于x、y的關(guān)系式,即z=g(x,y),這里g(x,y)的顯式表達式無法求取,不能采用普通的繪圖函數(shù)來繪制其曲線。下面主要探討采用等值面計算函數(shù)isosurface()和面元渲染函數(shù)patch( )來分步實現(xiàn)三維隱函數(shù)曲面的繪圖方法。 2.1 三維隱函數(shù)分步繪圖步驟 首先對要使用的兩個重要的圖形函數(shù)做一些簡要介紹。 isosurface的調(diào)用格式:[f,v] = isosurface(x,y,z,val,isovalue),它是等值面計算函數(shù),其作用是返回由isovalue指定的某個等值面的表面(Faces)和頂點(Vertices)數(shù)據(jù),并存放在結(jié)構(gòu)體f、v中。對于畫隱函數(shù)v=f(x,y,z)=0的三維圖形,則isovalue=0。 patch是面元渲染函數(shù),對曲面進行修飾。它的調(diào)用格式包括: patch(x,y,z,c)以三維坐標(x,y,z)為頂點,構(gòu)造三維曲面,c是RGB顏色向量。 patch(f,v)通過包含F(xiàn)aces、Vertices兩個域的結(jié)構(gòu)體f、v來構(gòu)造三維曲面,f和v可以由等值面函數(shù)isosurface計算而得。 對于三元顯函數(shù)v=f(x,y,z)來說,當v=0時的等值面就是z=g(x,y)的三維曲面。isosurface函數(shù)可以計算v=0的等值面,返回結(jié)果包括表面和頂點數(shù)據(jù),并存放于結(jié)構(gòu)體f、v中,再輸入給patch函數(shù),能構(gòu)造三維曲面,還可以根據(jù)需要設(shè)置顏色、亮度、三維視角等。 根據(jù)上述方案可以歸納出三維隱函數(shù)的分步繪圖步驟。 (1)用meshgrid函數(shù)產(chǎn)生網(wǎng)格點,同時可確定坐標范圍。 (2)引用隱函數(shù)表達式計算格點函數(shù)值val。 (3)調(diào)用[f,v]=isosurface(x,y,z,val,0)計算隱函數(shù)等值面并返回到f、v。 (4)調(diào)用patch('Faces',f,'Vertices',v,'facecolor','none','EdgeColor','flat')對曲面修飾。 2.2 三維隱函數(shù)繪圖應(yīng)用舉例 以心形圖函數(shù) 為例,按照上述繪圖步驟,給出程序語句和三維心形圖的繪圖結(jié)果圖3。 3 結(jié)語 該文介紹了利用MATLAB軟件中的繪圖函數(shù)ezplot()直接繪制二維隱函數(shù)曲線的方法,以及采用等值面計算函數(shù)isosurface()和面元渲染函數(shù)patch( )分步實現(xiàn)三維隱函數(shù)曲面的繪圖方法。實踐表明,上述方法效率高、容易實現(xiàn),能有效解決比較復(fù)雜的隱函數(shù)繪圖問題。 參考文獻 [1] 李國勇,程永強.計算機仿真技術(shù)與CAD[M].北京:電子工業(yè)出版社,2012. [2] 薛定宇,陳陽泉.基于MATLAB/Simulink的系統(tǒng)仿真技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2011. [3] 陳艷男,徐愛軍,保進烽.MATLAB在高等數(shù)學(xué)課程中的應(yīng)用[J].科技信息,2010(14):39-40. [4] 張志涌.精通MATLAB6[M].5版.北京:北京航空航天大學(xué)出版社,2003.