分享

5、矩阵及其运算

 陆潇潇 2016-10-27

矩阵是MATLAB数据存储的基本单元,而矩阵的运算是MATLAB语言的核心,在MATLAB语言系统中几乎一切运算均是以对矩阵的操作为基础的。下面重点介绍矩阵的生成、矩阵的基本运算和矩阵的数组运算。

 5.1  矩阵的生成

若要输入矩阵,则必须在每一列结尾加上分号(;),如下例:  

A = [1 2 3 4; 5 6 7 8; 9 10 11 12];   

A =   

1  2  3  4   

5  6  7  8   

9  10 11  12  

1.  直接输入法

从键盘上直接输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点:

●    输入矩阵时要以“[  ]”为其标识符号,矩阵的所有元素必须都在括号内。

●    矩阵同行元素之间由空格或逗号分隔,行与行之间用分号或回车键分隔。

●    矩阵大小不需要预先定义。

●    矩阵元素可以是运算表达式。

●    若“[  ]”中无元素表示空矩阵。

2.利用M文件建立矩阵  

对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。利用M文件建立MYMAT矩阵:

(1) 启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:

(2) 把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。

(3) 在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。

外部文件读入法

可以利用任意的文本编辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。读入矩阵的一种方法可参考数据交换系统。

另外MATLAB语言也允许用户调用在MATLAB环境之外定义的矩阵。可以利用load函数,其调用方法为: Load+文件名[参数]

Load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat文件为操作对象,如果该文件在MATLAB搜索路径中不存在时,系统将会报错。

例如:   事先在记事本中建立文件:  1    1     1

          (并以data1.txt保存)               1    2     3

                                                           1    3     6

在MATLAB命令窗口中输入:

         >> load  data1.txt

>> data1

       data1=

              1    1     1

              1    2     3

              1    3     6

3. 利用冒号表达式建立一个向量

冒号表达式可以产生一个行向量,一般格式是:

e1:e2:e3 其中e1为初始值,e2为步长,e3为终止值。

首先,可以用冒号来定义行向量。

例如:

>> a=1:0.5:4

a=

   Columns 1 through 7

     1      1.5       2      2.5       3           3.5       4

其次,通过使用冒号,可以截取指定矩阵中的部分。

例如:

   >> A=[1  2  3;4  5  6;7  8  9]

  

 A=

       1     2      3

       4     5      6

       7     8      9

>> B=A (1:2, : )

B=

     1       2        3

     4       5        6

通过上例可以看到B是由矩阵A的1到2行和相应的所有列的元素构成的一个新的矩阵。在这里,冒号代替了矩阵A的所有列。

在MATLAB中,还可以用linspace函数产生行向量。

其调用格式为: linspace(a,b,n)

其中a和b是生成向量的第一个和最后一个元素,n是元素总数。

显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。

4.特殊矩阵的生成

对于一些比较特殊的矩阵(单位阵、矩阵中含1或0较多),由于其具有特殊的结构,MATLAB提供了一些函数用于生成这些矩阵。常用的有下面几个:

zeros(m)                         生成m阶全0矩阵

eye(m)                          生成m阶单位矩阵

ones(m)                         生成m阶全1矩阵

rand(m)                         生成m阶均匀分布的随机阵

randn(m)                        生成m阶正态分布的随机矩阵

 

我们可以对矩阵进行各种处理:  

A(2,3) = 5 % 改变位於第二列,第三行的元素值  

A =   

1  2  3  4  

5  6  5  8   

9  10 11  12   

B = A(2,1:3) % 取出部份矩阵B  

B = 5 6 5  

