MATLAB算子作为函数

MATLAB算子作为函数,matlab,Matlab,我只是好奇MATLAB中的所有操作符是否都在内部实现为函数?对于几乎所有的MATLAB操作符,我们都有等价的函数加号,减号-,==的eq,转置,,是的,这就是MATLAB通过将中缀运算符映射到命名函数来启用运算符重载的方式 该列表(按类别)列出了运算符调用的函数。和。大多数运算符都由函数表示,是的 MathWorks页面上提供了完整的列表,复制如下: a + b plus(a,b) Binary addition a - b

我只是好奇MATLAB中的所有操作符是否都在内部实现为函数?对于几乎所有的MATLAB操作符,我们都有等价的函数<对于
+
,code>加号
减号
-
==
eq
转置
是的,这就是MATLAB通过将中缀运算符映射到命名函数来启用运算符重载的方式


该列表(按类别)列出了运算符调用的函数。和。

大多数运算符都由函数表示,是的

MathWorks页面上提供了完整的列表,复制如下:

a + b plus(a,b) Binary addition a - b minus(a,b) Binary subtraction -a uminus(a) Unary minus +a uplus(a) Unary plus a.*b times(a,b) Element-wise multiplication a*b mtimes(a,b) Matrix multiplication a./b rdivide(a,b) Right element-wise division a.\b ldivide(a,b) Left element-wise division a/b mrdivide(a,b) Matrix right division a\b mldivide(a,b) Matrix left division a.^b power(a,b) Element-wise power a^b mpower(a,b) Matrix power a < b lt(a,b) Less than a > b gt(a,b) Greater than a <= b le(a,b) Less than or equal to a >= b ge(a,b) Greater than or equal to a ~= b ne(a,b) Not equal to a == b eq(a,b) Equality a & b and(a,b) Logical AND a | b or(a,b) Logical OR ~a not(a) Logical NOT a:d:b colon(a,d,b) Colon operator a:b colon(a,b) a' ctranspose(a) Complex conjugate transpose a.' transpose(a) Matrix transpose command line output display(a) Display method [a b] horzcat(a,b,...) Horizontal concatenation [a; b] vertcat(a,b,...) Vertical concatenation a(s1,s2,...sn) subsref(a,s) Subscripted reference a(s1,...,sn) = b subsasgn(a,s,b) Subscripted assignment b(a) subsindex(a) Subscript index
除了许多具有命名函数(
冒号
转置
等)的其他有文档记录的运算符外,还有一些未文档记录的运算符可供访问:

括号

花括号

结构字段访问(dot)

但是,请注意,根据上下文,使用
()
{}
的正确且受支持的方式是via、
subasgn
subindex


这些内置项指的是
help paren
中描述的运算符。还可以浏览
帮助点播中列出的标点符号

谢谢你的回答。此[链接]()列出了如何重载运算符。感谢您的回答。有人知道为什么未定义
A.-B
,而必须使用
bsxfun(@减号,A,B)
?是否有可能手动重载/定义该运算符?@MarioReutter
运算符是成对的,要求
a
B
具有相同的维度。使用
bsxfun
,它以单例维度执行动态复制(虚拟
repmat
)。这两种操作模式并不相似。但是,您可能会重载操作符来执行
bsxfun
,但我绝对不会尝试使用
-
,因为这意味着不同的含义(然而,这是一个无意义的例子,因为在矩阵上下文中,
-
没有特殊意义,因为它总是成对的,除非一个参数是标量)。
>> c = {'a','b'};
>> horzcat(c{:}) % [c{1} c{2}]
ans =
     ab
>> vertcat(c{:}) % [c{1};c{2}]
ans =
    a
    b
>> x = [4 5 6];
>> builtin('_paren',x,[2 3])  % x([2 3])
ans =
     5     6
>> c = {'one','two'};
>> builtin('_brace',c,2)  % c{2}
ans =
two
>> s = struct('f','contents');
>> builtin('_dot',s,'f')  % s.f
ans =
contents