当前位置 博文首页 > 早知晓的博客:MATLAB 中的 mod() 函数

    早知晓的博客:MATLAB 中的 mod() 函数

    作者:[db:作者] 时间:2021-07-30 08:52

    mod

    除后的余数(取模运算)

    语法

    b = mod(a,m)

    说明

    b = mod(a,m) 返回用 m 除以 a 后的余数,其中 a 是被除数,m 是除数。此函数通常称为取模运算,表达式为 b = a - m.*floor(a./m)。mod 函数遵从 mod(a,0) 返回 a 的约定。

    特别注意:MOD函数是用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。

    示例

    标量被除后的余数

    计算 23 对 5 取模:

    b = mod(23,5)
    b = 3
    

    向量被除后的余数

    计算一个整数向量除以除数 3 的余数:

    a = 1:5;
    m = 3;
    b = mod(a,m)
    b = 1×5
    
         1     2     0     1     2
    

    正值和负值被除后的余数

    计算一个含正负值的整数集被除后的余数。请注意,如果除数为正数,则非零结果始终为正数:

    a = [-4 -1 7 9];
    m = 3;
    b = mod(a,m)
    b = 1×4
    
         2     2     1     0
    

    【注】计算过程如下:
    先根据3对负数进行处理:
    -4 + 3 + 3 = 2
    处理为正数之后对其取余操作:
    mod(2,3) = 2;
    其他结果计算过程与之类似。

    用负除数除后的余数

    计算一个整数集除以负除数后的余数,该整数集包括正值和负值。请注意,如果除数为负数,则非零结果始终为负数:

    a = [-4 -1 7 9];
    m = -3;
    b = mod(a,m)
    b = 1×4
    
        -1    -1    -2     0
    

    【注】计算过程如下:
    先根据-3对正数处理:
    7 - 3 - 3 - 3 = -2
    处理为负数之后对其取余操作:
    mod(-2,-3) = -2;
    其他结果计算过程与之类似。

    浮点值被除后的余数

    计算多个角除以模数 2*pi 后的余数。请注意,mod 将尝试补偿浮点四舍五入取整的影响,以尽可能生成精确的整数结果:

    theta = [0.0 3.5 5.9 6.2 9.0 4*pi];
    m = 2*pi;
    b = mod(theta,m)
    b = 1×6
    
             0    3.5000    5.9000    6.2000    2.7168         0
    

    输入参数

    a - 被除数

    标量 | 向量 | 矩阵 | 多维数组

    被除数,指定为标量、向量、矩阵或多维数组。a 必须是任意数值类型的实数值数组。数值输入 a 和 m 必须具有相同的大小或兼容的大小(例如,a 是 M×N 矩阵,m 是标量或 1×N 行向量)。有关详细信息,请参阅基本运算的兼容数组大小。

    如果 a 和 m 是持续时间数组,则它们必须具有相同的大小,除非其中一个为标量。如果一个输入是持续时间数组,则另一个输入可以是持续时间数组或数值数组。在此上下文中,mod 将数值视为标准 24 小时制的数字。

    如果一个输入是整数数据类型,则另一输入必须是相同的整数类型或 double 标量。

    数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | duration | char

    m - 除数

    标量 | 向量 | 矩阵 | 多维数组

    除数,指定为标量、向量、矩阵或多维数组。m 必须是任意数值类型的实数值数组。数值输入 a 和 m 必须具有相同的大小或兼容的大小(例如,a 是 M×N 矩阵,m 是标量或 1×N 行向量)。有关详细信息,请参阅基本运算的兼容数组大小。

    如果 a 和 m 是持续时间数组,则它们必须具有相同的大小,除非其中一个为标量。如果一个输入是持续时间数组,则另一个输入可以是持续时间数组或数值数组。在此上下文中,mod 将数值视为标准 24 小时制的数字。

    如果一个输入是整数数据类型,则另一输入必须是相同的整数类型或 double 标量。

    数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | duration | char


    mod 和 rem 的区别

    除后所得余数的概念的定义不是唯一的,两个函数 mod 和 rem 各计算不同的结果。mod 函数生成一个为零或与除数具有相同符号的结果。rem 函数生成一个为零或与被除数具有相同符号的结果。

    另一个差别是当除数为零时的约定。mod 函数遵从 mod(a,0) 返回 a 的约定,而 rem 函数遵从 rem(a,0) 返回 NaN 的约定。

    两个结果都有其各自的用途。例如,在进行信号处理时,mod 函数可在周期信号上下文中使用,因为其输出是周期性的(周期等于除数)。

    同余关系

    mod 函数对同余关系很有用:当且仅当 mod(a,m) == mod(b,m) 时,a 和 b 为同余 (mod m)。例如,23 和 13 同余 (mod 5)。

    cs