MATLAB入门(3)数组与矩阵

MATLAB的数组与矩阵操作

数组生成及初等运算

数组(矩阵)生成

直接生成
  • 用中括号创建,不同行用分号隔开,不同列用空格隔开,冒号参照冒号表达式规则快速建立矩阵;
函数生成
  • ![[常用特殊矩阵.jpg|]]

冒号表达式

  • 可以产生行向量:e1:e2:e3(首:步长:尾)
    • 省略e2则步长默认为1;
    • 还能用linespace (a,b,n)产生行向量,ab为首尾,n为元素总数,省略n时自动产生100个元素;

基本数组操作

  • 包括元素的寻址、查找和排序,以及对整个矩阵的转置、重排、拆分、连接和变换等;

数组元素的寻址

  • 对数组下标访问

    一维寻址

    A=randn(1,6)      %构造随机矩阵
    
    A([1 3 4 6])      %按下标提取矩阵元素
    

    若采用单下标寻址,则数组中元素下标k表示为(i-1)* m+i

    二维寻址

    A=randn(3,4)      
    
    A(6)              %按列
    
    A(3,2)            %3行2列
    

数组元素的查找

  • find函数 , 语法为:

    
      单下标模式
    
      indices=find(X)              %用一个列向量存储非0元素下标
      
      indices=find(X,k)            %按列从前往后找出前k个非0元素
      
      indices=find(X,k,'first')    %按列从前往后找出前k个非0元素
      
      indices=find(X,k,'last')     %按列从后往前找出前k个非0元素
    
      多下标模式
    
      [i,j]=find(...)              %给出两个下标,具体语法同上
      
      [i,j,v]=find(...)            %v是具体的非零数值
      
    

    MATLAB中经常通过多重逻辑关系组合产生逻辑数组,判断数组元素是否满足某种关系,此时find函数可以返回符合比较关系的元素索引,从而实现对数组元素的查找

数组元素的排序

  • sort:
    
    B=sort(A)                   %对A排序,默认升序
    
    B=sort(A,dim)               %dim指定维数(dim默认为1,A为多维数组)--在二维数组中,1为按列(一维),2为按行(二维)
    
    B=sort(...,mode)            %mode为排序方式:ascend/descend
    
    [B,IX]=sort(...)            %IX存储排序后的下标数组
    
    

矩阵转置

  • A’:转置
  • A.':非共轭转置(当A为复数矩阵时存在该区分)

矩阵重排

  • 对已存在矩阵,可根据其存储方式进行重排,例如:
    
    >> a=[1 2;3 4;5 6]
    
    a =
    
         1     2
         3     4
         5     6
    
    >> b=a(:)
    
    b =
    
         1
         3
         5
         2
         4
         6
    
    >> c=reshape(a,2,3)         %变成2x3矩阵。注意,变换前后的矩阵元素个数必须相等
    
    c =
    
         1     5     4
         3     2     6
    
    >> d=zeros(2,2)             %先定义一个2x2的全零矩阵
    
    d =
    
         0     0
         0     0
    
    >> d(:)=a(3:6)              %然后从a矩阵中取出4个元素,构成新矩阵
    
    d =
    
         5     4
         2     6
    
    

矩阵拆分

  • 矩阵元素
    • 在给矩阵个别元素赋值时,如果超出矩阵范围,会自动扩展矩阵,中间元素填0;
    • sub2ind(下标转序号);
    • ind2sub(序号转下标);
    • size(A)函数返回包含两个元素的向量,分别是矩阵A的行数和列数;
    • length(A)函数给出行数和列数中的较大者;
    • ndims(A)给出矩阵A的维数;
    • reshape(A,m,n)函数在矩阵总元素保持不变的前提下,将矩阵A按列重新排成mxn的二维矩阵(需要元素个数对上)
      • 注意:reshape函数只改变矩阵的逻辑结构,不改变原矩阵的元素个数及其存储结构
  • 矩阵的拆分
    • 冒号表达式获取子矩阵
      • A(:,j)表示取矩阵A的第j列全部元素(其他比如-A(i,:)-形式类似);
      • A(i:i+m,:)表示取矩阵A第i~i+m行的全部元素,其他形式类似 ;
      • end表示某一维的末尾元素下标
    • 利用空矩阵删除矩阵元素
      • 定义[]为空矩阵,该方法与clear的区别在于:矩阵依旧存在于工作区,只是维数为0;
      • A(:,[2,4])=[]即为删除A的第二列和第四列元素

矩阵连接

  • 联合一个或多个矩阵形成一个新矩阵,方括号[]可以作为矩阵连接操作符:
    • A=[B C] ----水平连接矩阵B和C;
    • A=[B;C] ----垂直连接矩阵B和C;
    • 函数连接:
      • cat—连接矩阵;
      • horzcat—水平连接多个矩阵;
      • vertcat—垂直连接多个矩阵;
      • remat—复制一个矩阵到另一个矩阵;
      • blkdiag—对角连接多个矩阵;

矩阵变换

  • MATLAB提供一组变换函数,可以将矩阵变换成期望的形式:
    >> A=fix(10*rand(2,4))         %产生[0,10]之间均匀分布的随机矩阵(取整)
    
    A =
    
         8     1     6     2
         9     9     0     5
    
    >> B1=tril(A,1),B2=triu(A,1)   %下三角矩阵和上三角矩阵
    
    B1 =
    
         8     1     0     0
         9     9     0     0
    
    
    B2 =
    
         0     1     6     2
         0     0     0     5
    
    >> C1=fliplr(A),C2=flipud(A)    %左右、上下翻转
    
    C1 =
    
         2     6     1     8
         5     0     9     9
    
    
    C2 =
    
         9     9     0     5
         8     1     6     2
    
    

