由于MATLAB中的数据都是以矩阵的形式进行存储的,所以,了解MATLAB语言中的矩阵操作方法是必须的。矩阵中的数据包含着大量的隐含信息,如果矩阵运算方法选择得当,我们往往会得到意想不到的结果。
例如我们可以把矩阵的乘积运算应用于基于关键字的图书检索。首先,我们把关键字作为一个矩阵,然后把图书名称作为一个矩阵,这两个矩阵相乘结果就可以作为检索结果。当然,我们需要对每本图书的关键字作比重分配,最后把矩阵运算结果从大到小的顺序显示在检索结果中。这个例子只是一个矩阵运算的简单应用。
下面介绍就介绍矩阵的创建、运算及分析方法。
矩阵的创建
(1)直接输入法
我们可以在MATLAB的命令窗口直接输入矩阵中每行每列的元素,从而构成矩阵。
Demo1
矩阵中的元素用“[]”括起来,矩阵中每一行元素之间用“;”分割,每一列元素用“,”或者空格分割开来。当矩阵比较小的时候,可以用该方法;而当矩阵较大时,直接输入就会比较费劲。
(2)文件输入法
当矩阵尺寸较大或为经常使用的数据矩阵时,则可以利用save命令将此矩阵保存为文件,在需要时利用load命令将数据调入工作环境中中即可。当文件中的数据无序排列时,可以利用reshape函数对调入的矩阵进行重排。reshape(X,m,n),它在矩阵总元素保持不变的前提下,将矩阵X重新排成mxn的二维矩阵。
(3)函数调用法
MATLAB中提供了一些创建特殊矩阵的函数,我们可以利用这些函数方便快捷的创建矩阵。
ones():产生全为1的矩阵;ones(n):产生n*n维的全1矩阵;ones(m,n):产生m*n维的全1矩阵;
eye():产生单位矩阵;
magic():产生魔方矩阵(方阵);魔方矩阵的每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,...,n^2共n^2个整数组成。
zeros():产生全0矩阵;
diag():产生对角矩阵;函数输入为一维向量,输出为以该向量为对角线的对角矩阵。
rand()函数:产生在0~1之间服从均匀分布的随机矩阵;
randn()函数:产生服从高斯分布的随机矩阵;
Demo2_1
Demo2_2
对于一个比较大的矩阵,其元素必然会和MATLAB所提供函数创建的有差别,但这并不代表我们就不能参与函数调用法创建矩阵。我们可以对矩阵加减乘除一个常数,也可以对矩阵中某些行和列的元素进行重新赋值。对矩阵中部分行列进行操作的方法,即获得原矩阵的子矩阵,采用x(m:n,q:l),表示选择对x矩阵m~n行和q~l列的元素进行操作。
Demo3
2.矩阵的运算和分析
diag(A):输出为矩阵A的对角线构成的列向量;
triu(A):输出为矩阵A的上三角阵;tril(A):输出为矩阵A的下三角阵;
rot90(A,k):输出为矩阵A逆时针旋转k*90度后的矩阵;
fliplr(A):将矩阵A进行左右翻转;flipud(A):将矩阵A进行上下翻转;
B=inv(A):求A的逆矩阵,满足AB=BA=E (E为单位矩阵)的条件;B=pinv(A):求A的伪逆矩阵,是对逆矩阵概念的延伸,也叫作广义逆矩阵,满足ABA=A,BAB=B 的条件;
det(A):输出为方阵A的行列式;
compan(p):输出为伴随矩阵,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后;
rank(A):输出为矩阵A的秩;
trace(A):输出为矩阵A的迹,即矩阵A的对角线上元素之和;
norm(V) :输出为向量V的范数,默认为2-范数;norm(V,1):计算向量V的1-范数;norm(V,2):计算向量V的2-范数;norm(V,inf):计算向量V的∞-范数。
eig(A):输出为矩阵A 的特征值和特征向量;
(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3) [V,D]=eig(A,’nobalance’):与(2)类似,但(2)中先对A作相似变换后求矩阵A的特征值和特征向量,而(3)中直接求矩阵A的特征值和特征向量。
length(A):输出为矩阵A最长维的长度;
size(A):输出为矩阵A各维的长度;
Demo4_1
Demo4_2
未完待续……
最后,感谢您的耐心阅读。