- 計算機仿真技術與CAD
- 李國勇主編
- 4603字
- 2019-01-09 15:00:26
1.4 MATLAB的繪圖功能
MATLAB被控制界廣泛接受的另一個重要原因是,它提供了十分方便的一系列繪圖命令。例如,線性坐標、對數坐標、半對數坐標及極坐標等命令,它還允許用戶同時打開若干圖形窗口,對圖形標注文字說明等,它使得圖形繪制和處理等復雜工作變得簡單得令人難以置信。
1.4.1 二維圖形
1.基本形式
MATLAB最基本的繪圖函數為plot()。
如果y是一個n維行向量或列向量,那么plot(y)將繪制一個y元素和y元素排列序號1,2,…,n之間關系的線性坐標圖。如y是一個n ×m維矩陣,那么plot(y)將同時繪出每列元素與其排列序號1,2,…,n之間關系的m條曲線。例如
>>y=[0 0.48 0.84 1 0.91 0.6 0.14];plot(y)
則顯示如圖1-2所示的簡單曲線。

圖1-2 簡單曲線
如果x和y是兩個等長向量,那么plot(x,y)將繪制一條x和y之間關系的線性坐標圖。例如,利用以下命令可顯示如圖1-3所示正弦曲線。
>>x=0:0.01:2*pi;y=sin(x);plot(x,y)

圖1-3 正弦曲線
2.多重線型
在同一圖形中可以繪制多重線型,其基本命令格式為
plot(x1,y1,x2,y2,…,xn,yn)
其中,向量x1,x2,…,xn為x軸變量;向量y1,y2,…,yn為y軸變量。
以上命令可將x1對y1,x2對y2,…,xn對yn的圖形繪制在一個圖形中,而且分別采用不同的顏色或線型。例如,利用以下命令可顯示如圖1-4所示的正余弦曲線。
>>x=0:0.1:2*pi;plot(x,sin(x),x,cos(x))
當plot()命令作用于復數數據時,通常虛部是忽略的。然而有一個特殊情況,即當plot()只作用于單個復變量z時,則實際繪出實部對應于虛部的關系圖形(復平面上的一個點)。即這時plot(z)等價于plot(real(z),image(z)),其中z為矩陣中的一個復向量。

圖1-4 正余弦曲線
表1-6 MATLAB中繪圖命令的各種選項

3.圖形修飾及文本標注
MATLAB中對于同一圖形中的多重線,不僅可分別定義其線型,而且可分別選擇其顏色,帶有選項的曲線繪制命令的調用格式為
plot(x1,y1,選項1,x2,y2,選項2,…,xn,yn,選項n)
其中,向量x1,x2,…,xn為x軸變量;向量y1,y2,…,yn為y軸變量。選項如表1-6所示。
表1-6中的線型和顏色選項可以同時使用。例如
>>x=0:0.1:2*pi;plot(x,sin(x),′-g′,x,cos(x),′-.r′)
繪制完曲線后,MATLAB還允許用戶使用它提供的特殊繪圖函數來對屏幕上已有的圖形加注釋、題頭或坐標網格。例如
>>x=0:0.1:2*pi;y=sin(x);plot(x,y) >>title(′Figure Example′) %給出題頭 >>xlabel(′This is x axis′) %x軸的標注 >>ylabel(′This is y axis′) %y軸的標注 >>grid %增加網格
除了在標準位置書寫標題和軸標注以外,MATLAB還允許在圖形窗口的位置利用line()和text()命令畫直線或寫字符串,它們的調用格式分別為
line(x,y)和text(x,y,chstr,選項)
其中,line()函數在給定的圖形窗口上繪制一條由向量x和y定義的折線;text()函數是在指定的點(x,y)處寫一個chstr繪出的字符串;而選項決定x,y坐標的單位,如選項為‘sc’,則x,y表示規(guī)范化窗口的相對坐標,其范圍為0到1,即左下角坐標為(0,0),而右上角的坐標為(1,1)。如省略選項,則x,y坐標的單位和圖中是一致的。例如
>>text(2.5,0.7,′sin(x)′)
用text()命令可以在圖形中的任意位置加上文本說明,但是必須知道其位置坐標;而利用另一個函數gtext(),則可以用鼠標來對要添加的文本字符串定位。在MATLAB的工作空間中鍵入下列命令:
>>gtext(′sin(x)′)
則在圖中將出現一個十字叉,用鼠標將它移動到添加文本的位置,單擊鼠標,gtext(′sin(x)′)命令中的文本字符串“sin(x)”就自動添加到指定的位置。
4.圖形控制
MATLAB允許將一個圖形窗口分割成n ×m個部分,對每一部分可以用不同的坐標系單獨繪制圖形。窗口分割命令的調用格式為
subplot(n,m,k)
其中,n和m分別表示將這個圖形窗口分割的行和列數;k表示每一部分的代號。例如,想將窗口分割成4 ×3個部分,則右下角的代號為12,MATLAB最多允許9 ×9的分割。
盡管MATLAB可以自動根據要繪制曲線數據的范圍來選擇合適的坐標系,使得曲線能夠盡可能清晰地顯示出來,但是,如果覺得自動選擇的坐標仍不合適,則可以用手動的方式來選擇新的坐標系。調用函數的格式為
axis([xmin,xmax,ymin,ymax])
另外,MATLAB還提供了清除圖形窗口命令clf、保持當前窗口的圖形命令hold、放大和縮小窗口命令zoom等。
5.特殊坐標圖形
除了基本的繪圖命令plot()外,MATLAB還允許繪制極坐標曲線、對數坐標曲線、條形圖和階梯圖等,其常用的函數如表1-7所示。
表1-7 特殊二維曲線繪制函數

