Matlab中运算符重载

目录

运算符重载

为什么重载运算符

如何定义运算符

示例实现 - 可相加对象

MATLAB 运算符和关联的函数


运算符重载

为什么重载运算符

        通过实现适合类的运算符,可以将类的对象集成到 MATLAB® 语言中。例如,包含数值数据的对象可以定义算术运算,如 +、*、-,以便在算术表达式中使用这些对象。通过实现关系运算符,可以在条件语句(如 switch 和 if 语句)中使用对象。

如何定义运算符

        可以实现 MATLAB 运算符来处理您的类的对象。要实现运算符,请定义关联的类方法。

        每个运算符都有关联的函数(例如,+ 运算符有关联的 plus.m 函数)。可以通过创建具有适当名称的类方法来实现任何运算符。此方法可以执行适合将实现的运算的任何步骤。

运算中的对象优先级

        用户定义的类优先于内置类。例如,假设 q 是 double 类的对象,p 是用户定义的类。以下两个表达式都会在用户定义的类(如果存在)中生成对 plus 方法的调用:

q + p 
p + q

        此方法是否可以添加 double 类和用户定义的类的对象取决于如何实现该方法。当 p 和 q 是不同类的对象时,MATLAB 应用优先级规则来确定使用哪个方法。

运算符优先级

​        重载运算符保留运算符的原始 MATLAB 优先级。相关运算符优先级的信息可以参考运算符优先级。​

示例实现 - 可相加对象

        Adder 类通过定义 plus 方法来实现此类的对象的相加。Adder 将对象的相加定义为 NumericData 属性值的相加。plus 方法构造并返回一个 Adder 对象,该对象的 NumericData 属性值是执行相加的结果。

        Adder 类还通过定义 lt 方法实现小于运算符 (<)。lt 方法在比较每个对象的 NumericData 属性中的值后,返回一个逻辑值。

classdef Adder
   properties
      NumericData
   end
   methods
      function obj = Adder(val)
         obj.NumericData = val;
      end
      function r = plus(obj1,obj2)
         a = double(obj1);
         b = double(obj2);
         r = Adder(a + b);
      end
      function d = double(obj)
         d = obj.NumericData;
      end
      function tf = lt(obj1,obj2)
         if obj1.NumericData < obj2.NumericData
            tf = true;
         else
            tf = false;
         end
      end
   end
end

        使用双精度转换器,您可以将数值添加到 Adder 对象中,并对类的对象执行相加。

a = Adder(1:10)
a = 

  Adder with properties:

    NumericData: [1 2 3 4 5 6 7 8 9 10]

        将两个对象相加:

a + a

ans = 

  Adder with properties:

    NumericData: [2 4 6 8 10 12 14 16 18 20]

        加上一个对象,该对象具有可转换为双精度的任意值:

b = uint8(255) + a
b = 

  Adder with properties:

    NumericData: [256 257 258 259 260 261 262 263 264 265]

        使用 < 运算符比较对象 a 和 b:

a < b
ans =

     1

        确保类提供实现类设计所需的任何错误检查。

MATLAB 运算符和关联的函数

        下表列出了 MATLAB 运算符的对应函数名称。实现运算符以处理数组(标量扩展、向量化算术运算等)时,可能还需要修改索引和串联方式。使用下表中的链接可了解关于每个函数的具体信息。

运算

要定义的方法

说明

a + b

plus(a,b)

二元加法

a - b

minus(a,b)

二元减法

-a

uminus(a)

一元减法

+a

uplus(a)

一元加法

a.*b

times(a,b)

按元素乘法

a*b

mtimes(a,b)

矩阵乘法

a./b

rdivide(a,b)

右按元素除法

a.\b

Idivide(a,b)

左按元素除法

a/b

mrdivide(a,b)

矩阵右除

a\b

mIdivide(a,b)

矩阵左除

a.^b

power(a,b)

按元素求幂

a^b

mpower(a,b)

矩阵幂

a < b

It(a,b)

小于

a > b

gt(a,b)

大于

a <= b

Ie(a,b)

小于或等于

a >= b

ge(a,b)

大于或等于

a ~= b

ne(a,b)

不等于

a == b

eq(a,b)

相等性

a & b

and(a,b)

逻辑 AND

a | b

or(a,b)

逻辑 OR

~a

not(a,b)

逻辑非

a:d:b

a:b

colon(a,d,b)

colon(a,b)

冒号运算符

a'

ctransport(a)

复共轭转置

a.'

transport(a)

矩阵转置

[a b]

horzcat(a,b...)

水平串联

[a; b]

vertcat(a,b,...)

垂直串联

a(s1,s2,...sn)

subsref(a,s)

下标引用

a(s1,...,sn) = b

subsasgn(a,s,b)

通过下标赋值

b(a)

subsindex(a)

下标索引

你可能感兴趣的:(Matlab,matlab,开发语言)