Matlab基础之矩阵的创建,操作和运算

本博客讲述matlab矩阵的创建,操作和各种运算,作为本人学习总结和今后编码的查阅文档,文中所述为本人见解,因作者水平原因,可能有不妥之处,请谅解!

矩阵的创建方法

  • 使用方括号,逗号用于分隔每一行中的元素,分号表示换行:

    代码:

    a=[1,2,3;4,5,6;7,8,9];
    

    结果:

    >> a=[1,2,3;4,5,6;7,8,9]
    a =
         1     2     3
         4     5     6
         7     8     9
    
  • 使用冒号方法生成:

    代码:

    % mat=start:step:end,结果包括end,step如果是1的话,可以省略
    b=1:1:10; 
    % 或者可以写成:
    b=1:10;
    

    结果:

    >> b=1:1:10
    b =
         1     2     3     4     5     6     7     8     9    10
    
  • 使用matlab提供的一系列函数生成对应矩阵
    • linspace(开始,结束,元素个数),用于等差生成一维数组,默认生成100个。
    • eye(dim),生成特定维度的单位矩阵
    • zeros(size1,size2),生成对应size的全零矩阵
    • ones(size1,size2),生成全1矩阵
    • rand(dim),生成特定维度的随机矩阵,元素的值范围为(0,1)
    • randn(dim),生成特定维度的服从正态分布的随机矩阵。

    代码:

    e=eye(4); %生成4维单位矩阵
    z=zeros(1,4); % 生成14列的全零矩阵
    o=ones(4,1); % 生成41列的全1矩阵
    r=rand(4); % 生成4*40-1范围内的随机矩阵
    rn=randn(4); % 生成4*4的均值为0,方差为1的高斯分布随机矩阵。
    

    结果:

    >> e=eye(4)
    e =
         1     0     0     0
         0     1     0     0
         0     0     1     0
         0     0     0     1
    >> z=zeros(1,4)
    z =
         0     0     0     0
    >> o=ones(4,1)
    o =
         1
         1
         1
         1
    >> r=rand(4)
    r =
        0.8147    0.6324    0.9575    0.9572
        0.9058    0.0975    0.9649    0.4854
        0.1270    0.2785    0.1576    0.8003
        0.9134    0.5469    0.9706    0.1419
    >> rn=randn(4)
    rn =
       -0.1241    0.6715    0.4889    0.2939
        1.4897   -1.2075    1.0347   -0.7873
        1.4090    0.7172    0.7269    0.8884
        1.4172    1.6302   -0.3034   -1.1471
    

矩阵的访问与修改

  • 获取矩阵的相关信息
    • size(arr):形状信息
    • length(arr):长度信息,相当于max(size(arr))。

    代码:

    l=length(a); 
    size_a=size(a); 
    

    结果:

    >> l=length(a)
    l =
         3
    >> size_a=size(a)
    size_a =
         3     3
    
  • 矩阵元素的访问与修改
    • matrix(row,col) :访问row行,col列的元素,修改可直接加上赋值号。
    • matrix(num) :按照顺序访问,特别注意,matlab一列一列的访问,与其它语言不同。
    • matrix(row,:) :访问第row行的所有元素。
    • matrix(row,:)=[1,2,……] :修改第row行,直接赋值覆盖原值。
    • matrix(row,:)=[] :删除第row行。
    • matrix(:,col) :表示第col列的相关操作,和行一致。

    代码:

    matrix=[1,2,3,4;5,6,7,8]
    matrix(1)
    matrix(2)
    matrix(3)
    matrix(2,4)
    matrix(1,:)
    matrix(:,1)
    matrix(1,1)=100
    temp=matrix;
    temp(1,:)=[]
     temp=matrix;
    temp(:,2)=[]
    

    结果:

    >> matrix=[1,2,3,4;5,6,7,8]
    matrix =
         1     2     3     4
         5     6     7     8
    >> matrix(1)
    ans =
         1
    >> matrix(2)
    ans =
         5
    >> matrix(3)
    ans =
         2
    >> matrix(1,2)
    ans =
         2
    >> matrix(2,4)
    ans =
         8
    >> matrix(1,:)
    ans =
         1     2     3     4
    >> matrix(:,1)
    ans =
         1
         5
    >> matrix(1,1)=100
    matrix =
       100     2     3     4
         5     6     7     8
    >> temp=matrix;
    >> temp(1,:)=[]
    temp =
         5     6     7     8
    >> temp=matrix;
    >> temp(:,2)=[]
    temp =
       100     3     4
         5     7     8
    

