数学实验教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 MATLAB中的函数绘图(1)

绘制函数的图像,可以帮助我们更为直观地了解函数的各种性态。MATLAB中提供了强大的绘图功能,因此MATLAB也是科学研究中常用的绘图工具。

如果没有什么特殊要求,对于形如 y=fx)这样的一般函数,可以直接用命令plot(x, y, S)来绘图,其中x、y表示横坐标、纵坐标,S 表示绘图时用的线型——不同颜色的实线、虚线等。

需要注意的是,用MATLAB绘图先要得到满足函数的一系列点的坐标,然后将该点集的横坐标、纵坐标分别赋予x和y,因此命令中的x和y都是向量,在输入函数关系y=fx)时注意使用向量的运算符号。

比如要绘制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+tt∈[-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的函数绘图功能很多,这里只介绍了一些平面直角坐标下的函数图像绘制操作。下一节会介绍一些更复杂的绘图操作。