表1-7中參數x,y分別表示橫、縱坐標繪圖數據;c表示顏色選項;ym,yM表示誤差圖的上下限向量;n表示直方圖中的直條數,默認值為10。
(1)極坐標曲線繪制函數的調用格式為
polar(theta,rho,選項)
其中,theta和rho分別為長度相同的角度向量和幅值向量;選項的內容和plot()函數的基本一致。
(2)對數和半對數曲線繪制函數的調用格式分別為
semilogx(x,y,選項) %繪制橫軸為對數標度的圖形,選項同plot() semilogy(x,y,選項) %繪制縱軸為對數標度的圖形,選項同plot() loglog(x,y,選項) %繪制兩個軸均為對數標度的圖形,選項同plot()
函數semilogx()僅對橫坐標進行對數變換,縱坐標仍保持線性坐標;而semilogy()只對縱坐標進行對數變換,橫坐標仍保持線性坐標;loglog()則對橫、縱坐標都進行對數變換(最終得出全對數坐標曲線)。選項的定義與plot()函數的完全一致。
【例1-6】 利用圖形窗口分割方法將極坐標方程
ρ=cos(θ/3)+1/9
用四種繪圖方式畫在不同的窗口中。
解 MATLAB程序ex1_6.m如下
%ex1_6.m theta=0:0.1:6*pi;rho=cos(theta /3)+1/9; subplot(2,2,1);polar(theta,rho); subplot(2,2,2);plot(theta,rho); subplot(2,2,3);semilogx(theta,rho);grid subplot(2,2,4);hist(rho,15)
則顯示如圖1-5所示曲線。
(3)與線性坐標向量的選取不同,在MATLAB下還給出了一個實用的函數logspace()按對數等間距的分布來產生一個向量,該函數的調用格式為
x=logspace(n,m,z)
其中,10n和10m分別表示向量的起點和終點;而z表示需要產生的向量點個數,當忽略該參數時,z為默認值50。

圖1-5 繪圖窗口的分割與不同圖形繪制
6.函數圖形
MATLAB還允許調用函數fplot()或ezplot()來直接繪制出函數的圖形,其函數的調用格式為
fplot(f,[a,b],N)和ezplot(f,g,[a,b],N)
其中,f,g為函數名,它們既可為自定義的任意M函數,也可為基本數學函數;[a,b]為繪圖區(qū)間;N為點數,默認時將取N=25。
例如繪制如圖1-3所示的正弦函數在一個周期內的曲線,可采用如下命令
>>fplot(′sin′,[0,2*pi])
利用函數ezplot()可以直接繪制隱函數曲線,隱函數即滿足方程f(x,y)=0的x,y之間的關系式。因為很多隱函數無法求出x,y之間的關系,所以無法先定義一個x向量再求出相應的y向量,從而不能采用plot()函數來繪制其曲線。另外,即使能求出x,y之間的顯式關系,但不是單值繪制,則繪制起來也是很麻煩的。
【例1-7】 試繪制隱函數f(x,y)=x2 sin(x+y2)+y2 ex+y+5cos(x2 +y)=0的曲線。
解 MATLAB命令如下。
>>ezplot(′x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)′)
執(zhí)行以上MATLAB命令,結果顯示如圖1-6所示曲線。
7.利用鼠標繪制圖形
MATLAB允許利用鼠標來點選屏幕點,命令格式為
[x,y,button] =ginput(n)
其中,n為選擇點的數目,返回的x,y向量分別存儲被點中的n個點的坐標,而button亦為一個n維向量,它的各個分量為鼠標鍵的標號,如button(i)=1,則說明第i次按下的是鼠標左鍵,而該值為2或3則分別對應于中鍵和右鍵。
【例1-8】 用鼠標左鍵繪制折線,同時在鼠標左鍵點中的位置輸出一個含有該位置信息的字符串,利用鼠標中鍵或右鍵中止繪制。

