线性代数
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第八节 MATLAB软件简介

带有不同专业背景的实际问题含有的数据信息量一般都很大,运用数学理论但是仅仅依靠手工方法去推演、计算,问题求解就很困难甚至不可能完成。为此人们开发了若干种在数学与工程领域中很著名的通用或专用软件,例如MAPLE,MATHEMATICA,MATLAB,R与LINGO等。这些软件的学习与使用甚至已经成为很多理工科专业的基本要求。

MATLAB是MATrix LABoratory(矩阵实验室)的缩写。MATLAB是集计算、可视化和编程等功能为一身的,最流行的科学与工程计算软件之一。本节简要介绍MATLAB的基本使用方法。

MATLAB软件具有以下四个方面的特点。

(1)使用简单 MATLAB语言灵活、方便,它将编译、连接和执行融为一体,是一种演算式语言。此外MATLAB软件还具有完善的帮助系统,可以通过查询到和演示示例来学习如何使用MATLAB编程解决问题。

(2)功能强大 MATLAB软件具有强大的数值计算功能和优秀的符号计算功能。它还具有方便的绘图和完善的图形可视化功能;MATLAB软件提供的各种库函数和数十个专业性工具箱为用户应用提供了极大的方便。

(3)编程容易、效率高 MATLAB既具有结构化的控制语句,又具有面向对象的编程特性;它允许用户以更加数学化的形式语言编写程序,比C语言等更接近书写计算公式的思维方式;程序调试也非常简单方便。

(4)扩充能力强 MATLAB软件是一个开放的系统,除内部函数外,所有MAT-LAB函数(包括工具箱内函数)的源程序都可以修改;MATLAB也可以方便地与FORTRAN、C等语言进行接口,实现不同语言编写的程序之间的相互调用。

在计算机上安装好MATLAB之后,双击MATLAB图标,就可以看到其界面,如图2.7所示。

图2.7 MATLAB主界面

一、MATLAB的命令窗口与基本运算

MATLAB既是一种语言,又是一个编程环境。MATLAB有两个最主要的环境窗口:一个是命令窗口(MATLAB Command Window);另一个是程序编辑窗口(MATLAB Editor/Debug)。

1.命令窗口

进入MATLAB图形界面以后,可以关闭工作空间,当前路径等几个位置靠左的窗口,而只保留位置靠右的命令窗口,如图2.8所示。

图2.8 MATLAB命令窗口

命令窗口是用户与MATLAB进行交互的主要场所。在命令窗口菜单栏下面的空白区域可以进行程序调用、输入和显示结果,也可以在该区域键入MATLAB命令进行各种操作,或键入数学表达式进行计算。

【例2.17】 在命令窗口提示符“>>”后键入x=pi,回车,则将在命令行下面显示如下的变量值:

x=

  3.1416

如果希望得到π的前若干位小数(例如前60位),则可以键入vpa(pi,60)(式中vpa是MATLAB中的显示变量精度的一个库函数),命令窗口当即有输出

x=

  3.14159265358979323846264338327950288419716939937510582097494

再在提示符后输入计算包含根式计算的表达式y=1/4+sqrt(8.5)并回车,将显示

y=

  3.1655

继续输入z=y+1-2i,回车即有

z=

  4.1655-2.0000i

可见,在MATLAB中对所使用的各种变量无需先行定义或规定变量的数据类型;一般也不需要说明向量或矩阵变量的维数,所以有人称MATLAB为演算纸式的科学计算语言。此外,MATLAB提供的数与向量和矩阵运算符可以方便地实现各种复杂的、高精度的计算。

在MATLAB的命令窗口中,如果表达式后面有分号“;”,执行结果就不在命令窗口显示,但该结果仍然被保存在MATLAB的工作空间中;如果在表达式中不指定输出变量,MATLAB就将结果赋给缺省变量ans(answer的缩写)。

在命令窗口可以用方向键和控制键来编辑、修改已输入的命令。例如“↑”可以调出上一行的命令;“↓”可以调出下一行的命令等。

在命令窗口可以执行文件管理命令、工作空间操作命令、结果显示保存和寻找帮助等命令。读者应该善于利用MATLAB的帮助系统去熟悉其用法。例如,如果要查找平方根函数的功能,则在命令窗口输入

