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)

下标索引

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB,运算符的优先级顺序是由高到低的。根据引用和引用,MATLAB将&运算符的优先级指定为高于|运算符,并且在处理表达式时按照从左到右的顺序进行计算。也就是说,对于包含&和|的表达式,按照a|(b&c)的形式进行计算。不过,为了避免歧义,最好使用括号显式地指定期望的运算顺序。总的来说,MATLAB的运算符优先级顺序如下所示:算术运算符>关系运算符>逻辑运算符。引用提供了完整的运算符优先级规则。此外,MATLAB还使用各种特殊字符来执行简单的运算,如引用所述。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Matlab运算符优先级](https://blog.csdn.net/jk_101/article/details/110858827)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Matlab运算符和基本运算使用](https://blog.csdn.net/jk_101/article/details/110854911)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值