MatLab繪圖
作為一個功能強大的工具軟件,Matlab具有很強的圖形處理功能,提供了大量的二維、三維圖形函數。由於系統采用面向對象的技術和豐富的矩陣運算,所以在圖形處理方面方便又高效。
一般來說,一個命令行輸入一條命令,命令行以回車結束。但一個命令行也可以輸入若干條命令,各命令之間以逗號分隔,若前一命令后帶有分號,則逗號可以省略。
如果一個命令行很長,一個物理行之內寫不下,可以在第一個物理行之后加上3個小黑點並按下回車鍵,然后接着下一個物理行繼續寫命令的其他部分。3個小黑點稱為續行符,即把下面的物理行看作該行的邏輯繼續。
二維圖形
一、 plot函數
① 函數格式:plot(x,y) 其中x和y為長度相同
坐標向量
函數功能:以向量x、y為軸,繪制曲線。
【例】 在區間0≤X≤2內,繪制正弦曲線y=sin(x)
其程序為:
x=0:pi/100:2*pi; %必須加上分號,否則x直接顯示出來啦
y=sin(x); %必須加上分號,否則x直接顯示出來啦
plot(x,y)
【例】在0≤x≤2區間內,繪制曲線 y=2e-0.5xcos(4πx)
程序如下:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
plot函數最簡單的調用格式是只包含一個輸入參數:
plot(x)
在這種情況下,當x是實向量時,以該向量元素的下標為橫坐標,元素值為縱坐標畫出一條連續曲線,這實際上是繪制折線圖。
② 含多個輸入參數的plot函數調用格式為: plot(x1,y1,x2,y2,…,xn,yn)
Ⅰ.當輸入參數都為向量時,x1和y1,x2和y2,…,xn和yn分別組成一組向量對,每一組向量對的長度可以不同。每一向量對可以繪制出一條曲線,這樣可以在同一坐標內繪制出多條曲線。
Ⅱ.當輸入參數有矩陣形式時,配對的x,y按對應列元素為橫、縱坐標分別繪制曲線,曲線條數等於矩陣的列數。
【例】同時繪制正、余弦兩條曲線y1=sin(x)和
y2=cos(x),其程序為:
x=0:pi/100:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
或者
x=[0:0.5:360]*pi/180;
plot(x,sin(x),x,cos(x))
中間變量繪圖
t=0:0.1:2*pi;
x=t.*sin(3*t); %.*表示點乘,*表示矩陣乘法
y=t.*sin(t).*sin(t);
plot(x,y);
【例】 分析下列程序繪制的曲線。
x1=linspace(0,2*pi,100);
x2=linspace(0,3*pi,100);
x3=linspace(0,4*pi,100);
y1=sin(x1);
y2=1+sin(x2);
y3=2+sin(x3);
x=[x1;x2;x3]';
y=[y1;y2;y3]';
plot(x,y,x1,y1-1)
③ 具有兩個縱坐標標度的圖形
在MATLAB中,如果需要繪制出具有不同縱坐標標度的兩個圖形,可以使用plotyy繪圖函數。調用格式為:
plotyy(x1,y1,x2,y2)
其中x1,y1對應一條曲線,x2,y2對應另一條曲線。橫坐標的標度相同,縱坐標有兩個,左縱坐標用於x1,y1數據對,右縱坐標用於x2,y2數據對。
【例】用不同標度在同一坐標內繪制曲線
y1=0.2e-0.5xcos(4πx) 和
y2=2e - 0.5xcos(πx)
④ 圖形保持
hold on/off命令控制是保持原有圖形還是刷新原有圖形,不帶參數的hold命令在兩種狀態之間進行切換。
hold on:啟動圖形保持功能,當前坐標軸和圖形都將保持,此后繪制的圖形都將添加在這個圖形之上,並且自動調整坐標軸的范圍。
hold off:關閉圖形保持功能。
hold :在hold on 和hold off命令之間進行切換。
【例】采用圖形保持,在同一坐標內繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。
程序如下:
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
hold on
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
hold off
二、設置曲線樣式格式:
MATLAB提供了一些繪圖選項,用於確定所繪曲線的線型、顏色和數據點標記符號,它們可以組合使用。例如,“b-.”表示藍色點划線,“y:d”表示黃色虛線並用菱形符標記數據點。當選項省略時,MATLAB規定,線型一律用實線,顏色將根據曲線的先后順序依次。
調用格式為:plot(x1,y1,選項1,x2,y2,選項2,…,xn,yn,選項n)
要設置曲線樣式可以在plot函數中加繪圖選項,其調用格式為:
plot(x,y1,’cs’,...)
其中c表示顏色, s表示線型。
【例】 用不同線型和顏色重新繪制例2圖形,其程序為:
x=0:pi/100:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'go',x,y2,'b-.')
其中參數'go'和'b-.'表示圖形的顏色和線型。g表示綠色,o表示圖形線型為圓圈;b表示藍色,-.表示圖形線型為點划線。
【例】在同一坐標內,分別用不同線型和顏色繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),標記兩曲線交叉點。
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
k=find(abs(y1-y2)<1e-2);
%查找y1與y2相等點(近似相等)的下標
x1=x(k); %取y1與y2相等點的x坐標
y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);
%求y1與y2值相等點的y坐標
plot(x,y1,x,y2,'k:',x1,y3,'bp');
三、圖形標記
在繪制圖形的同時,可以對圖形加上一些說明,如圖形名稱、圖形某一部分的含義、坐標說明等,將這些操作稱為添加圖形標記。
title(‘加圖形標題’);當前軸的正上方居
中位置處輸出文本作為標題
xlabel('加X軸標記');
ylabel('加Y軸標記');
text(X,Y,'添加文本');
函數中的說明文字,除使用標准的ASCII字符外,還可使用LaTeX格式的控制字符,這樣就可以在圖形上添加希臘字母、數學符號及公式等內容。例如,text(0.3,0.5,‘sin({\omega}t+{\beta})’)將得到標注效果sin(ωt+β)。
x=0:pi/100:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'b*',x,y2,'r>');
title('繪制正弦,余弦函數');
% title(date);
xlabel('橫軸');
ylabel('縱軸');
text(2,1,'正弦曲線');
text(1,0.6,'余弦曲線');
【例】 在坐標范圍0≤X≤2π,-2≤Y≤2內重新繪制正弦曲線,其程序為:
x=linspace(0,2*pi,60);
%生成含有60個數據元素的向量X
y=sin(x);
plot(x,y);
axis ([0 2*pi -2 2]);
四、坐標控制
axis函數的調用格式為:
axis([xmin xmax ymin ymax zmin zmax])
axis函數功能豐富,常用的格式還有:
axis equal:縱、橫坐標軸采用等長刻度。
axis square:產生正方形坐標系(缺省為矩形)。
axis auto:使用缺省設置。
axis off:取消坐標軸。
axis on:顯示坐標軸。
給坐標加網格線用grid命令來控制。grid on/off命令控制是畫還是不畫網格線,不帶參數的grid命令在兩種狀態之間進行切換。
給坐標加邊框用box命令來控制。box on/off命令控制是加還是不加邊框線,不帶參數的box命令在兩種狀態之間進行切換。
五、加圖例
給圖形加圖例命令為legend。該命令把圖例放置在圖形空白處,用戶還可以通過鼠標移動圖例,將其放到希望的位置。
格式:legend('圖例說明','圖例說明');
【例】 為正弦、余弦曲線增加圖例,其程序為:
x=0:pi/100:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2, '--');
legend('sin(x)','cos(x)');
六、對函數自適應采樣的繪圖函數
fplot函數則可自適應地對函數進行采樣,能更好地反應函數的變化規律。
fplot函數的調用格式為:
fplot(fname,lims,tol,選項)
其中fname為函數名,以字符串形式出現,lims為x,y的取值范圍,tol為相對允許誤差,其系統默認值為2e-3。選項定義與plot函數相同。
【例】用fplot函數繪制f(x)=cos(tan(πx))的曲線。
命令如下:
fplot('cos(tan(pi*x))',[ 0,1],1e-4)
或可先建立函數文件fct.m,其內容為:
function y=fct(x)
y=cos(tan(pi*x));
用fplot函數調用fct.m函數,其命令為:
fplot(‘fct’,[0 1])
七.極坐標圖
polar函數用來繪制極坐標圖,其調用格式為:
polar(theta,rho,選項)
其中theta為極坐標極角,rho為極坐標矢徑,選項的內容與plot函數相似。
例 繪制r=sin(t)cos(t)的極坐標圖,並標記數據點。
程序如下:
1 t=0:pi/50:2*pi; 2 r=sin(t).*cos(t); 3 polar(t,r,'-*');
八. 圖形標記
title(‘加圖形標題');
xlabel('加X軸標記');
ylabel('加Y軸標記');
text(X,Y,'添加文本');
Legend(‘sin(x)’);%加圖例
繪制三維螺旋曲線
1 t=0:pi/50:10*pi; 2 x=sin(t),y=cos(t); 3 plot3(x,y,t); 4 title('helix'),text(0,0,0,'origin'); 5 xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t'); 6 grid on;%加上虛線網格線可以更好的看到對應區間的值
九.繪制三維網格圖。函數格式:mesh(x,y,z,c)
其中:x,y控制X和Y軸坐標
矩陣z是由(x,y)求得Z軸坐標
(x,y,z)組成三維空間的網格點
c用於控制網格點顏色
1 %繪制三維網格曲面圖 2 x=[0:0.15:2*pi]; 3 y=[0:0.15:2*pi]; 4 z=sin(y')*cos(x); %矩陣相乘 5 mesh(x,y,z);
1 %畫出由函數形成的立體網狀圖: 2 x=linspace(-2, 2, 25); % 在x軸上取25點 3 y=linspace(-2, 2, 25); % 在y軸上取25點 4 [xx,yy]=meshgrid(x,y); % xx和yy都是21x21的矩陣 5 zz=xx.*exp(-xx.^2-yy.^2); % 計算函數值,zz也是21x21的矩陣 6 mesh(xx, yy, zz); % 畫出立體網狀圖
十.surf函數
繪制三維曲面圖,各線條之間的補面用顏色填充。surf函數和mesh函數的調用格式一致。
函數格式: surf (x,y,z)
其中x,y控制X和Y軸坐標,矩陣z是由x,y求得的曲面上Z軸坐標。
1 % 繪制三維曲面圖 2 x=[0:0.15:2*pi]; 3 y=[0:0.15:2*pi]; 4 z=sin(y')*cos(x); %矩陣相乘 5 surf(x,y,z);
1 %剔透玲瓏球 2 [X0,Y0,Z0]=sphere(30); %產生單位球面的三維坐標 3 X=2*X0;Y=2*Y0;Z=2*Z0; %產生半徑為2的球面的三維坐標,若加上常數則是圓心 4 surf(X0,Y0,Z0); %畫單位球面 5 shading interp %采用插補明暗處理 6 hold on; mesh(X,Y,Z);hold off %畫外球面 7 hidden off %產生透視效果 8 axis off %不顯示坐標軸
1 %衛星返回地球的運動軌線示意。 2 R0=1; %以地球半徑為一個單位 3 a=12*R0;b=9*R0;T0=2*pi; %T0是軌道周期 4 T=5*T0;dt=pi/100;t=[0:dt:T]';f=sqrt(a^2-b^2); %地球與另一焦點的距離 5 th=12.5*pi/180; %衛星軌道與x-y平面的傾角 6 E=exp(-t/20); %軌道收縮率 7 x=E.*(a*cos(t)-f);y=E.*(b*cos(th)*sin(t));z=E.*(b*sin(th)*sin(t)); 8 plot3(x,y,z,'g') %畫全程軌線 9 [X,Y,Z]=sphere(30);X=R0*X;Y=R0*Y;Z=R0*Z; %獲得單位球坐標 10 grid on,hold on,surf(X,Y,Z),shading interp %畫地球 11 x1=-18*R0;x2=6*R0;y1=-12*R0;y2=12*R0;z1=-6*R0;z2=6*R0; 12 axis([x1 x2 y1 y2 z1 z2]) %確定坐標范圍 13 view([117 37]),comet3(x,y,z,0.02),hold off %設視角、畫運動軌線
十一.等高線圖
1 %多峰函數peaks的等高線圖 2 [x,y,z]=peaks(30);%產生一個凹凸有致的曲面,包含了三個局部極大點及三個局部極小點 3 contour3(x,y,z,16); 4 xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis'); 5 title('contour3 of peaks')
十二.動畫設計
1 %動畫功能函數:getframe、moviein和movie 2 %播放一個不斷變化的眼球程序。 3 m=moviein(20); %建立一個20個列向量組成的矩陣 4 for j=1:20 5 plot(fft(eye(j+10))) %繪制出每一幅眼球圖並保存到m矩陣中 6 m(:,j)=getframe; 7 end 8 movie(m,10);%以每秒10幅的速度播放畫面