数组运算

数值运算

  • 运用基本数学函数对矩阵进行运算:
    >> a=[2 4;6 8]
    
    a =
    
         2     4
         6     8
    
    >> b=sqrt(a)      %平方根
    
    b =
    
        1.4142    2.0000
        2.4495    2.8284
    
    >> d=exp(a)
    
    d =
    
       1.0e+03 *
    
        0.0074    0.0546
        0.4034    2.9810
    
    

逻辑运算:

  • 与 & and()
  • 或 | or()
  • 非 ~ not()

关系运算

  • MATLAB提供了六种关系运算符:分别是大于>、大于等于>=、小于<、小于等于<=、等于== 、不等于~=
  • 利用关系运算符可以实现多分支处理

向量的点积、叉积、混合积

  • 点积计算(dot函数)
    两个向量 在其中某一个向量方向上的投影的乘积、通常引申定义为向量的模
    dot(a,b)          %向量a、b必须同维
    
    dot(a,b,dim)      %返回向量a、b在维数为dim的点积
    
    >> a=[1 2 3 4]
    
    a =
    
     1     2     3     4
    
    >> b=[2 1 1 4]
    
    b =
    
     2     1     1     4
    
    >> dot(a,b)    %dot乘表示向量内积
    
    ans =
    
    23
    
    >> a.*b         %*乘表示矩阵对应位置相乘
    
    ans =
    
     2     2     3    16
    
    

a

a =

 1     2     3     4

c

c =

 1
 2
 3
 4


>> a.*c

ans =

 1     2     3     4
 2     4     6     8
 3     6     9    12
 4     8    12    16

>> dot(a,c)

ans =

30

```
  • 叉积

    表示过两相交向量交点的且垂直于两向量所在平面的向量,由cross函数实现

    • c=cross(a,b)返回向量a和b的叉积向量,即c=a x b。a和b必须为三维向量
    • 设a=(X1,Y1,Z1),b=(X2,Y2,Z2) 则 a×b=(Y1Z2-Y2Z1,Z1X2-Z2X1,X1Y2-X2Y1)
  • 混合积

    由以上两个函数实现:dot(a,cross(b,c))

范数

  • 对函数、向量和矩阵定义的一种度量形式,任何对象的范数值都是一个非负实数。使用范数来测量两个函数、向量火或矩阵之间的距离。同一向量,采用不同的范数定义可以得到不同的范数值。
    • ||X||满足以下三个条件:
      • (1)非负性:||X||>=0(仅当两个向量重合时等于0);

      • (2)齐次性:α∈R,有||αX||=|α|||X||;

      • (3)三角不等式:有||X+Y||<=||X||+||Y||;

        则称实数||X||为向量X的范数。

数组的保存和载入

一般将数组保存在文件中,每次需要时进行加载

  • save命令将工作区指定变量存储在.mat文件中:
    save<filename><var1><var2>...<varN>
    
  • load命令将.mat文件中的变量加载到MATLAB工作区中
    load<filename><var1><var2>...<varN>
    

矩阵运算

基本运算

  • 矩阵加减
    • 需满足以下条件之一:
      • (1)类型相同、即行数相同,且列数相等;
      • (2)其中一个为标量,此时的加减法运算结果等于矩阵中每一个元素都与标量做加减运算;
  • 矩阵乘积
    • 必须满足行列条件:(前列数等于后行数)
  • 矩阵除法
    • 左除(\)
    C=A\B=inv(A)*B		%AX=B的解
    
    • 右除(/)
    C=A/B=A*inv(B)		%XA=B的解
    
  • 矩阵乘方和开方运算
    • 矩阵乘方由符号“”实现,开方由sqrtm函数实现,矩阵中每个元素都乘方则用“.”实现
  • 矩阵指数和对数运算
    • expm和logm(注意与exp和log之间的区别—前者是矩阵指数/矩阵对数,后者仅为指数/对数(每个矩阵元素的指数/对数))

取得矩阵信息的函数

  • length:返回矩阵最长的那维长度
  • numel:返回矩阵的元素数
  • ndims:返回矩阵的维数
  • size:返回矩阵每一维的长度

点运算

两矩阵进行点运算是指他们的对应元素进行相关运算,要求两矩阵的维数相同;

  • 对应元素相乘( .* )
>> A=[1 2 3;4 5 6;7 8 9];
>> B=[-1 0 1;1 -1 0;0 1 1];
>> C=A.*B

C =

    -1     0     3
     4    -5     0
     0     8     9

  • 对应元素相除(.\ 或 ./)
>> x=[1 2 3 ;4 5 6 ];
>> y=[-2 1 3;-1 1 4];
>> z1=x./y

z1 =

   -0.5000    2.0000    1.0000
   -4.0000    5.0000    1.5000

>> z2=y.\x

z2 =

   -0.5000    2.0000    1.0000
   -4.0000    5.0000    1.5000          %显然x./y=y.\x与矩阵左右除不同
  • 对应元素指数(.^)
>> x=[1 2 3];
>> y=[4 5 6];
>> z=x.^y

z =

     1    32   729

指数或底都可以是标量

%指数标量
>> x=[1 2 3];
>> y=[4 5 6];
>> z=x.^2

z =

     1     4     9

%底标量
>> x=[1 2 3];
>> y=[4 5 6];
>> z=2.^[x y]

z =

     2     4     8    16    32    64
  • 示例:当x=0.1、0.4、0.7、1时,分别求y=sinxcosx的值,可以以向量形式求解:
>> x=0.1:0.3:1;
>> y=sin(x).*cos(x);
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值