MATLAB矩阵及其运算

1. 矩阵的创建

创建矩阵有如下4种方法:直接输入法、载入外部数据法、利用 MATLAB 内置函数、利用 M 文件编辑器。

1.1 直接输入法

最简单地建立矩阵的方法是从键盘直接输入矩阵的元素——将矩阵的元素用方括号括起来,按矩阵行的顺序输入个元素,同一行的个元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。如果只输入一行则形成一个数组(又称作向量)。矩阵或数组中的元素可以是任何 MATLAB 表达式,可以是实数,也可以是复数。
在此方法下创建矩阵要注意以下规则:

  • 矩阵元素必须在”[ ]”内;
  • 矩阵同行元素之间用空格(或“,”)隔开;
  • 矩阵的行与列之间用“;”隔开。
    A=[1 2 3;4 5 6;7 8 9]
    B=[1,2,3;4,5,6;7,8,9]

1.2 载入外部数据

在 MATLAB 中,load 函数用于载入生成的包含矩阵的二进制文件,或者读取包含数值数据的文本文件。文本文件中的数字应排列成矩形,每行只能包含矩阵的一行元素,元素与元素之间用空格分隔,各行元素的个数必须相等。
例如,创建一个包含下列数字的文本文件:

    1 2 3 4 
    5 6 7 8

把该文件命名为 data.txt,并保存在 MATLAB 的目录下。如需读取该文件,可在命令行窗口输入:

    >>load data.txt

系统将读取该文件并创建一个变量 data,包含上面的这个矩阵。在 MATLAB 工作空间中可以查看这个变量。

    % 读取数据 trees

    load trees     % 读取二进制数据文件
    image(X)       % 以图像的形式显示数组 X
    colormap(map)  % 设置颜色查找表为 map

运行结果为:
这里写图片描述

1.3 利用 MATLAB 内置函数

在 MATLAB 中,系统内置特殊函数可以用于创建矩阵,通过这些函数,可以很方便地得到想要的特殊矩阵。

函数名功能介绍
ones( )产生全为 1 的矩阵
zeros( )产生全为 0 的矩阵
eye( )产生单位阵
rand( )产生在(0,1)区间均匀分布的随机阵
randn( )产生均值为0,方差为1的标准正态分布随机矩阵
compan伴随矩阵
galleryHigham 检验矩阵
hadamardHadamard 阵
hankelHankel 阵
hilbHilbert 阵
invhilb逆 Hilbert 阵
magic魔方阵
pascalPascal 阵
rosser经典对称特征值
toeplitzToeplitz 阵
vanderVander 阵
wilknsionwilknsion 特征值检验矩阵

利用几个内置函数来创建矩阵。

    Z1=zeros(5,4)   % 产生 5*4 全为 0 的矩阵
    Z2=ones(5,4)    % 产生 5*4 全为 1 的矩阵
    Z3=eye(5,4)     % 产生 5*4 的单位矩阵
    Z4=rand(5,4)    % 产生 5*4 的在(0,1)区间均匀分布的随机阵 
    Z5=randn(5,4)   % 产生 5*4 的均值为0,方差为1的标准正态分布随机矩阵 
    Z6=hilb(3)      % 产生 3 维的 Hilbert 阵 
    Z7=magic(3)     % 产生 3 阶的魔方阵 

1.4 利用 M 文件编辑器

此方法需要用 MATLAB 自带的文件编辑器或其他文件编辑器来创建一个文件,代码和要在 MATLAB 命令行窗口中输入的命令一样,然后以 .m 格式保存该文件。
如:A=[23 22 56;42 5 80;7 76 89],把输入的内容以纯文本方式存盘(设该文件名为 matrix.m)。

    % 在MATLAB 命令行窗口中输入 matrix
    >>matrix
    A =
        12 22 56
        42 5 80
        7 76 89

即运行该 M 文件,就会自动建立一个名为 matrix 的矩阵。

2. 矩阵的寻访

在 MATLAB 中,矩阵的寻访主要有下标元素访问、单元素访问和多元素访问,下面将进行介绍。

2.1 下标元素访问

  • “双下标”表示法:即分别表示行与列,矩阵中的元素都有对应的“第几行,第几列”。
  • “单下标”表示法:一种线性下标表示法,系统默认矩阵的所有元素按照从上到下,行从左到右排成一列,只需要使用一个下标索引就可以定位矩阵中的任何一个元素。

    MATLAB 还提供了用户下标计算函数,sub2ind 用于双下标计算单下标,ind2sub 用于单下标计算双下标,以方便不同下标之间的转换。

     clear all
     >> A=[2 5 9 20;3 6 7 22;7 8 9 23;5 8 24 25]

    A =
         2     5     9    20
         3     6     7    22
         7     8     9    23
         5     8    24    25

     >> A(4,3)  % 使用双下标访问 A 矩阵的第 4 行第 3 列

    ans =
         24

     >> A(12)   % 使用单下标访问 A 矩阵的第 4 行第 3 列

    ans =
         24

     >> sub2ind(size(A),3,4)   % 双下标转换为单下标

    ans =
         15


     >>  A(15)

    ans =
         23

2.2 单元素访问

在 MATLAB 中,必须指定两个参数,即其所在行数和列数,才能访问一个矩阵中的单个元素。例如,访问矩阵 M 中的任何一个元素。
M =( row, column ): 其中 row 和 column 分别代表行数和列数。

    % 对矩阵 M 的单元素进行访问
    >> M=randn(3)
    >> x=M(1,2)
    >> y=M(2,3)
    >> z=M(3,3)
    M =
        0.5377    0.8622   -0.4336
        1.8339    0.3188    0.3426
       -2.2588   -1.3077    3.5784

    x =
        0.8622
    y =
        0.3426
    z =
        3.5784

