第一单元 第3课 Matlab基本语法与操作 1. plot指令的基本调用格式 2.多次叠绘、双纵坐标和多子图 3.多子图 4.绘制图形的辅助操作 5.极坐标图 6.三维绘图的基本操作 7.简单的图像处理
1. plot指令的基本调用格式 (1)plot(x) x为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线x为实数二维数组时,则按列绘制每列元素值相对其下标的曲线,曲线数等于x数组的列数。x为复数二维数组时,则按列分别以数组的实部和虚部为横、纵坐标绘制多条曲线 (2)plot(x, y) x、y为同维数组时,绘制以x、y元素为横纵坐标的曲线x为向量,y为二维数组、且其列数或行数等于x的元素数时,绘制多条不同颜色的曲线x为二维数组,y为向量时,情况与上相同,只是y仍为纵坐标。
(3)plot(x1,y1, x2, y2, …) 绘制以x1为横坐标、y1为纵坐标的曲线1,以x2为横坐标、y2为纵坐标的曲线2,等等。其中x为横坐标,y为纵坐标,绘制y=f(x)函数曲线。 例3.1 使用直角坐标系在[0,2π]区间内,绘制曲线 x= 0:pi/100:2*pi; y= 2*exp(-0.5*x).*sin(2*pi*x); plot(x,y)
例3.2 使用参数方程绘制曲线 绘制曲线 t= -pi:pi/100:pi; x= t.*cos(3*t); y= t.*sin(t).^2; plot(x,y)
例3.3 绘制复杂曲线 用图形表示连续调制波形 及其包络线。 t=(0:pi/100:pi)’; %长度为101的时间采样列向量 y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9; y3=sin(t3).*sin(9*t3); plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') axis([0,pi,-1,1]) %控制轴的范围
2.多次叠绘、双纵坐标和多子图 多次叠绘 多次调用plot命令在一幅图上绘制多条曲线,需要hold指令的配合。hold on 保持当前坐标轴和图形,并可以接受下一次绘制。hold off 取消当前坐标轴和图形保持,这种状态下,调用plot绘制完全新的图形,不保留以前的坐标格式、曲线。
例 3.4 重绘波形 及其包络线。 t=(0:pi/100:pi)'; %长度为101的时间采样列向量 y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9; y3=sin(t3).*sin(9*t3); plot(t,y1,'r:’) hold on plot(t,y2,'b‘) plot(t3,y3,'bo') axis([0,pi,-1,1]) %控制轴的范围 hold off
例3.5 利用hold绘制离散信号的波形 t=2*pi*(0:20)/20; y=cos(t).*exp(-0.4*t); stem(t,y,'g'); hold on; stairs(t,y,'r'); hold off
3.多子图 subplot(m, n, k) :使(mxn)幅子图中第k个子图成为 当前图 subplot(‘postion’, [left, bottom, width,height]) :在指定的位置上开辟子图,并成为当前图 说明: subplot(m, n, k)的含义:图形窗口包含(mxn)个子图,k为要指定的当前子图的编号。其编号原则:左上方为第1子图,然后向右向下依次排序。该指令按缺省值分割子图区域。subplot(‘postion’, [left, bottom, width, height])用于手工指定子图位置,指定位置的四元组采用归一化的标称单位,即认为整个图形窗口绘图区域的高、宽的取值范围都是[0, 1],而左下角为(0,0)坐标。产生的子图彼此独立。所有的绘图指令均可以在子图中使用。
例3.6 演示subplot指令 t=(pi*(0:1000)/1000)'; y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t); subplot(2,2,1),plot(t,y1);axis([0,pi,-1,1]) subplot(2,2,2),plot(t,y2);axis([0,pi,-1,1]) subplot('position',[0.2,0.05,0.6,0.45]) plot(t,y12,'b-',t,[y1,-y1],'r:');
4.绘制图形的辅助操作 图形的基本属性:线型,点标记,颜色 其他属性:标题title,坐标轴标注xlabel,ylabel,图例legend,显示网格grid on 或grid off,保持当前窗口的图像hold on 或hold off,新建绘图窗口figure
曲线颜色控制符 符号 - : -. -- 含义 实线 虚线 点划线 双划线 曲线线形控制符 符号 b g r c m y k w 含义 兰 曲线颜色控制符 符号 - : -. -- 含义 实线 虚线 点划线 双划线 曲线线形控制符 符号 b g r c m y k w 含义 兰 绿 红 青 品红 黄 黑 白
例3.7 绘制图形的辅助操作 t=(0:15)*2*pi/15; y=sin(t); subplot(3,2,1),plot(t,y);title('Linsstyle is default') subplot(3,2,2),plot(t,y, 'o');title('Linsstyle is o') subplot(3,2,3),plot(t,y, 'k:');title('Linsstyle is k:') subplot(3,2,4),plot(t,y, 'k:*');title('Linsstyle is k:*') subplot(3,2,5),plot(t,y, 'm-d');title('Linsstyle is m-d') subplot(3,2,6),plot(t,y, 'r-p');title('Linsstyle is r-p')
例 3.8 坐标控制 绘制椭圆,长轴为3.25,短轴为1.15 t=0:2*pi/99:2*pi; x=1.15*cos(t);y=3.25*sin(t); % y为长轴,x为短轴 subplot(2,2,1);plot(x, y); axisoff title('axisoff'); subplot(2,2,2);plot(x,y); axisimage; title('axisimage'); subplot(2,2,3);plot(x,y); axisequal; title('axisEqual'); subplot(2,2,4);plot(x,y); axissquare; title('axisSquare');
例3.9 绘制y=1-exp(-93*t).*cos(0.7*t) t=6*pi*(0:100)/100; y=1-exp(-0.3*t).*cos(0.7*t); tt=t(find(abs(y-1)>0.05)); ts=max(tt); plot(t,y,'r-'); gridon; axis([0,6*pi,0.6,max(y)]); title('y=1-exp(-\alpha*t)*cos(\omega*t)'); holdon; plot(ts,0.95,'bo'); holdoff; set(gca,'xtick',[2*pi,4*pi,6*pi],'ytick', [0.95,1,1.05,max(y)]); gridon;
5.极坐标图 polar函数用来绘制极坐标图,其调用格式为: polar(theta,rho,选项) 例3.10:绘制ρ=sin(2θ)cos(2θ)的图形 theta = 0:0.01:2*pi; rho = sin(2*theta).*cos(2*theta); polar(theta,rho,'k');
6.三维绘图的基本操作 1、三维线图指令plot3 例3.10:绘制宝石项链 t=(0:0.02:2)*pi; x=sin(t); y=cos(t); z=cos(2*t); plot3(x,y,z,'b-',x,y,z,'bd'); view([-82,58]); boxon legend('链','宝石')
2、三维网线图(mesh)和曲面图(surf) 画函数z=f(x,y)所代表的三维空间曲面,需要做以下的数据准备工作: (1)确定自变量的取值范围和取值间隔。x=x1:dx:x2;y=y1:dy:y2; (2)构成x-y平面上的自变量采样“格点”矩阵。 (3)利用MATLAB指令meshgrid产生“格点”矩阵; (4)[xa, ya]=meshgrid(x,y) ; (5)计算函数在自变量采样“格点”上的函数值,即z=f(x,y)。 (6)网线图、曲面图绘制。
例3.11:绘制函数z=x^2+y^2的曲面 x=-4:4; y=x; [x,y]=meshgrid(x,y); %生成x-y 坐标“格 点”矩阵 z=x.^2+y.^2; %计算格点上的函 数值 subplot(1,2,1), mesh(x,y,z); %三维网格图 subplot(1,2,2), surf(x,y,z); %三维曲面图 colormap(hot);
7.简单图像处理 imread:读取图像文件( BMP,GIF , PNG, JPEG, and TIFF) imshow:显示图像 imwrite:保存图像 例3.12:图像处理 img1=imread(‘mudan.jpg'); % Load image data img2=imread('eight.tif'); %显示图像: imshow(img1);%Display image
简单图像处理 lighter= 2 * img1; subplot(1,2,1); imshow(img1); title('Original'); %Display image subplot(1,2,2); imshow(lighter); title(‘Lighter'); %Display image %图像处理前后的比较
保存图像 imwrite(lighter,'mysaved.jpg') %彩色图像转换为灰度图像 black = rgb2gray(img1); imshow(black)
%sobel边缘提取算法 imag_edge1 = edge(img2,‘sobel’); subplot(121),imshow(imag_edge1) %canny边缘提取算法 imag_edge2 = edge(img2,'canny'); subplot(122),imshow(imag_edge2)