2014-03-27 12 views
5

Ich war nur neugierig, ob alle Operatoren in MATLAB intern als Funktionen implementiert sind? Wir haben für fast alle MATLAB-Operatoren gleichwertige Funktionen. plus für +, minus für -, eq für == und transpose für '.MATLAB-Operatoren als Funktionen

Antwort

3

Ja, so ermöglicht MATLAB das Überladen von Operatoren, indem Infix-Operatoren auf benannte Funktionen abgebildet werden.

Die documentation listet (nach Kategorie) die von den Operatoren aufgerufenen Funktionen auf. Und more here.

+0

Danke für Ihre Antwort. Dieser [link] (http://nf.nci.org.au/facilities/software/Matlab/techdoc/matlab_prog/ch14_o23.html) listet auf, wie man einen Operator überlädt. – erbal

5

Die meisten Operatoren werden durch Funktionen dargestellt, ja.

Eine gründliche Liste wird auf der MathWorks zur Verfügung gestellt Seite Implementing Operators for Your Class, reproduziert hier:

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 

Ein weiterer guter Ort, um eine Liste zu suchen ist eigentlich die Dokumentation für bsxfun, die mit sehr leistungsfähigen jedes Element weise Funktion gilt virtuelle Datenreplikation


Oft nützlich ist vertcat. horizontal vs. vertical Verkettung mit einer durch Kommata getrennte Liste:

>> c = {'a','b'}; 
>> horzcat(c{:}) % [c{1} c{2}] 
ans = 
    ab 
>> vertcat(c{:}) % [c{1};c{2}] 
ans = 
    a 
    b 

Neben vielen anderen dokumentierten Betreiber mit benannten Funktionen, es gibt ein paar undokumentierte diejenigen, die Sie zugreifen können (colon, transpose, etc.) mit builtin:

Klammer

>> x = [4 5 6]; 
>> builtin('_paren',x,[2 3]) % x([2 3]) 
ans = 
    5  6 

geschweiften Klammern

>> c = {'one','two'}; 
>> builtin('_brace',c,2) % c{2} 
ans = 
two 

struct Feldzugriff (dot)

>> s = struct('f','contents'); 
>> builtin('_dot',s,'f') % s.f 
ans = 
contents 

jedoch beachten, daß die richtige und unterstützte Weise (), verwenden {} oder . über subsref ist , subasgn, und subindex, abhängig vom Kontext.

Diese Builtins beziehen sich auf die in help paren beschriebenen Operatoren. Erkunden Sie auch die Interpunktion, die in help punct aufgeführt ist.

+0

Danke für Ihre Antwort. – erbal

+0

@ user11659 Ich habe mit einer _much_ bessere Liste und Link aktualisiert. – chappjc

+0

Weiß jemand, warum 'A .- B' nicht definiert ist und stattdessen' bsxfun (@minus, A, B) 'verwendet werden muss? Gibt es eine Möglichkeit, diesen Operator manuell zu überladen/zu definieren? –

Verwandte Themen