help sqrt

就可以看到关于平方根函数功能的文本解释与函数调用的具体方法。

2.基本运算符与常用的数学函数

在MATLAB中,四则运算符分别为:“+”“-”“*”(乘)“\”(左除)和“/”(右除)。乘方或开方均可以由运算符“^”来表示;而平方根的开方运算可以调用函数sqrt来实现。

【例2.18】 在MATLAB的命令窗口进行四则运算与方幂运算。在提示符后输入s=(1+100)/2*100,就得到自然数列的前100项和

s=

  5050

输入3/4,3\4,可得到

ans=

  0.7500

ans=

  1.3333

请读者注意左除与右除运算的区别。式中左除运算符是MATLAB软件运算符的一个特色,在矩阵运算时尤为重要。

接着在命令窗口再输入c=12^3,c^(1/2),sqrt(c),则得到

c=

  1728

ans=

  41.5692

ans=

  41.5692

下面的表2.1、表2.2中列出了一些特殊数学变量与基本数学函数的库函数及其功能。

表2.1 特殊变量值

表2.2 基本数学函数

这些运算符与数学函数大家可以经常使用,直至达到能熟练运用的程度。

二、MATLAB的矩阵表示与矩阵运算

MATLAB的所有数值功能都是以矩阵为基本单元进行的(数与向量则被看成矩阵的特殊情形)。因此MATLAB对矩阵的运算功能可以说是最强大、最全面的。现在来介绍矩阵表示和矩阵计算方法等。

1.矩阵的输入

MATLAB的矩阵输入可以有许多种方法,对于阶数较小的矩阵,可以用赋值语句直接输入它的每个元素来构造;对于元素具有一定规律的矩阵,则可利用MATLAB语句或调用MATLAB的函数文件产生;阶数较大的矩阵一般采取M文件形式来构造。

【例2.19】 用赋值语句进行矩阵输入。

A=[1 2 3;4,5,6;7 8 0]

A=

  1 2 3

  4 5 6

  7 8 0

B=[sin(pi/3),A(2,1);log(9),tanh(3)]

B=

  0.8660 4.0000

  2.1972 0.9951

其中,A(2,1)是调用矩阵A的第2行第1列的元素。

赋值语句是建立矩阵最直接的方法,在赋值过程中,矩阵元素排列在方括号内,同行的元素之间用空格或逗号“,”隔开,不同行的元素之间用分号“;”或回车键分隔。

矩阵元素可以是数(实数或复数),也可以是运算表达式,甚至包括其他矩阵的元素;此外,没有任何元素的空矩阵(符号为“[ ]”)也是允许的。

对已经存在的矩阵,还可以用下标方法给它们的元素赋新的值以修改矩阵。

【例2.20】 用赋值语句修改矩阵。在建立例3的矩阵之后,对它们的元素进行修改。

A(3,4)=2

A=

  1 2 3 0

  4 5 6 0

  7 8 0 2

这里原先的矩阵A是3阶方阵,没有第3行第4列,在执行对A(3,4)的赋值时,MATLAB自动增加矩阵A的行列数,以适应新的矩阵规模,并对未输入的元素赋值0。

B(1,1)=-1.5

B=

  -1.5000 4.0000

   2.1972 0.9951

若再输入A(3,:)=-1,则得到

A=

   1  2  3  0

   4  5  6  0

   -1 -1  -1  -1

A(3,:)表示矩阵A的第3行;同理,A(:,2)就表示矩阵A的第2列了。

在MATLAB中,经常用冒号表达式产生行向量,其形式为

    x=x0 : step : xn

其中,x0,step,xn为给定数值:x0表示向量首个元素值;xn表示向量尾元素的数值限;step表示元素的增量,当增量为1时,可以不写出。

【例2.21】 利用冒号表达式产生行向量(行矩阵)

D=1:2:11,F=9:-2:2

D=

  1 3 5 7 9 11

F=

  9 7 5 3

此外,MATLAB还提供了一些库函数来构造某些特殊的矩阵,例如函数eye产生单位矩阵,其用法为:

eye(n)——构造n阶单位矩阵;eye(m,n)——构造m×n阶单位矩阵;

