楊海勇
摘 要: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.