MATLAB 运算符

  • 运算符

    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此,MATLAB中的运算符可同时处理标量和非标量数据。MATLAB允许以下类型的基本运算-
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
    • 按位运算
    • Set 操作符
  • 算术运算符

    MATLAB允许两种不同类型的算术运算-
    • 矩阵算术运算
    • 数组算术运算
    矩阵算术运算与线性代数中定义的相同。数组操作在一维和多维数组上逐个元素地执行。
    矩阵运算符和数组运算符由句点(.)符号区分。但是,由于矩阵和数组的加法和减法运算相同,因此两种情况的运算符均相同。下表简要介绍了运算符-
    运算符 说明
    + 加法或一元加法。 A + B将存储在变量A和B中的值相加。A和B的大小必须相同,除非一个是标量。 可以将标量添加到任何大小的矩阵中。
    - 减或一元减。 A-B从A减去B的值。A和B必须具有相同的大小,除非一个是标量。 可以从任何大小的矩阵中减去标量。
    * 矩阵乘法。 C = A * B是矩阵A和B的线性代数积。,$$C(i,j) = \sum_{k=1}^n A(i,k)B(k,j)$$对于非标量A和B,A的列数必须等于B的行数。标量可以乘以任意大小的矩阵。
    .* 数组乘法。 A. * B是数组A和B的逐元素乘积。A和B必须具有相同的大小,除非它们之一是标量。
    / 斜杠或矩阵右除。 B / A与B * inv(A)大致相同。 更准确地说,B / A =(A'\ B')'。
    ./ 数组右分割。 A./B是元素为A(i,j)/ B(i,j)的矩阵。 A和B的大小必须相同,除非其中一个是标量。
    \ 反斜杠或矩阵左除法。 如果A是一个方矩阵,则A \ B与inv(A)* B大致相同,不同的是它的计算方式不同。 如果A是一个n×n矩阵,而B是具有n个分量的列向量,或者是具有多个此类列的矩阵,则X = A \ B是方程AX = B的解。如果显示警告消息,则 A的缩放比例很差或几乎是奇数。
    .\ 数组左分割。 A. \ B是元素B(i,j)/ A(i,j)的矩阵。 A和B的大小必须相同,除非其中一个是标量。
    ^ 矩阵功率。 如果p是标量,则X ^ p是幂p的X。 如果p为整数,则通过重复平方来计算幂。 如果整数是负数,则X首先被求反。 对于p的其他值,计算涉及特征值和特征向量,使得如果[V,D] = eig(X),则X ^ p = V * D. ^ p / V。
    .^ 数组幂。 A. ^ B是元素B(i,j)的元素A(i,j)的矩阵。 A和B的大小必须相同,除非其中一个是标量。
    ' 矩阵转置。 A'是A的线性代数转置。对于复矩阵,这是复共轭转置。
    .' 数组转置。 一种。' 是A的数组转置。对于复杂矩阵,这不涉及共轭。
    示例:
    以下示例显示了对标量数据使用算术运算符。 使用以下代码创建脚本文件-
    
    a = 10;
    b = 20;
    c = a + b
    d = a - b
    e = a * b
    f = a / b
    g = a \ b
    x = 7;
    y = 3;
    z = x ^ y
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    c =  30
    d = -10
    e =  200
    f =  0.50000
    g =  2
    z =  343
    
  • 关系运算符

    关系运算符还可以处理标量和非标量数据。数组的关系运算符在两个数组之间执行逐个元素比较,并返回相同大小的逻辑数组,其中元素设置为逻辑1(true),关系为真,元素设置为逻辑0(false)。下表显示了MATLAB中可用的关系运算符-
    运算符 说明
    < 少于
    <= 小于或等于
    > 大于
    >= 大于或等于
    == 等于
    ~= 不等于
    示例:
    创建一个脚本文件并输入以下代码-
    
    a = 100;
    b = 200;
    if (a >= b)
    max = a
    else
    max = b
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    max =  200
    
  • 逻辑运算符

    MATLAB提供两种类型的逻辑运算符和函数-
    • 逐个元素-这些运算符对逻辑数组的相应元素进行操作。
    • 短路-这些运算符对标量和逻辑表达式进行运算。
    逐个元素的逻辑运算符在逻辑数组上逐个元素地进行操作。符号&,|和〜是逻辑数组运算符AND,OR和NOT。
    短路逻辑运算符允许逻辑运算短路。符号&&和|| 是逻辑短路运算符AND和OR。
    示例:
    创建一个脚本文件并输入以下代码-
    
    a = 5;
    b = 20;
       if ( a && b )
          disp('Line 1 - Condition is true');
       end
       if ( a || b )
          disp('Line 2 - Condition is true');
       end
       
       % lets change the value of  a and b 
       a = 0;
       b = 10;
       
       if ( a && b )
          disp('Line 3 - Condition is true');
       else
          disp('Line 3 - Condition is not true');
       end
       
       if (~(a && b))
       
          disp('Line 4 - Condition is true');
       end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    Line 1 - Condition is true
    Line 2 - Condition is true
    Line 3 - Condition is not true
    Line 4 - Condition is true
    
  • 按位运算

    按位运算符对位进行操作并执行逐位操作。&,|和^的真值表如下-
    p q p & q p | q p ^ q
    0 0 0 0 0
    0 1 0 1 1
    1 1 1 1 0
    1 0 0 1 1
    假设A = 60; 和B = 13; 现在以二进制格式,它们将如下所示-
    
    A = 0011 1100
    
    B = 0000 1101
    
    -----------------
    
    A&B = 0000 1100
    
    A | B = 0011 1101
    
    A ^ B = 0011 0001
    
    〜A = 1100 0011
    
    MATLAB为按位运算提供了各种函数,例如``按位与'',``按位或''和``按位非''运算,移位运算等。
    下表显示了常用的按位运算-
    函数 说明
    bitand(a, b) 整数a和b的按位与
    bitcmp(a) a的按位补码
    bitget(a,pos) 获取整数数组a中指定位置pos的位
    bitor(a, b) 整数a和b的按位或
    bitset(a, pos) 在某个位置的特定位置设置位
    bitshift(a, k) 返回向左移位k位,等于乘以2k。 k的负值对应于右移或除以2 | k |。 并朝负无穷大舍入到最接近的整数。 任何溢出位都将被截断。
    bitxor(a, b) 整数a和b的按位XOR
    swapbytes 交换字节顺序
    示例:
    创建一个脚本文件并输入以下代码-
    
    a = 60;               % 60 = 0011 1100   
    b = 13;               % 13 = 0000 1101 
    c = bitand(a, b)      % 12 = 0000 1100  
    c = bitor(a, b)       % 61 = 0011 1101 
    c = bitxor(a, b)      % 49 = 0011 0001 
    c = bitshift(a, 2)    % 240 = 1111 0000 */
    c = bitshift(a,-2)    % 15 = 0000 1111 */
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    c =  12
    c =  61
    c =  49
    c =  240
    c =  15
    
  • Set 操作符

    MATLAB提供了用于集合操作的各种功能,例如联合,交集和集合成员资格的测试等。下表显示了一些常用的设置操作-
    函数 说明
    intersect(A,B) 设置两个数组的交集;返回A和B通用的值。返回的值按排序顺序。
    intersect(A,B,'rows') 将A的每一行和B的每一行都视为单个实体,并返回A和B共有的行。返回矩阵的行按排序顺序。
    ismember(A,B) 返回与A大小相同的数组,其中包含1(真),其中A的元素在B中找到。在其他地方,它返回0(假)。
    ismember(A,B,'rows') 将A的每一行和B的每一行都视为单个实体,并返回一个包含1(true)的向量,其中矩阵A的行也是B的行。在其他地方,它返回0(false)。
    issorted(A) 如果A的元素按排序顺序返回逻辑1(真),否则返回逻辑0(假)。输入A可以是向量或字符串的N×1或1×N单元格数组。如果A和sort(A)的输出相等,则认为A已排序。
    issorted(A, 'rows') 如果二维矩阵A的行按排序顺序,则返回逻辑1(真),否则返回逻辑0(假)。如果A和sortrows(A)的输出相等,则认为矩阵A已排序。
    setdiff(A,B) 设置两个数组的差;返回A中的值,而不是B中的值。返回的数组中的值按排序顺序。
    setdiff(A,B,'rows') 将A的每一行和B的每一行视为单个实体,并从A中返回不在B中的行。返回矩阵的行按排序顺序。 'rows'选项不支持单元阵列。
    setxor 设置两个数组的异或
    union 设置两个数组的并集
    unique 数组中的唯一值
    示例:
    创建一个脚本文件并输入以下代码-
    
    a = [7 23 14 15 9 12 8 24 35]
    b = [ 2 5 7 8 14 16 25 35 27]
    u = union(a, b)
    i = intersect(a, b)
    s = setdiff(a, b)
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    a =
    
        7   23   14   15    9   12    8   24   35
    
    b =
    
        2    5    7    8   14   16   25   35   27
    
    u =
    
        2    5    7    8    9   12   14   15   16   23   24   25   27   35
    
    i =
    
        7    8   14   35
    
    s =
    
        9   12   15   23   24