eye(size(A))——构造与矩阵A同阶的单位矩阵。

同理,函数zeros和ones分别产生全零矩阵和全一矩阵,它们的使用方法与产生单位矩阵函数eye相同。

函数diag,tril和triu分别取矩阵的对角、下三角和上三角部分等;diag也可以生成主对角类矩阵等。此外函数vander可以构造范德蒙矩阵;函数hilb可以求出指定阶数的Hilbert矩阵等。函数rand能够构造均匀分布的随机矩阵,而函数randn则产生正态分布的随机矩阵。

【例2.22】 利用MATLAB的库函数来构造某些特殊的矩阵。例如,在命令窗口输入

eye(3,4),ones(4),rand(3,5),randn(3,5),

diag(ones(4)),diag([1,2,3,4]),diag([1,2,3,4],-1)

等,请大家自己去可以观察相应的输出结果。

在MATLAB软件中,矩阵或向量的维数可以不预先定义,但在解决实际问题时经常需要知道矩阵或向量的维数,为此MATLAB提供了两个库函数length和size,分别用来确定向量和矩阵的维数。例如,输入size(diag([1,2,3,4],-1)),看输出结果。

2.矩阵的基本操作

在MATLAB软件中,通过矩阵的名称调用整个矩阵;用下标的方法调用矩阵的某个元素或者子矩阵。

【例2.23】 设矩阵A是已知的9×9矩阵,则

A(:,2)           A的第2列元素构成的列向量

A(5,:)           A的第5行元素构成的行向量

A(1:3,2:7)         A的前3行及第2~7列元素构成的子矩阵

A([1 3 5],[2 4])   A的第1,3,5行,第2,4列元素构成的子矩阵

A(:,1:2:7)        A的第1,3,5,7列元素构成的子矩阵

如果将矩阵的某个子块赋值为空矩阵[ ],则相当于在原矩阵中去掉了相应的矩阵子块。

矩阵还有变维操作。实现矩阵变维的方法有两种,用“:”和函数reshape,前者通过两个矩阵之间的运算实现变维;后者直接对一个矩阵进行变维操作。

【例2.24】 矩阵变维操作的实例。先输入一个行向量构成的矩阵,然后对它进行变维运算。

a=[1:12];b=reshape(a,2,6) % reshape实现矩阵的变维操作

b=

  1 3 5 7 9 11

  2 4 6 8 10 12

c=zeros(3,4);c(:)=a(:)

c=

  1 4 7 10

  2 5 8 11

  3 6 9 12

注意在变维时,元素的顺序是按列进行的。

矩阵变向包括矩阵的旋转、左右翻转和上下翻转,分别由函数rot90、fliplr、flipud和flipdim来实现,具体使用方法可以在命令窗口自我练习,也可以查询MATLAB的帮助文档。

3.矩阵的基本运算

用运算符号“+”“_”“*”和左除“\”和右除“/”,同样可以对矩阵做加、减、乘和除法运算。如果AB都是n阶矩阵,且A非奇异,则左除和右除分别表示

A\B=A-1B, B/A=BA-1

如果A不是方阵,则上面计算公式中的求逆表示广义逆矩阵运算。利用左除运算符可以直接求解线性方程组。

对方阵也可以进行矩阵的乘幂运算,用运算符“^”表示。

对于实矩阵或向量,用符号“'”可以进行转置;然而对于含复数元素的矩阵,则“'”将同时对复数进行共轭处理。

【例2.25】 矩阵的四则运算。

A=[101;210;-32-5];B= [122;342;523];

A\B,B/A

ans=

  -2.0000 -2.0000 -4.5000

  7.0000 8.0000 11.0000

  3.0000 4.0000 6.5000

ans=

  14.5000 -3.0000 2.5000

  19.5000 -3.0000 3.5000

  8.0000    0  1.0000

A*B

ans=

   6  4  5

   5  8  6

  -22 -8 -17

A^3

ans=

   14 -6  18

   0  5  -6

  -66  36 -94

4.矩阵的点运算

MATLAB还有一种独特的运算规则——点运算,使用非常方便。也可以将它们看成矩阵运算的扩充。点运算的加减运算符与普通的矩阵加减运算符相同;点运算的乘、除和乘方运算符在普通的矩阵运算符前加一点“.”,即