矩阵相关操作和运算

  • 矩阵相关操作
    • 矩阵转置:加一个英文的‘即可。
    • diag(a,k):表示a矩阵主对角线上第k条线的元素组成的列向量。
    • tril(a,1):tril(a,k)和triu(a,k+)分别表示下三角矩阵和上三角矩阵,后面的k和上面一致。
    • pinv(a):当a不是方阵的时候,结果是广义逆矩阵。当a是可逆方阵,结果与逆矩阵inv(a) 相同。
    • [v,D]=eig(a):v是特征向量组成的矩阵,D为特征值组成的对角阵,其中av=Dv。
    • det(a):求矩阵a的行列式。
    • rank(a):求矩阵的秩。
    • compan(b):求向量的伴随矩阵。

    代码和结果:

    >> a=[1,2,3;4,5,6;7,8,9]
    a =
         1     2     3
         4     5     6
         7     8     9
    >> b=1:5
    b =
         1     2     3     4     5
    >> a'
    ans =
         1     4     7
         2     5     8
         3     6     9
    >> diag(a,1)
    ans =
         2
         6
    >> diag(a,-1)
    ans =
         4
         8
    >> diag(a,0)
    ans =
         1
         5
         9
    >> tril(a,1)
    ans =
         1     2     0
         4     5     6
         7     8     9
    >> tril(a,0)
    ans =
         1     0     0
         4     5     0
         7     8     9
    >> triu(a,0)
    ans =
         1     2     3
         0     5     6
         0     0     9
    >> rank(a)
    ans =
         2
    >> compan(b)
    ans =
        -2    -3    -4    -5
         1     0     0     0
         0     1     0     0
         0     0     1     0
    >> arr=[1,2;3,4]
    arr =
         1     2
         3     4
    >> inv(arr)
    ans =
       -2.0000    1.0000
        1.5000   -0.5000
    >> pinv(arr)
    ans =
       -2.0000    1.0000
        1.5000   -0.5000
    >> det(arr)
    ans =
        -2
    >> [v,D]=eig(arr)
    v =
    
       -0.8246   -0.4160
        0.5658   -0.9094
    D =
       -0.3723         0
             0    5.3723
    
  • 矩阵数值相关运算
    • 矩阵乘法,矩阵除法,矩阵加法,矩阵减法,矩阵乘方: matrix*matrix,matrix/matrix,matrix+matrix,matrix-matrix,matrix^2。
    • 矩阵对应位置的乘法,除法,乘方: 在*,/,^号的前面加一个.即可。

    代码和结果:

    >> a=[1,2,3;4,5,6;,7,8,9]
    a =
         1     2     3
         4     5     6
         7     8     9
    >> a*a
    ans =
        30    36    42
        66    81    96
       102   126   150
    >> a+a
    ans =
         2     4     6
         8    10    12
        14    16    18
    >> a-a
    ans =
         0     0     0
         0     0     0
         0     0     0
    >> a^2
    ans =
        30    36    42
        66    81    96
       102   126   150
    >> a.*a
    ans =
         1     4     9
        16    25    36
        49    64    81
    >> a./a
    ans =
         1     1     1
         1     1     1
         1     1     1
    >> a.^2
    ans =
         1     4     9
        16    25    36
        49    64    81
    >> arr=[1,2;3,4]
    arr =
         1     2
         3     4
    >> arr/arr
    ans =
         1     0
         0     1
    