A = [A B'] % 将B转置後以行向量并入A  

A =   

1  2  3   4  5   

5  6  5   8  6   

9  10 11  12  5  

A(:, 2) = [] % 删除第二行(:代表所有列)  

A =   

1  3  4  5   

5  5  8  6   

9  11 12  5   

A = [A; 4 3 2 1] % 加入第四列   

A =   

1  3   4   5   

5  5   8   6   

9  11  12  5  

4  3   2   1  

A([1 4], :) = [] % 删除第一和第四列(:代表所有行)  

A =   

5  5   8   6   

9  11  12  5  

这几种矩阵处理的方式可以相互叠代运用,产生各种意想不到的效果。

 

小提示:在MATLAB的内部资料结构中,每一个矩阵都是一个以行为主(Column-oriented )的阵列(Array)因此对於矩阵元素的存取,我们可用一维或二维的索引(Index)来定址。举例来说,在上述矩阵A中,位於第二列、第三行的元素可写为A(2,3) (二维索引)或A(6)(一维索引,即将所有直行进行堆叠後的第六个元素)。  

此外,若要重新安排矩阵的形状,可用reshape命令:  

B = reshape(A, 4, 2) % 4是新矩阵的列数,2是新矩阵的行数  

B =  

5   8   

9   12   

5   6   

11  5  

小提示: A(:)就是将矩阵A每一列堆叠起来,成为一个行向量,而这也是MATLAB变数的内部储存方式。以前例而言,reshape(A, 8, 1)和A(:)同样都会产生一个8x1的矩阵。 

5.2  矩阵的基本数学运算

矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、秩运算、特征值运算等基本函数运算,这里进行简单介绍。

1.四则运算

矩阵的加、减、乘运算符分别为“+,—,*” ,用法与数字运算几乎相同,但计算时要满足其数学要求(如:同型矩阵才可以加、减)。

在MATLAB中矩阵的除法有两种形式:左除“\”和右除“/”。在传统的MATLAB算法中,右除是先计算矩阵的逆再相乘,而左除则不需要计算逆矩阵直接进行除运算。通常右除要快一点,但左除可避免被除矩阵的奇异性所带来的麻烦。在MATLAB6中两者的区别不太大。

2.与常数的运算    

    常数与矩阵的运算即是同该矩阵的每一元素进行运算。但需注意进行数除时,常数通常只能做除数。

3.基本函数运算

    矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个:

det(a)                        求矩阵a的行列式

eig(a)                        求矩阵a的特征值

inv(a)或a ^ (-1)                求矩阵a的逆矩阵

rank(a)                       求矩阵a的秩

trace(a)                       求矩阵a的迹(对角线元素之和)

例如: >> a=[2  1  –3  –1; 3  1  0  7; -1  2  4  –2; 1  0  –1  5];

>> a1=det(a);                   

>> a2=det(inv(a));

>> a1*a2

  ans=

          1

注意:命令行后加“;”表示该命令执行但不显示执行结果。

4.2.2  矩阵的数组运算

我们在进行工程计算时常常遇到矩阵对应元素之间的运算。这种运算不同于前面讲的数学运算,为有所区别,我们称之为数组运算。

1.基本数学运算

数组的加、减与矩阵的加、减运算完全相同。而乘除法运算有相当大的区别,数组的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符为“.*”和“./”或“.\”。前面讲过常数与矩阵的除法运算中常数只能做除数。在数组运算中有了“对应关系”的规定,数组与常数之间的除法运算没有任何限制。

另外,矩阵的数组运算中还有幂运算(运算符为 .^ )、指数运算(exp)、对数运算(log)、和开方运算(sqrt)等。有了“对应元素”的规定,数组的运算实质上就是针对数组内部的每个元素进行的。

例如:

    >> a=[2  1  -3  -1; 3  1  0  7; -1  2  4  -2; 1  0  -1  5];

    >> a^3

       ans=

32  -28  -101  34

99  -12  -151  239

-1   49   93   8

51  -17  -98   139

>> a .^3

        ans=

8   1  -27   -1

27  1   0    343

-1  8   64   -8

 1  0   -1   125

由上例可见矩阵的幂运算与数组的幂运算有很大的区别。

2.逻辑关系运算    

逻辑运算是MATLAB中数组运算所特有的一种运算形式,也是几乎所有的高级语言普遍适用的一种运算。它们的具体符号、功能及用法见表4-2。

表4-2

符号运算符    功 能     函 数 名

= =  等于       eq

~ =  不等于    ne

<     小于       lt

>     大于       gt

<=   小于等于       le

>=   大于等于       ge

&    逻辑与    and

|      逻辑或    or

~     逻辑非    not

 说明:

  ●   在关系比较中,若比较的双方为同维数组,则比较的结果也是同维数组。它的元

素值由0和1组成。当比较双方对应位置上的元素值满足比较关系时,它的对

应值为1,否则为0。

●   当比较的双方中一方为常数,另一方为一数组,则比较的结果与数组同维。

●   在算术运算、比较运算和逻辑与、或、非运算中,它们的优先级关系先后为:

      比较运算、算术运算、逻辑与或非运算。

例如:

     >>a=[1  2  3; 4  5  6; 7  8  9];

>> x=5;

>> y= ones(3)*5;

>> xa= x<=a

xa=

0    0    0

0    1    1

1    1    1

>> b=[0  1  0; 1  0  1; 0  0  1];

>> ab=a&b

ab=

         0    1    0

         1    0    1

         0    0    1

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多