2.3 多元素访问

矩阵多元素的访问,包括访问该矩阵的某一行或某一列的若干元素、整行或整列元素、若干行或若干列的元素以及矩阵所有元素等。

  • A( e1:e2:e3):表示取数组或者矩阵 A 的第 e1 元素开始每隔 e2 步长一直到 e3 的所有元素;
  • A( [m n l] ):表示取数组或矩阵 A 中的第 m,n,l 个元素;
  • A( : , j ):表示取 A 矩阵的第 j 列全部元素;
  • A( i , : ):表示 A 矩阵第 i 行的全部元素;
  • A( i : i+m , : ):表示取 A 矩阵第 i~i+m 行的全部元素;
  • A( : , k : k+m ):表示取 A 矩阵第 k~k+m 列的全部元素;
  • A( i : i+m , k : k+m ):表示取 A 矩阵第 i~i+m 行内,并在第 k~k+m 列中的所有元素;
  • 还可利用一般向量和 end 运算符来表示矩阵下标,从而获得子矩阵。end 表示某一维的末尾元素下标。
    % 对创建的矩阵进行多元素访问
    M=randn(4)
    M(1,:)      % 访问第一行所有元素
    M(1:3,:)    % 访问 1~3 行所有元素
    M(:,2)      % 访问第 2 列所有元素
    M(:)        % 访问所有元素

3. 矩阵的拼接

矩阵的拼接有按照水平方向拼接和按照垂直方向拼接两种。例如,对矩阵 A 和 B 进行拼接,拼接表达式分别如下:

  • 水平方向拼接:C = [ A B ] 或 C= [ A, B ]

  • 垂直方向拼接:C= [ A ; B]

    【注意】:矩阵拼接时,必须满足原始矩阵维数对应,如果不满足条件,则拼接不会成功,即出错。

    clear all;
    A=magic(3)
    B=eye(3)
    E=[A,B]   %按水平方向拼接
    F=[A;B]   %按垂直方向拼接

在 MATLAB 中,出来使用矩阵拼接符[ ],还可以使用矩阵拼接函数。

  • cat 函数用于按指定的方向连接矩阵。其调用格式为

    C= cat ( dim, A, B ):按照 dim 指定的方向连接矩阵 A 与 B,构造出矩阵 C。
    C= cat ( dim, A1, A2, A3, A4,… ): A1, A2, A3, A4,… 表示被连接的多个矩阵。

    >> clear all;
    >> A1=[2 2;3 4]
    >> A2=[5 6;7 8];
    >> C1=cat(1,A1,A2)  %垂直拼接
    >> C2=cat(2,A1,A2)  %水平拼接
    >> C3=cat(3,A1,A2)  %三维数组
  • repmat 函数用于通过输入矩阵的备份拼接出一个大矩阵。调用格式如下:

    B= repmat ( A, m, n) 或 B=repmat ( A, [ m, n ]):repmat 函数建立一个大矩阵 B,B 是由矩阵 A 的备份拼接而成的,纵向摆 m 个备份,横向摆 n 个备份,B 中总共包含 m*n 个A。A 为被用来进行复制的矩阵;m 为纵向上复制 A 的次数;n 为横向上复制 A 的次数。

    B=repmat(A , [ m n p … ]):repmat 函数生成一个多维(m*n*p*… ) 数组 B,B 由矩阵 A 的m*n*p*… 个备份在多个方向拼接而成。

    N=repmat(1,[3,3])

    N =
     1     1     1
     1     1     1
     1     1     1
  • horzcat 函数用于对矩阵进行水平拼接。其调用格式如下:

    C=horzcat ( A1, A2, … ):水平连接多个矩阵 A1,A2,… ,参数列表中的所由矩阵都必须有相同的行数。
    horzcat 函数连接 n 维数组是沿第二维(即行)的方向,因此被连接数组的第一维和其他维的大小必须匹配。

    clear all
    A=magic(5);
    A(4:5,:)=[]
    B=magic(3)*1000
    C=horzcat(A,B)
  • vertcat 函数用于垂直连接矩阵。其调用格式如下:

    C=vertcat ( A1, A2, … ):用于垂直连接多个矩阵 A1,A2,…,参数列表中的所有矩阵都必须有相同的列数。该函数连接 n 维数组是沿第一维(即列)的方向。

    clear all;
    A=magic(5);
    A(:,4:5)=[]
    B=magic(3)*1000
    C=vertcat(A,B)
  • blkdiag 函数用于通过输入的矩阵构造一个块对角矩阵。其调用格式如下:

    T=blkdiag(A,B,C,D,…):blkdiag 函数用输入的矩阵 A,B,C,D,…构造一个块对角矩阵 T。

    clear all;
    A=eye(2);
    B=ones(2,2);
    C=[1 2;3 4;5 6];
    D=magic(3);
    T=blkdiag(A,B,C,D)
    T =

     1     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0
     0     0     1     1     0     0     0     0     0
     0     0     1     1     0     0     0     0     0
     0     0     0     0     1     2     0     0     0
     0     0     0     0     3     4     0     0     0
     0     0     0     0     5     6     0     0     0
     0     0     0     0     0     0     8     1     6
     0     0     0     0     0     0     3     5     7
     0     0     0     0     0     0     4     9     2
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值