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