• MATLAB的矩阵运算


      MATLAB是基于矩阵和数组计算的,可以直接对矩阵和数组进行整体的操作,MATLAB有三种矩阵运算类型:矩阵的代数运算、矩阵的关系运算和矩阵的逻辑运算。其中,矩阵的代数运算应用最广泛。本文主要讲述矩阵的基本操作,涉及矩阵的创建、矩阵的代数运算、关系运算和逻辑运算等基本知识。

    矩阵的创建

    直接输入法创建矩阵

    % 1. 直接输入法创建矩阵
    >> A = [1,2,3; 4,5,6; 7,8,9]
    
    A =
    
         1     2     3
         
         4     5     6
         7     8     9
    

    函数法创建矩阵

    简单矩阵

    % 2. 函数法创建矩阵
    >> zeros(3)
    % 生成3x3的全零矩阵
    ans =
    
         0     0     0
         0     0     0
         0     0     0
      
    >> zeros(3,2)
    % 生成3x2的全零矩阵
    ans =
    
         0     0
         0     0
         0     0
      
     >> eye(3)
    % 生成单位矩阵
    ans =
    
         1     0     0
         0     1     0
         0     0     1
         
    >> ones(3)
    % 生成全1矩阵
    ans =
    
         1     1     1
         1     1     1
         1     1     1
     
    >> magic(3)
    % 生成3x3的魔方阵
    ans =
    
         8     1     6
         3     5     7
         4     9     2
         
     >> diag(1:3)
    % 对角矩阵
    ans =
    
         1     0     0
         0     2     0
         0     0     3
    >> diag(1:5,1)
    % 对角线向上移1位矩阵
    ans =
    
         0     1     0     0     0     0
         0     0     2     0     0     0
         0     0     0     3     0     0
         0     0     0     0     4     0
         0     0     0     0     0     5
         0     0     0     0     0     0
         
    >> diag(1:5,-1)
    % 对角线向下移1位矩阵
    ans =
    
         0     0     0     0     0     0
         1     0     0     0     0     0
         0     2     0     0     0     0
         0     0     3     0     0     0
         0     0     0     4     0     0
         0     0     0     0     5     0
         
     >> triu(ones(3,3))
    % 上三角矩阵
    ans =
    
         1     1     1
         0     1     1
         0     0     1
    
    >> tril(ones(3,3))
    % 下三角矩阵
    ans =
    
         1     0     0
         1     1     0
         1     1     1    
         
    

    随机矩阵

     >> rand(3)
    % 生成随机矩阵
    ans =
    
        0.2898    0.8637    0.0562
        0.4357    0.8921    0.1458
        0.3234    0.0167    0.7216
     
    >> rand('state',0); % 设定种子数,产生特定种子数下相同的随机数
    >> rand(3)
    
    ans =
    
        0.9501    0.4860    0.4565
        0.2311    0.8913    0.0185
        0.6068    0.7621    0.8214
    
    >> a = 1; b = 100;
    >> x = a + (b-a)* rand(3)
    % 产生区间(1,100)内的随机数
    x =
    
       38.2127   20.7575   91.1133
       89.9610   31.0064   53.0040
       43.4711   54.2917   31.3762
    
    
    >>  a = 1; b = 100;
    >> a + fix(b * rand(1,50))
    % 产生50个[1,100]内的随机正整数
    ans =
    
      列 1 至 15
    
         4    72    77     6    63    27    32    53    41    90    58    57    40    70    57
    
      列 16 至 30
    
        35    60    28     5    84    11    73    45   100    57    47    42    22    24    32
    
      列 31 至 45
    
        87    26    97    31    38    35    71    62    76    80    22    90    90    94    28
    
      列 46 至 50
    
        48    26    37    53    39
    

    相似函数扩展

    >> randn(3)
    % 生成均值为0,方差为1的正太分布随机数矩阵
    ans =
    
       -0.4326    0.2877    1.1892
       -1.6656   -1.1465   -0.0376
        0.1253    1.1909    0.3273
        
    >> randperm(10)
    % 生成1-10之间随机分布10个正整数
    ans =
    
         4     9    10     2     5     8     1     3     7     6
         
     % 多项式x^3 - 7x  + 6 的伴随矩阵    
    >> u = [1,0,-7,6];
    >> A = compan(u)
    % 生成伴随矩阵
    A =
    
         0     7    -6
         1     0     0
         0     1     0
    
    >> eig(A)  % 此处eig()函数用于求特征值
    % 利用伴随矩阵求得方程的根
    ans =
    
       -3.0000
        2.0000
        1.0000 
    

    矩阵的运算

    矩阵的代数运算

    矩阵的算术运算

    image.png

    >> A = [1,1;2,2];
    >> B = [1,1;2,2];
    >> A
    
    A =
    
         1     1
         2     2
    
    >> B
    
    B =
    
         1     1
         2     2
         
    >> A + B
    
    ans =
    
         2     2
         4     4
    
    >> B-A
    
    ans =
    
         0     0
         0     0
         
    >> A * B
    
    ans =
    
         3     3
         6     6 
         
    >> A^2
    
    ans =
    
         3     3
         6     6  
    
    >> A^3
    
    ans =
    
         9     9
        18    18  
    

    矩阵的运算函数

    image.png

    >> C = magic(3)
    
    C =
    
         8     1     6
         3     5     7
         4     9     2
    
    >> size(C)
    
    ans =
    
         3     3
    
    >> length(C)
    
    ans =
    
         3
    
    >> sum(C)
    
    ans =
    
        15    15    15
    
    >> max(C)
    
    ans =
    
         8     9     7
    
    >> C'
    
    ans =
    
         8     3     4
         1     5     9
         6     7     2
    
    
    >> inv(C)
    
    ans =
    
        0.1472   -0.1444    0.0639
       -0.0611    0.0222    0.1056
       -0.0194    0.1889   -0.1028
    

    矩阵的元素群运算


    元素群运算,是指矩阵中的所有元素按单个元素进行运算,也即是对应位置进行运算。image.png

    
    >> A = [1,2;3,4];
    >> B = [1,2;3,4];
    >> A .* B
    
    ans =
    
         1     4
         9    16
    
    >> A ./ B
    
    ans =
    
         1     1
         1     1
    
    >> A . B
    
    ans =
    
         1     1
         1     1
    
    >> A .^ B
    
    ans =
    
         1     4
        27   256
    

    矩阵元素群的运算函数

    MATLAB提供了几乎所有初等函数,包括三角函数、对数函数、指数函数和复数运算函数等。大部分的MATLAB函数运算都是分别作用于函数变量(矩阵)的每一个元素。
    image.png

    >> x = [0, pi/6, pi/4, pi/3];
    >> y = tan(x)
    
    y =
    
             0    0.5774    1.0000    1.7321
    
    >> y = sin(x)
    
    y =
    
             0    0.5000    0.7071    0.8660        
    

    矩阵的关系运算

    在使用关系运算时,首先应保证两个矩阵的维数相等或至少一个为标量。若参与运算的对象为两个矩阵,则关系运算对两个矩阵的对应元素进行关系比较,若关系满足,则将结果矩阵中该位置的元素置1,否则置0。若参与运算的对象之一为标量,则关系运算将矩阵的每一个元素与该标量逐一进行关系比较,若关系满足,则将结果矩阵中该位置的元素置1,否则置0。image.png

    >> A  = [1,1;1,1];
    >> B = [0,1;2,3];
    >> A > B
    
    ans =
    
      2×2 logical 数组
    
       1   0
       0   0
    
    >> A >= B
    
    ans =
    
      2×2 logical 数组
    
       1   1
       0   0
    
    >> A == B
    
    ans =
    
      2×2 logical 数组
    
       0   1
       0   0
    
    >> A ~= B
    
    ans =
    
      2×2 logical 数组
    
       1   0
       1   1
    

    矩阵的逻辑运算

    逻辑运算中,所有非零元素的逻辑值为“真”,用代码“1”表示;值为零的元素的逻辑值为“假”,用代码“0”表示。逻辑运算规则与关系运算基本一致,也是针对两个矩阵的对应元素。
    image.png

    >> A & B
    
    ans =
    
      2×2 logical 数组
    
       0   1
       1   1
    
    >> A | B
    
    ans =
    
      2×2 logical 数组
    
       1   1
       1   1
    
     
    >> ~ A
    
    ans =
    
      2×2 logical 数组
    
       0   0
       0   0
    
    >> ~B
    
    ans =
    
      2×2 logical 数组
    
       1   0
       0   0
    
  • 相关阅读:
    【转】高性能网络编程4--TCP连接的关闭
    Kubernetes 用了,延迟高了 10 倍,问题在哪?
    多路复用和多路分用
    网络七层模型与四层模型区别
    Go验证包出错 dial tcp 34.64.4.17:443: i/o timeout
    spring Bean配置的三种形式
    Spring容器IOC初始化过程
    Go 特殊语法
    服务发现的基本原理与比较:Eureka vs Consul vs Zookeeper
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/sinlearn/p/12842162.html
Copyright © 2020-2023  润新知