1.3 掌握MATLAB矩阵
在机器人仿真中,经常需要进行矩阵的运算。而MATLAB正是处理矩阵的能手。
这里的矩阵不仅包括m×n(m行n列)的二维矩阵,还可能是m×1或者1×n的矩阵(在线性代数中我们称之为向量),当然还包括1×1的矩阵(实际上就是单个的数字)。其实,MATLAB还能够运算更多维度的矩阵,也就是多维数组。
1.3.1 创建矩阵
(1)创建一般矩阵
在定义行向量时,需要使用方括号[]。各元素之间利用逗号或者空格分开。例如:
>> VectorA=[a1,a2,a3,a4,……,am]; >> VectorB=[b1 b2 b3 b4……bn];
当需要输入一组数量比较大的等差数列时,不必一个一个地输入。MATLAB提供一种简单的输入等差数列的方法:
>> Vector=20:5:40;
请您在MATLAB的命令窗口输入上面的代码并观看运行结果。该代码的表现形式为
变量=起点:步长:终点;
而如果表达方式为
变量=起点:终点;
这种方式默认步长为1。
如果需要输入一个多行的矩阵,各行之间需要用分号“;”隔开。运行下面的代码后我们可以看到变量Vector是一个2×4的矩阵,如图1-18所示。
图1-18 矩阵的表示
>> Vector=[10,20,30,40;50,60,70,80];
需要注意的是,在多行矩阵中各行元素的数量必须相等,对于列也是同样。
(2)创建特殊矩阵
对于一些特别的矩阵,MATLAB也给出了对应的函数。表1-9列出了一些可以创建特殊矩阵的函数。
表1-9 一些特殊矩阵的创建函数
例1-18 利用zeros函数产生一个所有元素全为零的矩阵
>> zero=zeros(4) %利用 zeros函数产生元素全为零的 4×4矩阵
例1-19 利用randn函数随机产生正态分布的矩阵
>> rand=randn(4) %利用 randn函数随机产生正态分布的 4×4矩阵
见图1-19。
图1-19 利用randn函数随机产生正态分布的矩阵
例1-20 利用eye函数生成单位矩阵
>> eye=eye(4) %利用 eye函数生成 4×4的单位矩阵
见图1-20。
图1-20 利用eye函数生成单位矩阵
例1-21 利用magic函数生成魔方矩阵(每行每列每个对角线的和都相等)
>> magic=magic(4) %利用 magic函数生成 4×4的魔方矩阵
见图1-21。
图1-21 利用magic函数生成魔方矩阵
1.3.2 合并矩阵
我们可以将两个矩阵利用[]符号合并成一个矩阵。矩阵合并语句为:
MAT3=[MAT1 MAT2] MAT3=[MAT1,MAT2] MAT3=[MAT1;MAT2]
可以看出,这里有三种合并方式,分别为在原来两个矩阵变量之间添加空格、逗号和分号。不过无论是哪种,都需要包括在方括号之内。
例1-22 矩阵合并之一:空格隔开
>> MAT1=[1 2 3] >> MAT2=[2,3,4] >> MAT4=[MAT1 MAT2]
见图1-22。
图1-22 例1-22的运行结果
可见,两个被合并矩阵(或向量)之间如果是空格的话,那么第二个矩阵(或向量)将被合并到第一个矩阵(或向量)的后面,即总的列数将增加,行数不变。
例1-23 矩阵合并之二:分号隔开
>> MAT1=[1 2 3] >> MAT2=[2,3,4] >> MAT3=[MAT1;MAT2]
见图1-23。
图1-23 例1-23的运行结果
可见,两个被合并矩阵(或向量)之间如果是分号的话,那么第二个矩阵(或向量)将被合并到第一个矩阵(或向量)的下面,即总的行数将增加,列数不变。
说明
①请自行检验利用逗号隔开时两个矩阵合并的结果。②在合并2个矩阵时,在合并连接处对应的行或列必须维数相等,否则MATLAB就会报错。请尝试合并两个行、列维数均不相等的矩阵,查看MATLAB的显示信息。
1.3.3 查询矩阵信息
有时需要查询矩阵的大小、长度、元素个数乃至数据类型等信息。MATLAB为我们准备了一系列的查询函数,如表1-10所示。
表1-10 常用的矩阵信息查询函数
例1-24 矩阵信息查询函数的使用
rng('default'); %随机数生成器,产生 0到 1之间的伪随机数 EX=randi(100,4,4); %产生一个4×4的随机整数矩阵,各元素值不大于100 len=length(EX); %矩阵最长一维的元素个数 ns=ndims(EX); %矩阵的维数 nm=numel(EX); %元素总个数 sz=size(EX); %各维的长度 ic=iscolumn(EX); %判断是否为列矩阵。 1=是,0=否,下同 is=isscalar(EX); %判断是否为标量 im=ismatrix(EX); %判断是否为矩阵 ir=isrow(EX); %判断是否为行矩阵 iv=isvector(EX); %判断是否为向量 INFOR=[len,ns,nm,sz;ic,is,im,ir,iv];%逗号不换行,分号换行
产生的随机整数矩阵EX和INFOR的值分别为图1-24的(a)与(b)。
图1-24 例1-24的运行结果