MATLAB课件 第七章 数学图形的绘制.docx
《MATLAB课件 第七章 数学图形的绘制.docx》由会员分享,可在线阅读,更多相关《MATLAB课件 第七章 数学图形的绘制.docx(28页珍藏版)》请在冰豆网上搜索。
![MATLAB课件 第七章 数学图形的绘制.docx](https://file1.bdocx.com/fileroot1/2023-2/9/56fb00a5-52f4-4343-b3d2-ef6437b0f8ef/56fb00a5-52f4-4343-b3d2-ef6437b0f8ef1.gif)
MATLAB课件第七章数学图形的绘制
第七章数学图形的绘制
MATLAB的图形处理功能就是用数学图形来反映数据之间存在的客观规律,应用MATLAB可以实现各种二维图形和三维图形的绘制、控制以及表现。
本章将介绍MATLAB的基本图形的处理功能。
7.1二维图形绘制
7.1.1基本图形函数
1.plot绘图函数(数值绘图)
MATLAB最基本、最重要的绘图命令就是plot绘图函数。
它有多种基本的调用格式。
plot(Y)%如果Y是实数,Y的值就是它的列(column)坐标;Y的对应下标就是它的横坐标;如果是复数,则相当于plot(real(Y),imag(Y))。
plot(X,Y,...)%绘制X为横坐标,Y为纵坐标的数学图形。
plot(X,Y,X1,Y1...)%同时绘制Y对X,Y1对X1的数学图形。
plot(X,Y,LineSpec,...)%绘图不同线型、标识、颜色等的数学图形。
【例7.1】>>Y=[1357];plot(Y,'ro')
回车后可得如下图形:
图7.1
从图中可以看出,数值:
1357的横坐标分别为:
1234
【例7.2】t=0:
0.01:
10;
y=sin(t);
Y=cos(t).*sin(2*t);
plot(t,y,'rd:
',t,Y,'bo')
MATLAB窗口将显示图7.2所示的函数曲线图形,其横坐标是t,纵坐标是y和Y。
图7.2
另外,plot函数使用了描述颜色的参数和数据线型的参数,这将在后面会陆续介绍。
【例7.3】
x=-12:
0.5:
12;x=x+eps;y=sin(x)./x;plot(x,y)
图7.3
2.subplot图形函数(分割图形窗口)
MATLAB在绘图过程中,会自动弹出图形窗口(Figure),如果要在图形窗口中独立地显示多幅数学图形,则可以使用图形窗口分割命令subplot。
图形窗口分割命令subplot有多种格式,具体举例说明如下。
【例7.4】subplot(2,2,1);%将整个绘图窗口分为2纵2横四个窗口,这是第1个(1,1)窗口,即左上角的窗口,图7.4所示。
图7.4
subplot(2,3,4);%将整个绘图窗口分为2行3列六个窗口后,取第4个窗口。
还可以采用另一种比较自由的窗口分割语句格式:
subplot('Position',[leftbottomwidthheight])
例如
subplot('Position',[0.270.380.500.37]);
%按照中括号里给出的四个元素的向量分割图形区。
四个元素依次为左边线、底边线、宽度、高度,其数值是所占整个绘图区间(归整为[0,1])的比例值,分割结果如图7.5所示。
这个方式在界面的可视化设置里很有用。
图7.5
3.fplot和ezplot绘图函数(符号绘图)
对于符号函数和变化剧烈的函数以及隐函数,可用fplot和ezplot进行较精确的绘图。
1)fplot函数格式
fplot(‘f’,limits)为在指定的范围limits=[a,b,c,d]内画出函数名为f的一元函数图。
a,b为横轴的范围,c,d为纵轴的范围,必须指明范围,否则出错。
【例7.5】用fplot命令描绘符号函数的数学图形。
subplot(2,2,1),fplot('-x^2+1',[-11])
subplot(2,2,2),fplot('x^2+2*x+1',[-42],'r')
subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-11-11])
subplot(2,2,4),fplot('cos(1./x)',[0.010.1])
图7.6
2)ezplot函数格式
ezplot(‘f’)%在[-2πezplot(‘f’,[min,max])%在[minezplot(‘f(x,y)’,[xmin,xmax,ymin,ymax])%在[minezplot(‘x(t)’,’y(t)’)%在[0ezplot(x(t)’,’y(t)’,[tmin,tmax])%在[min【例7.6】绘制9个符号函数的数学图形。
subplot(3,3,1),ezplot('cos(x)')
%绘制cos(x)曲线,-2subplot(3,3,2),ezplot('cos(x)',[0,pi])
%绘制cos(x)曲线,0subplot(3,3,3),ezplot('1/y-log(y)+log(-1+y)+x-1')
%-2subplot(3,3,4),ezplot('x^2-y^2-1')
%-2subplot(3,3,5),ezplot('x^2+y^2-1',[-1.25,1.25])%-1.25subplot(3,3,6),ezplot('x^3+y^3-5*x*y+1/5',[-3,3])
subplot(3,3,7),ezplot('x^3+2*x^2-3*x+5-y^2')
subplot(3,3,8),ezplot('sin(t)','cos(t)')
subplot(3,3,9),ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])
图7.7
注1:
fplot与plot的区别是fplot的指令可以用来自动画一个已定义的函数图形,而无须产生绘图所需要的一组数据作为变数;fplot采用自适应的步长控制画出函数的示意图,在函数的变化激烈的区间,采用较小的步长,否则采用大的步长,能使计算量与时间最小,图形尽可能精确。
plot与fplot绘图可对图形的线形、颜色做出控制,ezplot则不能。
注2:
ezplot('cos(x)'),可不带区间,缺省为[-2πfplot(‘cos(x)’,[-2,2])必须带区间。
【例7.7】
>>ezplot('y^5+2*y-x-3*x^7',[-10,10])
图7.8
4.line绘图函数
在MATLAB中,绘制直线,使用line命令。
【例7.8】>>line([0,4],[0,8])%绘制点(0,0)到点(4,8)的直线。
图7.9
5.hold和clf图形函数
在绘图过程中,如果要在已经绘制的图形上添加新的图形,可以使用hold命令来实现图形的保持功能。
holdon表示启动图形保持功能,holdoff表示关闭图形保持功能。
在绘图过程中,为了彻底清除前面图形的影响,应该在绘图语句的前面使用clf命令。
【例7.9】编写以下程序,可看见一幅图中有多条曲线。
x=-2*pi:
0.1:
2*pi;
y1=cos(x);
plot(x,y1,'b')
holdon
y2=sin(x);plot(x,y2,'r')
图7.10
7.1.2数学图形的修饰
1.颜色和线型
表7.1是plot绘图函数的若干参数。
若要改变颜色,在坐标对后面加上相关字串即可。
表7.1MATLAB绘图修饰命令
字 元
颜色(或型态)
字 元
颜色(或型态)
y
Yellow(黄色)
.
Point(点)
k
Black(黑色)
o
Circle(圆圈)
w
White(白色)
x
Cross(叉号)
b
Blue(蓝色)
+
plussign(加号)
g
Green(绿色)
*
Asterisk(星号)
r
Red(红色)
-
Realline(实线)
c
Cyan(亮青色)
:
Dot(冒号线)
m
Amethyst(锰紫色)
-.
Point-brokenline(点划线)
s
Square(正方形)
d
Diamond(菱形)
^
上三角
v
下三角
<
左三角
>
右三角
p
Pentagram(五角星)
h
Hexagram(六角星)
【例7.10】t=0:
0.05:
10;plot(t,sin(t),'r')
图7.11图7.12
效果如图7.11所示。
若要同时改变颜色及线型(Linestyle),也是在坐标对后面加上相关字串即可。
例如plot(t,sin(t),'ro'),效果如图7.12所示。
2.调整图轴的范围
用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范围。
例如
axis([0,6,-1.5,1])效果如图7.13所示。
图7.13
3.图轴、标题标注与文本标注
x轴、y轴及图形标题标注命令格式:
xlabel('InputValue');
ylabel('FunctionValue');
title('thisisafunction');
文本标注命令格式:
text(0.3,0.89,'f(x)=tan(x)')
效果如图7.14所示。
图7.14
【例7.11】在同一坐标系下画出y=sinx,y=cosx,在区间[0,2pi]上的曲线图,并注明曲线名称
x=0:
0.1:
2*pi;y1=sin(x);y2=cos(x);
plot(x,y1,'r',x,y2,'b*')
title('2条曲线图');xlabel('x变量');ylabel('y函数');
gtext('y=sinx');gtext('y=cosx');gridon
图7.15
4.图例标注与显示格线
图例标注与显示格线的格式:
legend('y=sin(x)')%指定图形的式样。
可以是线图(lineplots),棒图(bargraphs),饼图(piecharts)等。
gridon%在当前图形上加栅格线。
【例7.12】
fplot('sin(x)',[-2*pi,2*pi]);legend('y=sin(x)');gridon
图7.16
【例7.13】
x=-2*pi:
0.1:
2*pi;y1=cos(x);plot(x,y1,'b')
holdon
y2=sin(x);plot(x,y2,'r')
legend('y1=cos(x)','y2=sin(x)')
图7.17
7.1.3特殊二维图形函数
MATLAB提供了一些比较特殊的绘图函数,如下表7.2所示。
表7.2MATLAB绘图命令
名 称
意 义
bar
棒图(条形图)
comet
彗星流动图
errorbar
图形加上误差范围
fplot
较精确的函数图形
polar
极坐标图
hist
累计图(直方图)
rose
极坐标累计图
stairs
阶梯图
stem
针状图
fill
实心图
feather
羽毛图
compass
罗盘图
quiver
向量场图
scatter
散点图
pie
饼图
下面仅介绍部分绘图函数的应用。
1.条形图、罗盘图、极坐标累计图、实心图的绘制
【例7.14】
t=-10:
1:
10;
subplot(2,2,1);bar(t,cos(t));
subplot(2,2,2);compass(t,cos(t));
subplot(2,2,3);rose(t,cos(t));
subplot(2,2,4);fill(t,cos(t),'b');
效果如图7.18所示。
图7.18
2.极坐标图形的绘制
【例7.15】:
绘制r=2cos2(t-pi/8)的图形,t在0到2pi之间
输入如下命令:
t=0:
0.01:
2*pi;r=2*cos(2*(t-pi/8));polar(t,r)
图7.19
【例7.16】作出极坐标系下函数r=2(1-cost),t在0到2pi之间的图形,同时作出相应的直角坐标系下的图形.
t=0:
pi/30:
2*pi;r=2*(1+cos(t));subplot(1,2,1);polar(t,r);
x=r.*cos(t);y=r.*sin(t);subplot(1,2,2);plot(x,y)
图7.20
【例7.17】绘出以下曲线所围成的公共部分:
r1=3cost;r2=1+cost
t=0:
0.1:
2*pi;r1=3*cos(t);r2=1+cos(t);
polar(t,r1);holdon;polar(t,r2)
图7.21
3.饼图的绘制
格式:
pie(x)使用X中的数据绘制饼图,X中的每一个元素用饼图中的一个扇区表示。
在计算饼图的比例时,会自动求出给定的矢量元素之和,然后再分别算出各元素所占的比例,按照各元素所占的比例分割每块的大小,并以百分比的形式自动标注在相应的切块边,每块用不同的颜色区分,分割顺序按元素的下标从90o角的位置逆时针排列。
【例7.18】
>>x=[1234];pie(x)%绘制饼图,见图7.22
x=[1234];pie(x,[0010])%绘制饼图,并指定第3个分离出来,见图7.23
x=[12345];pie3(x,[00101])%绘制三维饼图,并指定第3,第5个分离出来,见图7.24
图7.22图7.23
图7.24
4.直方图的绘制
直方图(hist)与条形图(bar)从表面上很相似,但实质上是不同的,条形图只是简单的用条形状图形将数据点表现出来,而直方图则是一种统计运算结果,它的横轴是数据的幅度,纵轴是对应于各个幅度数据出现的次数,直方图纵坐标没有负数。
>>x=randn(5000,1);hist(x)%在缺省状态下只绘制10个条形,见图7.25
>>x=randn(10000,1);histfit(x,15)%通过参数指定绘制15个条形,同时拟合出密度函数曲线,见图7.26
图7.25图7.26
5.散点图的绘制
格式:
scatter(x,y,s,c)其中:
x和y为两个矢量,用于定位数据点,s为绘图点的大小,c为绘图所使用的色彩,s和c均可以以矢量或表达式的形式给出。
如果再增加第5个参数’filled’,表示填充绘图点,否则为空心点。
【例7.19】绘制正弦函数的散点图
t=0:
pi/8:
2*pi;y=sin(t);
subplot(2,2,1);scatter(t,y)%与函数plot类似,但scatter可以绘制变尺寸,变颜色的分散图
subplot(2,2,2);scatter(t,y,(abs(y)+2).^4,t.^2,'filled')%s用表达式(abs(y)+2).^4来界定,c用表达式t.^2来界定。
subplot(2,2,3);scatter(t,y,30,y,'filled')%s用常数30来界定
subplot(2,2,4);scatter(t,y,(t+1).^2,t,'filled')
图7.27
7.2三维图形绘制
7.2.1绘制三维曲线
绘制三维曲线的命令格式为
plot3(x1,y1,z1,LineSpec,...)
函数格式除了包括第三维的信息(比如Z方向)之外,其它与二维函数plot相同。
功能:
plot3语句将绘制二维图形的函数plot的特性扩展到三维空间。
用法和plot函数一致。
【例7.20】
t=(0:
0.1:
3)*pi;
x=sin(t);
y=cos(t);
z=tan(t);
plot3(x,y,z,'bo-');
%用绘制由记号”○”和”─”构成的蓝色三维曲线
图7.28
【例7.21】:
画出三维螺旋线图:
x=2cost,y=2sint,z=2t,t在[0,2pi]之中.
t=0:
pi/10:
10*pi;x=2*cos(t);y=2*sin(t);z=2*t;
plot3(x,y,z,'r');xlabel('x轴');
ylabel('y轴');zlabel('z轴');
图7.29
【例7.22】设曲面z=x^2+y^2,画出与平面x=0,+-0.5,+-1,+-1.5相交的多条曲线。
clear;x=-1.5:
0.5:
1.5;y=-2:
0.5:
2;
[X,Y]=meshgrid(x,y);Z=X.^2+Y.^2;plot3(X,Y,Z)
title('截痕线'),xlabel('x'),ylabel('y'),zlabel('z')
图7.30
7.2.2绘制三维曲面
1)绘制三维网格曲面的命令格式为
mesh(x,y,z) 或
meshc(...) 绘制网格轮廓线图或
meshz(...) 依参考平面绘制网格四周门帘线图
2)绘制三维曲面图。
surf(x,y,z):
绘制三维曲面图,与mesh函数有相似功能。
【例7.23】绘制z=sin(sqrt(x^2+y^2))的三维曲面图
x=-2:
0.1:
2;
[x,y]=meshgrid(x,x);
%为绘制三维图形而从x生成的x和y矩阵。
%这里[x,y]是401x401的矩阵。
r=sqrt(x.^2+y.^2)+eps;
z=sin(r);
subplot(2,1,1);mesh(z);
subplot(2,1,2);surf(x,y,z);
%绘制三维曲面图,与mesh函数有相似功能。
运行后图形如下:
图7.31
【例7.24】画出旋转抛物面z=x^2+y^2的图形
x=-2:
0.01:
2;[x,y]=meshgrid(x,x);z=x.^2+y.^2;mesh(z)
图7.32
【例7.25】画出锥面z=(x^2+y^2)^(1/2)
x=-2:
0.01:
2;[x,y]=meshgrid(x,x);
z=(x.^2+y.^2).^(1/2);mesh(z)
图7.33
mesh(...,C)语句中,参数C是代表颜色的数值。
如果x,y,和z是矩阵,那么C必须是一个相同大小的色标矩阵。
meshc(...)语句绘制网格等高线图。
【例7.26】
[X,Y]=meshgrid(-3:
.125:
3);
Z=peaks(X,Y);%为了方便绘制三维图,MATLAB提供了一个peaks函数,%可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点
meshc(X,Y,Z);
axis([-33-33-105])
图7.34
meshz(...)语句依参考平面绘制网格四周门帘线图(acurtainplotaroundthemesh)。
【例7.27】
[X,Y]=meshgrid(-3:
.125:
3);
Z=peaks(X,Y);
meshz(X,Y,Z)
图7.35
可分别用以下命令区别:
x=-2:
0.1:
2;[x,y]=meshgrid(x,x);z=x.^2+y.^2;
subplot(1,3,1);mesh(z)
subplot(1,3,2);meshc(z)
subplot(1,3,3);meshz(z)
图7.36
【例7.28】绘制三维曲面
[x,y,z]=peaks;
subplot(2,2,1);
meshz(x,y,z);%曲面加上门帘线
axis([-infinf-infinf-infinf]);
subplot(2,2,2);
waterfall(x,y,z);%在x方向产生水流效果
axis([-infinf-infinf-infinf]);
subplot(2,2,3);
meshc(x,y,z);%同时画出网状图与等高线
axis([-infinf-infinf-infinf]);
subplot(2,2,4);
surfc(x,y,z);%同时画出曲面图与等高线:
axis([-infinf-infinf-infinf]);
图7.37
【例7.29】绘制三维曲面
subplot(2,2,1)
contour3(peaks,50);%画出曲面在三度空间中的等高线
axis([-infinf-infinf-infinf]);
subplot(2,2,2)
contour(peaks,50);%画出曲面等高线在XY平面的投影
subplot(2,2,3)
t=linspace(0,20*pi,501);
plot3(t.*sin(t),t.*cos(t),t);%画出三度空间中的曲线
subplot(2,2,4)
plot3(t.*sin(t),t.*cos(t),t,t.*sin(t),t.*cos(t),-t);%同时画出两条三度空间中的曲线
图7.38
【例7.30】:
在-2clear
x=-2:
0.2:
2;y=-2:
0.2:
3;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
[c,h]=contour(X,Y,Z);
clabel(c,h);%给等值线图标上高度值
colormapcool;
figure
(2);
subplot(2,1,1);mesh(X,Y,Z);
subplot(2,1,2);surf(X,Y,Z);shadingflat
图7.39
【例7.31】绘制三维曲面
[X0,Y0,Z0]=sphere(50);%产生单位球面的三维坐标
X=3*X0;Y=3*Y0;Z=3*Z0;%产生半径为3的球面的三维坐标
clf,surf(X0,Y0,Z0);%画单位球面
shadinginterp%采用插补明暗处理
holdon,mesh(X,Y,Z),colormap(hot),holdoff%采用hot色图
hiddenoff%产生透视效果
axisequal,axisoff%不显示坐标轴
图7.40
【例7.32】:
作出马鞍面z=x^2-2y^2与平面z=-20相交的图形.
[x,y]=meshgrid(-10:
0.2:
10,-10:
0.2:
10);
z1=(x.^2-2*y.^2)+eps;