绘制二维曲线的基本函数
在 MATLAB 中,基本的绘图函数是plot 函数,利用它可以绘制出不同的二维曲线。
1.plot 函数的基本用法
plot 函数用于绘制 xy 平面上的线性坐标曲线图,因此需提供一组x坐标及其各点对应的y坐标,这样就可以绘制分别以x 和y 为横、纵坐标的二维曲线。plot 函数的基本调用格式 如下:
plot(x,y)
其中 ,x 和 y 为长度相同的向量,分别用于存储x 坐标和y 坐标数据。
例1 在0≤x≤2π区间内,绘制曲线
y
=
2
e
−
0.5
x
s
i
n
(
2
π
x
)
y=2e^{-0.5x}sin(2πx)
y=2e−0.5xsin(2πx)
程序如下:
>> x=0:pi/100:2*pi;
>> y=2*exp(-0.5*x).*sin(2*pi*x);
>> plot(x,y)
程序运行后,打开一个图形窗口,在其中绘制函数曲线,如图5-1所示。
注意:求y 时,指数函数和正弦函数之间要用点乘运算,而因2为标量,所以2与指数函数之间可以用乘法运算。
这样,向量x 和向量y 所包含的元素个数相等,y(i)是x(i)点的函数值。
例2 绘制曲线:
{
x
=
t
c
o
s
3
t
y
=
t
s
i
n
2
t
(
−
π
≤
t
≤
π
)
\begin{cases} x=tcos3t\\ y=tsin^2t\\ (-\pi≤t≤\pi) \end{cases}
⎩
⎨
⎧x=tcos3ty=tsin2t(−π≤t≤π)
这是以参数方程形式给出的二维曲线,只要给定参数向量,再分别求出x、y向量即可绘制 函数曲线。程序如下:
>> t=-pi:pi/100:pi;
>> x=t.*cos(3*t);
>> y=t.*sin(t).*sin(t);
>> plot(x,y);
程序运行后,得到的二维曲线如图5-2所示。
以上提到plot函数的自变量x、y为长度相同的向量, 这是最常见的情况。在实际应用中还有一些变化,下面分别说明。
(1)当x是向量,y 是矩阵时,x 的长度与矩阵y 的行数或列数必须相等。
- 如果x 的长度等于y的行数,则以x 和y 的每列为横、纵坐标绘制曲线, 曲线的条数等于y 的列数。
- 如果x 的长度等于y的列数,则以x 和y 的每行为横、纵坐标绘制 曲线,曲线的条数等于y 的行数。
- 如果y 是方阵,x 的长度和矩阵y 的行数或列数都相等,则以x 和y 的每列为横、纵坐标绘制曲线。
例如,下列程序可以在同一坐标中同时绘制出正弦和余弦曲线。
>> x=linspace(0,2*pi,100);
>> y=[sin(x);cos(x)];
>> plot(x,y)
程序首先产生一个行向量x, 然后分别求取行向量sin(x)和cos(x),并将它们构成矩阵y的两行,最后在同一坐标中同时绘制出两条曲线。
当x 是矩阵,y 是向量时,y 的长度必须等于矩阵x 的行数或列数,绘制方式与前一种情况相似。
( 2 ) 当x 、y 是同型矩阵时,则以x 、y 对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
例如,在同一坐标中同时绘制出正弦和余弦曲线,可用下面的程序。
>> t=linspace(0,2*pi,100);
>> x=[t;t]';
>> y=[sin(t);cos(t)]';
>> plot(x,y)
(3)plot 函数最简单的调用格式是只包含一个输入参数,即plot(x) 。在这种情况下,
当x是实向量时,则以该向量元素的下标为横坐标,元素值为纵坐标画出一条曲线,这实际上是绘制折线图。
当x是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。
例如,下面的程序可以绘制一个单位圆。
>> t=0:0.01:2*pi;
>> x=exp(i*t); %x是一个复数向量
>> plot(x)
注意:程序中的i是虚数单位,这样x是一个复数向量。为了保证这一点,i不能被赋其他的值。
当x是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于x 矩阵的列数。
当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。例如, 下面的程序可以绘制3个同心圆。
>> t=0:0.01:2*pi;
>> x=exp(i*t);
>> y=[x;2*x;3*x]';
>> plot(y)
2.含多个输入参数的plo函数
plot 函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。相应的调用格式如下:
plot(x1,y1,x2,y2,…,xn,yn)
(1)当输入参数都为向量时,x1 和 y1,x2 和 y2,…,xn 和 yn 分别组成一组向量对,每一组向量对的长度可以不同。
每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出 条曲线。
例如,下列程序可以在同一坐标中同时绘制出3根正弦曲线。
>> x=linspace(0,2*pi,100);
>> plot(x,sin(x),x,2*sin(x),x,3*sin(x))
(2)当输入参数有矩阵形式时,配对的x 、y 按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
分析下列程序绘制的曲线。
>> x=linspace(0,2*pi,100);
>> y1=sin(x);
>> y2=2*sin(x);
>> y3=3*sin(x);
>> x=[x;x;x]';
>> y=[y1;y2;y3]';
>> plot(x,y,x,cos(x))
3.含选项的plot 函数
MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。
这些选项分别如表1、表2和表3所示,它们可以组合使用。
例如,“b-.” 表示蓝色点画线, “y:d” 表示黄色虚线并用菱形符标记数据点。
当选项省略时,MATLAB规定,线型一律用实线, 自动循环使用当前坐标轴的ColorOrder 属性指定的颜色(默认有7种颜色,详见10.2.2小节), 无数据点标记符号。
表1 线型选项
选 项 | 线 型 | 选 项 | 线 型 |
---|---|---|---|
- | 实线(默认值) | -. | 点画线 |
: | 虚线 | – | 双画线 |
表2 颜色选项
序 号 | 选 项 | 颜 色 | 序 号 | 选 项 | 颜 色 |
---|---|---|---|---|---|
1 | b(blue) | 蓝色 | 5 | m(magenta) | 品红色 |
2 | g(green) | 绿色 | 6 | y(yellow) | 黄色 |
3 | r(red) | 红色 | 7 | k(black) | 黑色 |
4 | c(cyan) | 青色 | 8 | w(white) | 白色 |
表3 标记符号选项
选 项 | 标 记 符 号 | 选 项 | 标 记 符 号 |
---|---|---|---|
. | 点 | v(字母) | 朝下三角符号 |
o(字母) | 圆圈 | A | 朝上三角符号 |
x(字母) | 叉号 | < | 朝左三角符号 |
十 | 加号 | > | 朝右三角符号 |
* | 星号 | p(pentagram) | 五角星符 |
s(square) | 方块符 | h(hexagram) | 六角星符 |
d(diamond) | 菱形符 |
要设置曲线样式可以在plot函数中加绘图选项,其调用格式如下:
plot(x1,y1, 选项1,x2,y2, 选项2,…,xn,yn, 选项n)
例3 用不同线型和颜色在同一坐标内绘制曲线
y
=
2
e
−
0.5
x
s
i
n
(
2
π
x
)
y=2e^{-0.5x}sin(2πx)
y=2e−0.5xsin(2πx)
及其包络线。
程序如下:
x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=(0:12)/2;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');
plot 函数中包含3组绘图参数,第一组用黑色虚线绘出两根包络线,第二组用蓝色双画线绘出曲线y, 第三组用红色五角星离散标出数据点。
程序中第一条命令用矩阵转置运算符将行向量转换为列向量。请读者思考,如果这里不用 转置操作,程序会怎样?如果要得到图5-3的图形,程序应如何修改?
>> x=(0:pi/100:2*pi);
>> y1=[1;-1]*2*exp(-0.5*x);
>> y2=2*exp(-0.5*x).*sin(2*pi*x);
>> x1=(0:12)/2;
>> y3=2*exp(-0.5*x1).*sin(2*pi*x1);
>> plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');
4.双纵坐标函数plotyy
在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数, 其调用格式如下:
plotyy(x1,y1,x2,y2)
其中,x1,y1 对应一条曲线,x2,y2 对应另一条曲线。
横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1 数据对,右纵坐标用于x2,y2数据对。
双纵坐标图形能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标中,有利于图形数据的对比分析。
例4 用不同标度在同一坐标内绘制曲线y=sinx及曲线
y
=
e
−
0.5
x
s
i
n
(
2
π
x
)
y=e^{-0.5x}sin(2πx)
y=e−0.5xsin(2πx)
>> x=0:pi/100:2*pi;
>> y1=exp(-0.5*x).*sin(2*pi*x);
>> y2=sin(x);
>> plotyy(x,y1,x,y2);
不同量纲、不同数量级的两个函数绘制在同一坐标中,有利于图形数据的对比分析。