“.*”,“.\”,“./”和“.^”

矩阵的点运算实际上就是两个具有相同维数的矩阵对应的元素之间进行加、减、乘、除和乘方运算。矩阵的点运算特别是对两个向量(即行矩阵或列矩阵)之间进行处理与运算时更常常用到。

【例2.26】 矩阵的点运算。利用例2.25中的矩阵AB数据进行点运算:

A.*B

ans=

    1 0  2

    6 4  0

   -15 4 -15

A./B

ans=

   1.0000   0  0.5000

   0.6667 0.2500    0

   -0.6000 1.0000 -1.6667

A.^2

ans=

  1 0 1

  4 1 0

  9 4 25

大家可以去比较A.^2与A^2的不同。

5.矩阵的基本函数

矩阵的函数运算是矩阵运算中最实用的部分,我们将常用矩阵函数及其功能列于表2.3中。

表2.3 矩阵基本函数

【例2.27】 有关矩阵函数的计算。利用例2.25、例2.26中的矩阵A的数据:

A=[1 0 1;2 1 0;-3 2 -5];B= [1 2 2;3 4 2;5 2 3];%

输入两个矩阵

d=det(A),r=rank(A)

%求矩阵A的行列式与秩(秩的概念可参见第三章)

d=

  2

r=

  3

inv(A)        %求A的逆矩阵

ans=

  -2.5000  1.0000 -0.5000

   5.0000 -1.0000  1.0000

   3.5000 -1.0000  0.5000

[V,D]=eig(A)     %求A的特征值(详见本书第五章)

V=

   0.4444 -0.1853 0.2767

  -0.6867  0.0701 0.9473

  -0.5752  0.9802 0.1617

D=

  -0.2943    0   0

     0 -4.2899   0

     0    0 1.5842

矩阵的正交基,矩阵的特征值与特征向量等概念,在本书后面章节中将逐渐涉及。

三、MATLAB绘图

MATLAB提供了丰富的绘图功能。下面介绍常用的二维、三维图形命令。

MATLAB最常用的绘图命令就是plot,它打开一个图形窗口;如果已经存在一个图形窗口,则清除当前图形窗口的图形,绘制新的图形。

【例2.28】 绘制函数y=sinx在区间[0,2π]上的图形。只需在命令窗口输入下列命令:

x=linspace(0,2 * pi,60);

%函数linspace产生一个等分区间[0,2π]的60维的行向量

y=sin(x);

plot(x,y);  % 作图

图形输出略。

【例2.29】 在同一坐标系下绘制函数y=sinxy=cosx在区间[0,2π]上的图形,并对所作的图形进行标注。在命令窗口输入

x=linspace(0,2 * pi,60);

y=[sin(x);cos(x)];

plot(x,y);                  %作图

grid;                      % 增加图形网格

xlabel('x');ylabel('y');        %x轴、y轴标注

title('Sin and Cos Curves');        %增加图形标题

gtext('y=sin(x)');gtext('y=cos(x)');%曲线标注

执行后的图形见图2.9。

图2.9 例2.29图

当要在同一坐标系下绘制多个函数的图形时也可以用hold on与hold off这一组命令去实现。具体用法可以用help hold on去查阅文本帮助。

【例2.30】 作出二元函数在[-20:20;-20:20]上的图形。输入

[x,y]=meshgrid(-20:0.3:20);  %生成二维网格

r=sqrt(x.^2+y.^2)+eps;

%eps是最小正数,防止出现零做分母的情况

z=sin(r)./r;

surf(x,y,z)            %曲面作图

shading interp;            %用图形插值法改进曲面图的效果

执行后的图形见图2.10。

图2.10 例2.30图

如果在上面输入的语句之后加上rotate 3D,或者作图完成后,在图形(Figure)窗口的菜单Tools之下选择rotate 3D,则三维图形可以向任意方向作旋转。

曲面作图除用函数命令surf外,还可以利用mesh或plot3。至于MATLAB中曲线图形的线型,曲线与标注对象的颜色以及作图范围等,也可以进一步学习MATLAB的专门教材。