1.5 MATLAB中的函数绘图(1)
绘制函数的图像,可以帮助我们更为直观地了解函数的各种性态。MATLAB中提供了强大的绘图功能,因此MATLAB也是科学研究中常用的绘图工具。
如果没有什么特殊要求,对于形如 y=f(x)这样的一般函数,可以直接用命令plot(x, y, S)来绘图,其中x、y表示横坐标、纵坐标,S 表示绘图时用的线型——不同颜色的实线、虚线等。
需要注意的是,用MATLAB绘图先要得到满足函数的一系列点的坐标,然后将该点集的横坐标、纵坐标分别赋予x和y,因此命令中的x和y都是向量,在输入函数关系y=f(x)时注意使用向量的运算符号。
比如要绘制y=sinx在区间 [0,2π] 上的图形,输入命令:
>> x=[0: 0.01: 2∗pi]; >> y=sin(x); >> plot(x, y)
可以得到图1-3所示图形。
图1-3
也可以输入如下命令:
>> x=[0: 0.01: 1]; >> y=sin(2∗pi∗x); >> plot(x, y,--)
输出结果如图1-4所示。
图1-4
我们也可以将多个函数图形画在一张图上,并用不同线型做区分。比如
>> x=[0: 0.01: 2∗pi]; >> h=sin(x+pi/4); >> z=sin(x+pi/6); >> y=sin(x); >> plot(x, y, o , x, z,--, x, h)
其意义为在同一张图上绘制 h=,和y=sinx三个函数在 [0, 2π]上的曲线图。其中,第一个函数用实线,第二个函数用虚线,第三个函数用“〇”连线。输出结果如图1-5所示。
图1-5
更多的线型和颜色代码,参见MATLAB参考书。
plot命令使用非常简便,不过不能用于绘制隐函数、参数方程形式的函数图像,这时可以用符号函数绘图命令ezplot,如表1-3所示。
表1-3
比如要绘制y=在上的函数图像,可以用如下命令:
>>ezplot(sin(1/x), [1/pi, 2])
输出结果如图1-6所示。
绘制隐函数x2+y3=1在 [-10, 10]×[-10, 10] 上的图像,可以用命令:
>>ezplot(x.^2+y.^3-1 , [-10, 10,-10, 10])
输出结果如图1-7所示。
图1-6
图1-7
绘制参数方程形式的函数x=3sint-t, y=4cost+t在t∈[-3, 3] 上的函数图像,可以输入命令:
>>ezplot(3∗sin(t)-t , 4∗cos(t)+t , [-3, 3])
输出结果如图1-8所示。
图1-8
如果在M文件中自定义了一个函数,可以用fplot命令绘制其图像。比如编写名为myfun. m的M文件:
function y=myfun(x) y=x.^3+cos(2∗x+1)
保存myfun. m文件之后,在命令窗口下输入命令:
>>fplot(myfun , [0, 2])
即可得到函数在区间 [0,2] 上的图像,如图1-9所示。
图1-9
如果需要在图像中添加标注,比如对各个坐标轴添加标注、在图形顶端添加标注等,则可以使用标注命令,如表1-4所示。
表1-4
比如输入如下命令:
>> x=[0: 0.01: 2∗pi]; >> y=sin(10∗x); >> plot(x, y)
输出结果为没有任何标注的函数图像,接着输入如下命令:
>> xlabel(自变量x) >> ylabel(因变量y) >> title(y=sin(10x)的图像)
则得到添加标注后的图像,如图1-10所示。
图1-10
如果对曲线、曲面、点做标注,则可以使用gtext命令:
>> x=[0: 0.01: 2∗pi]; >> y=sin(10∗x); %定义函数 >> plot( x, y) %绘制函数图像 >> gtext( y=sin(10x)) %为图像添加函数表达式
输入命令后,图上出现一个随鼠标移动的十字光标,如图1-11所示,移动光标到合适位置并单击左键,标注内容“y=sin(10x)”就被放置在此处。
图1-11
MATLAB绘制的函数图像默认不显示网格线,如果需要显示网格线,则可以输入命令grid on:
>> x=[0: 0.01: 2∗pi]; >> y=sin(10∗x); %定义函数 >> plot( x, y) %绘制函数图像 >> grid on %显示网格线
输出结果如图1-12所示。
图1-12
要消除图中的网格线,直接输入grid off即可。
如果对MATLAB自动生成的图像坐标系不满意,则可以自由调整坐标系的显示区域。命令格式为axis([x1, x2, y1, y2, z1, z2]),即只显示x∈[x1, x2], y∈[y1, y2], z∈[z1, z2] 范围内的函数图像。
>> x=[0: 0.01: 2∗pi]; >> y=sin(10∗x); >> plot(x, y) >> axis( [1, 2,-1, 0]) %显示x∈[1, 2] , y∈[-1, 0] 范围内的函数图像
输出结果如图1-13所示。
图1-13
如果对结果不满意,输入axis auto即可恢复缺省设置。
为了便于做比较,有时需要将多个图像显示在一张图上,MATLAB的分割图像窗口功能可以实现这一目标。命令格式为subplot(m, n, k),表示将图像窗口分成m×n块,并激活其中的第k块,随后输入的所有图形调整命令都将作用在第k块上。如果需要调整其他子窗口,比如第j块上的图形,需要输入subplot(m, n, j),于是随后的所有操作都将作用于第j块上。如果输入命令subplot(1,1,1),则图像窗口合并为一。
比如输入如下命令:
>> x=[0: 0.01: 2∗pi]; >> y=sin(10∗x); %定义函数 >> subplot(2, 2, 1); plot(x, y)%分出四个窗口,在第1个窗口内绘图 >> subplot(2, 2, 2); plot(x, y)%操作转向第2个窗口,绘制函数图像 >> axis( [1, 2, 0, 1]) %在第2个窗口显示 [1, 2]×[0, 1] 范围内的图像 >> subplot(2, 2, 3); plot(x, y)%操作转向第3个窗口,绘制函数图像 >> axis( [1, 3,-1, 0]) %在第3个窗口显示 [1, 3] ×[-1, 0]范围内的图像 >> subplot(2, 2, 4); plot(x, y)%操作转向第3个窗口,绘制函数图像 >> axis( [0, 1, 0, 1]) %在第4个窗口显示 [0, 1] ×[0, 1] 范围内的图像
输出的结果以及窗口的次序如图1-14所示。
图1-14
MATLAB的函数绘图功能很多,这里只介绍了一些平面直角坐标下的函数图像绘制操作。下一节会介绍一些更复杂的绘图操作。