摘要:根據MATLAB的工作機理,受meshgrid函數的啟發,設計了區域邊界可由函數表示的有界、不規則、連通平面區域上的函數圖形的繪制方法,并進一步介紹了如何通過巧妙變換坐標軸來繪制多個曲面所圍成的空間體的方法,方法通用性好。利用plot3、surf函數繪制曲線,可將圖形做的更漂亮、更形象、更直觀;利用ezsurf、surf繪制曲線可以加深對曲線與曲面關系、一元函數與二元函數關系的理解,不同的理解方式可設計不同的繪制空間函數圖形的方法。
關鍵詞:函數圖形的繪制; 空間曲面; 空間體; 空間曲線; 不規則區域
中圖分類號:TP312 文獻標識碼:A文章編號:2095-2163(2013)02-0058-04
0引言
高等數學的教學中,如果能將某些函數的圖形直觀形象地展示給學生,尤其是有關空間曲線、空間曲面、多個曲面所圍成的空間體、多個曲面交線的繪圖效果的課堂展現,必將有助于學生深刻理解問題,而教學質量也將隨之得到顯著提升。當前,MATLAB的卓越性能已可直接使用MATLAB函數來繪制任意函數曲線,其中,繪制規則區域(例如矩形、圓面、扇面、橢圓面等)上的函數圖形已較為輕松,但卻很難直接繪制不規則平面區域上的函數圖形,多個函數曲面所圍成的空間體圖形繪制則尤顯困難。本文基于MATLAB的工作機理,提出了繪制空間曲面、空間體、空間曲線的設計方法,并結合具體實例,相應分析了編程過程中的注意事項及相關技巧。
1繪制函數圖形的常用命令簡介
MATLAB中,plot、polar、plot3、mesh、surf、surfl函數能繪制給定的數據的表示的圖形,可分別繪制平面直角坐標系下曲線、極坐標系下曲線、空間直角坐標系下曲線、空間直角坐標系下曲面的網格圖、空間直角坐標系下曲面的刻面圖、空間直角坐標系下曲面的表面圖;而ezplot、ezpolar、ezplot3、ezmesh、ezsurf、ezsurfl函數則能繪制給定的函數表示的圖形,所繪制的圖形類型與沒有加“ez”前的函數相同。此外,meshc(ezmeshc)、surfc(ezsurfc)可在圖形下方畫一個等值線圖,meshz(ezmeshz)可在網格周圍畫一個窗簾圖, cylinder能繪制柱面,sphere能繪制球。以上函數的具體使用方法以及更多繪圖函數連同相應使用方法可以查閱MATLAB中的幫助文件,或參考有關MATLAB教程,如其詳情即可參見已知的參考文獻[1]所示。
2函數曲面的繪制
下文將以surf、ezsurf為例進行介紹,文中使用軟件為MATLAB7.4.0(R2007a)。mesh、ezmesh、surfl、ezsurfl用法與其類似,故此處略去。
21基本函數曲面的繪制
用ezsurf繪制給定函數的圖形,函數可以是顯式表達或參數方程形式。通常,可用參數方程來表示,其形式為:
x=x(s,t)
y=y(s,t)a≤s≤b,c≤t≤d(1)
其中a,b,c,d為常數
用參數方程表示的某區域上的函數圖形,均可用ezsurf繪制,可以包括矩形、圓面、環面、扇面、橢圓面、心形線所圍的區域等等。例如:繪制z=x2+y2的圖形:
(1)當命令形式為:ezsurf ('x^2+y^2')或ezsurf('x^2+y^2',[-2*pi,2*pi])或ezsurf('x^2+y^2',[-2*pi,2*pi,-2*pi,2*pi]) ,繪制效果如圖1(a)所示;
(2)當命令語句為:ezsurf('a*cos(b)','a*sin(b)','a^2',[0 1 0 2*pi]);axis equal,可繪制得到在單位圓面上的圖形,繪制效果如圖1(b)所示;
(3)當命令語句為:ezsurf('x^2+y^2',20); axis equal;可繪制得到在區域[-2π,2π]×[-2π,2π]上的圖形,繪制效果如圖1(c)所示;
(4)當命令語句為:ezsurf('a*cos(b)','a*sin(b)','a^2',[0 8^(1/2)*pi 0 2*pi]);axis equal,可繪制得到在半徑為圓面上的圖形,繪制效果如圖1(d)所示;第2期王欣潔:空間函數圖形的繪制及方法研究智能計算機與應用第3卷
(5)當命令語句為:ezsurf('a*cos(b)','5/3*a*sin(b) ','(a*cos(b))^2+(5/3*a*sin(b))^2',[0 3 0 2*pi],30);axis equal,可繪制得到在橢圓面x29+y225≤1上的圖形,繪制效果如圖1(e)所示。
在此過程中,需要注意以下幾點:
(1)注意圖形中坐標軸的范圍。一般情況下,MATLAB以最佳方式顯示圖形,如圖1(a)所示。此時,各坐標軸的單位尺度不一定相同,可使用axis equal命令達到各坐標軸單位尺度相同。
(2)繪圖區域不同,函數圖形的視覺感受亦不同,所以需特別注意繪圖區域的確定。
(3)ezsurf(...,n) 中的n指定繪圖區域的網格數,默認使用n×n網格,n的默認值為60。例如,ezsurf('x^2+y^2',20)可將繪圖區域[-2π,2π]×[-2π,2π]分成20×20的網格,如圖1(c)所示。 使用默認值所得圖像并不清晰,所以將網格密度減小,具體情況可以根據繪圖效果相應調整。
(4)選擇圖形窗口中的View—Camera Toolbar,點擊新出現的左邊第一個工具按鈕—Orbit Camera,選中圖形,拖動鼠標,可從不同的角度觀察圖形。
當然,如能直接用ezsurf函數繪圖,就也可以使用surf函數繪圖。首先,用meshgrid函數對給定的矩形區域進行網格剖分,得到剖分點坐標。然后,再用相應的函數表達式獲得各剖分點的函數值,即可利用surf函數繪圖。繪制圖1(a)、(b)的代碼分別為:
在使用surf函數繪圖過程中,需要注意如下兩點:
(1)獲取相應點的函數值不是矩陣運算,而是矩陣元素的運算,需要運用“”運算。
(2)需注意函數的定義域,可適當選取或調整繪圖區域,使其內含在定義域范圍內。
22復雜函數曲面的繪制
由拓撲理論可知,任何有界的連通區域和矩形區域是拓撲同胚的,即式(1)的形式總是存在的,但當一些區域邊界較復雜時,則不能或很難寫出上述形式的解析表達式,此時就無法使用ezsurf函數,但仍可以使用surf函數繪制。下面介紹這種繪制非規則區域上的函數圖形的通用方法,以下僅考慮區域邊界可由函數表示的任意有界、連通平面區域上的函數圖形的繪制。
由高等數學[2]中的定理知:任何有界連通平面區域均可表示成有限個X型或Y型區域的并,只要能繪制出X型或Y型區域上函數圖形,將這些X型或Y型區域上的圖形拼接在一起便可得到所需圖形效果(利用hold on 命令)。受meshgrid函數的啟發,設計以下算法,算法以X型區域為例給出,且不妨將該區域表示為:
D={(x,y)|y_lb(x)yy_ub(x),lbxub}
則算法可具體描述為:
(1)利用循環語句對區域D進行剖分,獲取網格節點的坐標,保存在矩陣X,Y中。
(1.1)將x軸區間K[lb,ub]等分為m份,得到區間[lb,ub]剖分點的坐標,保存在向量x_temp中;
(1.2)依次對x_temp中的每一個元素xi(i=1,2,…,m),根據函數y_lb(xi)、y_ub(xi)計算y值相應的變換范圍,并將區間[y_lb(xi),y_ub(xi)]再等分為n份,獲得對應剖分點的坐標作為Y的第i列的值,而X的第i列的值均取為xi。
(2)利用函數表達式,獲得相應點的函數值Z。
(3)利用surf(X,Y,Z)命令繪制其圖形。
試舉一例,單位圓面上z=x2+y2的圖形,可由下述代碼實現。其圖形如圖1(f)所示。
對程序注釋如下:
(1)參數m、n的取值(可以取為MATLAB默認值60)具體可根據圖形效果調整。
(2)此方法的優點是通用性強,但缺點是區域中一些相對狹窄的地方剖分過細,會損失原圖形的部分美感,見圖1(f)。
(3)可借助圖2(將上述代碼“m=60;n=60;”修改為“m=10;n=10;”,“Z=X.^2+Y.^2; surf(X,Y,Z);”修改為“Z=zeros(n,m); mesh(X,Y,Z); hold on;Z=X.^2+Y.^2; mesh(X,Y,Z);hold off;”)進一步理解方法思想。
3多個曲面所圍成的空間體
當繪制不同曲面的繪圖區域均可由式(1)解析表達時,繪制命令就比較簡單。例如,橢圓拋物面z=x2+2y2與z=3-2x2-y2所圍成的空間體,其在xoy平面上的投影為單位圓盤,可由下述代碼實現,圖形效果如圖3所示。
一般來說,當繪制不同曲面的繪圖區域邊界較復雜時,例如,旋轉拋物面z=x2+y2, 柱面x=y2,平面z=0及x=1所圍空間體的圖形,如圖4所示,可先計算繪圖區域,然后利用第2節中的方法將每個曲面逐一畫出,拼接在一起顯示即可。下面介紹改進的算法實現,算法的核心思想是實現坐標軸的順序變換。所謂變換坐標軸是指,計算網格點的坐標和相應網格點處的函數值,坐標系順序固定為X、Y、Z,繪圖時根據X、Y、Z與待繪制的曲面坐標軸的對應關系傳遞相應的參數。對應于曲面,可以向不同的坐標平面投影,然后通過交換坐標軸,將其仍視為向“xoy”平面投影的做法。這樣做可使空間體的繪制程序模式化,空間體的繪制也更容易理解和實現。上述問題待繪制的四個曲面可分別表示為:
4結束語
本文根據MATLAB的工作機理,受meshgrid函數的啟發,設計了繪制區域邊界可由函數表示的任意有界連通平面區域上的函數曲面的方法,并進一步介紹了如何繪制多個曲面所圍成的空間體的方法,算法通用性好,關鍵技巧則選定為坐標軸變換。利用plot3、surf函數繪制曲線,圖形繪制更為形象、美觀;利用ezsurf、surf繪制曲線可以加深對曲線與曲面關系、一元函數與二元函數關系的理解,基于不同的理解方式,可設計不一樣的繪制空間曲線圖形的方法。
靈活運用本文的方法,可以繪制所需要的其他空間曲面、多個曲面所圍成的空間體、以及曲面的交線或空間曲線,可為提高今后的高等數學教學提供了改進的教學模具。同時,該內容也可設定為大學生數學實驗的一部分內容,在實驗當中,借助幾何的直觀實現,提升學生對數學學習的興趣,加深學生對相關概念、理論的理解。
參考文獻:
[1]蘇金明,阮沈勇. MATLAB實用教程[M].北京:電子工業出版社,2005.
[2]同濟大學數學系. 高等數學(第五版)[M]. 北京:高等教育出版社,2002.
[3]唐澤圣,等. 三維數據場可視化[M]. 北京:清華大學出版社,2000.
[4]蘇金明,阮沈勇. MATLAB 6.1實用指南[M]. 北京:電子工業出版社,2002.
[5]周德亮,白巖. 用MATLAB解決高等數學中的圖形問題[J]. 數學的實踐與認識,2002,32(1):122-124.