用MATLAB玩转机器人
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 掌握MATLAB矩阵

在机器人仿真中,经常需要进行矩阵的运算。而MATLAB正是处理矩阵的能手。

这里的矩阵不仅包括m×nmn列)的二维矩阵,还可能是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的运行结果