圖1-6 隱函數曲線
解 MATLAB程序ex1_8.m如下。
%ex1_8.m clf;axis([0,10,0,5]);hold on %清除圖形窗口,并定義坐標軸范圍和保護窗口內容不被刪除 x=[];y=[]; for i=1:100 [x1,y1,button] =ginput(1); chstr=[′(′,num2str(x1),′,′,num2str(y1),′)′];text(x1,y1,chstr); x=[x,x1];y=[y,y1];line(x,y) if(button~=1);break;end end hold off %取消窗口保護
1.4.2 三維圖形
1.三維曲線繪制
與二維曲線相對應,MATLAB提供了plot3()函數,它允許在一個三維空間內繪制出三維的曲線,該函數的調用格式為
plot3(x,y,z,選項)
其中,x,y,z為維數相同的向量,分別存儲曲線的三個坐標的值,選項的意義同plot()函數。
例如利用以下命令,可得到圖1-7 所示曲線。

圖1-7 三維圖形
>>t=0:pi/50:10*pi;plot3(sin(t),cos(t),t)
2.三維曲面繪制
如果已知二元函數z=f(x,y),則可以繪制出該函數的三維曲面圖。在繪制三維圖之前,應該先調用meshgrid()函數生成網格矩陣數據x和y,然后可以按函數公式用點運算的方式計算出z矩陣,最后就可以用mesh()等函數進行三維圖形繪制了。
MATLAB提供的mesh()函數用于繪制三維表面網格圖,該函數的調用格式為
mesh(x,y,z,c)
其中,x,y,z分別構成該曲面的x,y和z向量;c為顏色矩陣,表示在不同的高度下的顏色范圍,如果省略此選項,則會自動地假定c=z,亦顏色的設定是正比于圖形的高度的,這樣就可以得出層次分明的三維圖形來。
【例1-9】 試繪制二元函數z=f(x,y)=(x2 -2x)e -x2-y2-xy的曲線。
解 MATLAB命令如下。
>>[x,y] =meshgrid(-3:0.1:3,-2:0.1:2); >>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);mesh(x,y,z)
執(zhí)行以上命令便可得到圖1-8所示的曲線。

圖1-8 三維表面網格圖
關于三維圖形的繪制,常用的其他命令有
surf(x,y,z) %繪制三維表面圖形 surfc(x,y,z) %繪制帶有等高線的三維表面圖形 surf1(x,y,z) %繪制帶有陰影的三維表面圖形 waterfall(x,y,z) %繪制瀑布形三維圖形 contour(x,y,z) %等高線圖形。
3.三維圖形視角設置
MATLAB三維圖形顯示中提供了修改視角的功能,允許用戶從任意的角度觀察三維圖形,實現視角轉換有兩種方法。其一是使用圖形窗口工具欄中提供的三維圖形轉換按鈕來可視地對圖形進行旋轉;其二是用view()函數有目的地進行旋轉。
函數view()的調用格式為
view(α,β)
其中,方位角α為視點在x-y平面投影點與y軸負方向之間的夾角,默認值為-37.5 °;方位角β為視點和x-y平面的夾角,默認值為30 °。例如,俯視圖可以由view(0,90)來設置;正視
圖可以由view(0,0)來設置;俯視圖可以由view(90,0)來設置。
【例1-10】 試在同一窗口中繪制二元函數z=f(x,y)=(x2 -2x)e -x2-y2-xy曲面的三視圖和三維表面圖形。
解 MATLAB命令如下。
>>[x,y]=meshgrid(-3:0.1:3,-2:0.1:2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); >>subplot(2,2,1);surf(x,y,z);view(0,90);subplot(2,2,2);surf(x,y,z);view(90,0); >>subplot(2,2,3);surf(x,y,z);view(0,0);subplot(2,2,4);surf(x,y,z);
執(zhí)行以上命令便可得到圖1-9所示曲線。

圖1-9 二元函數的三視圖與表面圖
1.4.3 圖像處理
MATLAB提供了簡單的圖像輸入輸出功能,而圖像處理工具箱提供了圖像處理的強大功能。這里由于篇幅限制,僅介紹簡單的入門知識。
(1)讀圖像文件
圖像文件讀取函數imread()的調用格式為
W=imread(文件名)
該命令將文件中的圖像讀入MATLAB工作空間,生成8位無符號整型三維數組W,其中W(:,:,1),W(:,:,2)和W(:,:,3)分別對應于彩色圖像的紅色、綠色和藍色分量。如果文件中存儲的是灰度圖像,則W為矩陣,存儲圖像的像素值。
(2)圖像顯示
MATLAB及其圖像處理工具箱中提供了多個圖像顯示函數,如image(),imview(),ims-how()和imtool(),它們各有特色。
(3)圖像顏色空間轉換
彩色圖到灰度圖的轉換可以由函數rgb2gray()完成。另外,不同顏色空間的圖像可以通過rgb2hsv(),hsv2rgb()等進行轉換。
(4)圖像邊緣提取
圖像邊緣提取是圖像識別的重要基礎工作。利用MATLAB中的edge()函數,可以提取圖像邊緣,該函數的調用格式為
W1=edge(W,m)
其中,W為灰度圖像矩陣;m為提取算法,可以選擇′canny′和′sobel′等不同算法,默認算法為Canny算法。