多维矩阵和其它操作

  • 矩阵拼接
    • cat(dim,arr1,arr2):在dim维度上拼接。
    • vertcat(arr,arr):相当于cat(1,arr,arr)。
    • horzcat(arr,arr):相当于cat(2,arr,arr)。
    • [arr;arr]:相当于cat(1,arr,arr)。
    • [arr,arr]:相当于cat(2,arr,arr)。

    代码和展示:

    >> arr=[1,2,3;4,5,6]
    arr =
         1     2     3
         4     5     6
    >> cat(1,arr,arr)
    ans =
         1     2     3
         4     5     6
         1     2     3
         4     5     6
    >> cat(2,arr,arr)
    ans =
         1     2     3     1     2     3
         4     5     6     4     5     6
    >> [arr,arr]
    ans =
         1     2     3     1     2     3
         4     5     6     4     5     6
    >> [arr;arr]
    ans =
         1     2     3
         4     5     6
         1     2     3
         4     5     6
    >> vertcat(arr,arr)
    ans =
         1     2     3
         4     5     6
         1     2     3
         4     5     6
    >> horzcat(arr,arr)
    ans =
         1     2     3     1     2     3
         4     5     6     4     5     6
    
  • 维度变换
    • reshape(matrix,dim1,dim2……):变换matrix的维度,其中dim的乘积为matrix元素的个数,否则会报错
    • squeeze(matrix):压缩矩阵的维度,长度为1的维度会被压缩。

    代码和展示:

    >> a
    a =
         1     2     3
         4     5     6
         7     8     9
    >> rs=reshape(a,1,3,3)
    rs(:,:,1) =
         1     4     7
    rs(:,:,2) =
         2     5     8
    rs(:,:,3) =
         3     6     9
    >> size(rs)
    ans =
         1     3     3
    >> squeeze(rs)
    ans =
         1     2     3
         4     5     6
         7     8     9
    
  • 多维矩阵创建
    • 直接创建。
    • 已有数组上扩展。
    • 使用cat对矩阵进行拼接。

代码和展示:

% 直接创建

>> mul_1(:,:,1)=[1,2,3;2,3,4]
mul_1 =
     1     2     3
     2     3     4
>> mul_1(:,:,2)=[3,4,5;4,5,6]
mul_1(:,:,1) =
     1     2     3
     2     3     4
mul_1(:,:,2) =
     3     4     5
     4     5     6
     
% 在已有数组上扩展

>> mul_2 = [1,2,3;2,3,4]
mul_2 =
     1     2     3
     2     3     4
>> mul_2(:,:,2) = [3,4,5;4,5,6]
mul_2(:,:,1) =
     1     2     3
     2     3     4
mul_2(:,:,2) =
     3     4     5
     4     5     6
     
% 使用cat函数

>> arr=[1,2,3;4,5,6]
arr =
     1     2     3
     4     5     6
>> cat(3,arr,arr)
ans(:,:,1) =
     1     2     3
     4     5     6
ans(:,:,2) =
     1     2     3
     4     5     6
rslidar_msg是一个ROS2环境下的雷达packet消息定义工程。要编译rslidar_msg,你可以按照以下步骤进行操作: 1. 首先,确保你已经成功编译了rslidar_sdk。你可以使用以下命令编译rslidar_sdk: ``` colcon build --packages-select rslidar_sdk ``` 2. 接下来,你需要在ROS2环境下同步rslidar_msg。你可以使用以下命令从网上同步rslidar_msg: ``` cd ~/RS_Helios_eloquentws/src git clone https://github.com/RoboSense-LiDAR/rslidar_msg ``` 3. 然后,你需要初始化更新rslidar_sdk的子模块。你可以使用以下命令完成这一步骤: ``` cd rslidar_sdk git submodule init git submodule update ``` 4. 最后,你可以在RS_Helios_eloquentws目录下编译整个工程,包括rslidar-sdkrslidar-msg。你可以使用以下命令完成编译: ``` cd ~/RS_Helios_eloquentws colcon build --packages-select rslidar-sdk rslidar-msg ``` 这样,你就可以成功编译rslidar_msg了。 #### 引用[.reference_title] - *1* [ROS2驱动速腾16线激光雷达](https://blog.csdn.net/weixin_56641176/article/details/131022156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【EHub_tx1_A200】Ubuntu18.04 + ROS-Melodic/ROS2-Elequent + 速腾 RS-Helios_16P雷达 评测](https://blog.csdn.net/cau_weiyuhu/article/details/130892684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值