Subsections


4.1 Arithmetische Operatoren


4.1.1 Arithmetische Operatoren für Skalare

Die vordefinierten Operatoren auf skalaren double-Ausdrücken sind in Tabelle 4.1 zusammengefaßt. Diese Operatoren sind eigentlich Matrixoperatoren, deren genaue Behandlung in 5 folgt. Der Grund dafür liegt darin, dass skalare Größen auch als Matrizen mit nur einem Element aufgefasst weren können. Damit bleibt hier die übliche Notation mit * und / erhalten.

Operatoren haben Prioritäten, die die Abarbeitung bestimmen. Operationen mit höherer Priorität werden zuerst ausgeführt.

Die Reihenfolge der Auswertung eines Ausdrucks kann durch Klammerung beeinflußt werden. In Klammern eingeschlossene (Teil-) Ausdrücke haben die höchste Priorität, d.h., sie werden auf jeden Fall zuerst ausgewertet. Bei verschachtelten Klammern werden die Ausdrücke im jeweils innersten Klammerpaar zuerst berechnet. Zur Klammerung verwendet MATLAB die sogenannten runden Klammern ().

Kommen in einem Ausdruck mehrere aufeinanderfolgende Verknüpfungen durch Operatoren mit gleicher Priorität vor, so werden sie von links nach rechts abgearbeitet, sofern nicht Klammern vorhanden sind, die etwas anderes vorschreiben; dies ist vor allem dann zu beachten, wenn nicht-assoziative Operatoren gleicher Priorität hintereinander folgen.

Operatoren können nur auf bereits definierte Variablen angewandt werden. Sie liegen immer in Form von Operatoren (+) oder in Form von Befehlen (plus) vor.


Table 4.1: Skalare Operationen; a und b sind skalare Variablen
OPERATOR OPERATION BEFEHL BEDEUTUNG MATH PRIORITÄT

^

a^b mpower(a,b) Exponentiation $ a^b$ 4
+ +a uplus(a) Unitäres Plus $ +a$ 3
- -a uminus(a) Negation $ -a$ 3
* a*b mtimes(a,b) Multiplikation $ ab$ 2
/ a/b mrdivide(a,b) Division $ a/b$ 2
\ a\b mldivide(a,b) Linksdivision $ b/a$ 2
+ a+b plus(a,b) Addition $ a+b$ 1
- a-b minus(a,b) Subtraktion $ a-b$ 1


4.1.2 Arithmetische Operatoren für Arrays

Eine herausragende Eigenschaft von MATLAB ist die einfache Möglichkeit der Verarbeitung ganzer Felder durch eine einzige Anweisung. Ähnlich wie in modernen Programmiersprachen Operatoren überladen werden können, lassen sich die meisten Operatoren und vordefinierten Funktionen in MATLAB ohne Notationsunterschied auf (ein- oder mehrdimensionale) Felder anwenden. Tabelle 4.2 enthält die vordefinierten Operatoren für Arrays am Beispiel von Zeilenvektoren. Die Anwendung auf mehrdimensionale Felder erfolgt analog.

Die hier vorgestellten Operatoren, die mit einem Punkt beginnen, werden komponentenweise auf Felder übertragen. Andere Operatoren haben unter Umständen bei Feldern eine andere Bedeutung.

Bei Anwendung auf Skalare haben sie natürlich die gleiche Bedeutung wie die Operatoren in 4.1. In diesem Fall ist also das Resultat von z.B. * und .* das selbe, da Skalare Matrizen mit einem Element sind. Bei + und - erübrigt sich eine Unterscheidung der Bedeutung überhaupt, was zur Folge hat, dass es keine .+ und .- Operatoren gibt.

Durch den Einsatz von Vektoroperatoren kann auf die Verwendung von Schleifen (wie sie etwa in C oder FORTRAN notwendig wären) sehr oft verzichtet werden, was die Lesbarkeit von MATLAB-Programmen fördert.


Table 4.2: Array-Array Operationen; a und b sind Felder der gleichen Größe, in diesem Beispiel Zeilenvektoren der Länge n.
OPERATOR OPERATION BEFEHL BEDEUTUNG PRIO.

.^

a.^b power(a,b) $ [ a_1^{b_1} \; a_2^{b_2} \; \dots \; a_n^{b_n} ]$ 4
.* a.*b times(a,b) $ \left[ a_1 b_1 \; a_2 b_2 \; \dots \; a_n b_n \right]$ 2
./ a./b rdivide(a,b) $ \left[ a_1/b_1 \; a_2/b_2 \; \dots \; a_n/b_n \right]$ 2
.\ a.\b ldivide(a,b) $ \left[ b_1/a_1 \; b_2/a_2 \; \dots \; b_n/a_n \right]$ 2

+

a+b plus(a,b) $ \left[ a_1 \! + \! b_1 \; a_2 \! + \! b_2 \; \dots \; a_n \! + \! b_n \right]$ 1
- a-b minus(a,b) $ \left[ a_1 \! - \! b_1 \; a_2 \! - \! b_2 \; \dots \; a_n \! - \! b_n \right]$

1

In MATLAB werden die gleichen Operatoren verwendet, um Vektoren oder allgemein Arrays mit Skalarausdrücken zu verknüpfen. In Tabelle 4.3 findet man die vordefinierten Operatoren zur komponentenweisen Verknüpfung von Feldern und Skalaren.


Table 4.3: Skalar-Array Operationen; a ist in diesem Beispiel ein Zeilenvektor der Länge n und c ist ein Skalar.
OPERATOR OPERATION BEFEHL BEDEUTUNG PRIO.

.^

a.^c power(a,c) $ \left[ a_1^{c} \; a_2^{c} \; \dots \; a_n^{c} \right]$ 4
.^ c.^a power(c,a) $ \left[ c^{a_1} \; c^{a_2} \; \dots \; c^{a_n} \right]$ 4
.* a.*c times(a,c) $ \left[ a_1 c \; a_2 c \; \dots \; a_n c \right]$ 2
./ a./c rdivide(a,c) $ \left[ a_1/c \; a_2/c \; \dots \; a_n/c \right]$ 2
./ c./a rdivide(c,a) $ \left[ c/a_1 \; c/a_2 \; \dots \; c/a_n \right]$ 2
.\ a.\c ldivide(a,c) $ \left[ c/a_1 \; c/a_2 \; \dots \; c/a_n \right]$ 2
.\ c.\a ldivide(c,a) $ \left[ a_1/c \; a_2/c \; \dots \; a_n/c \right]$ 2

+

a+c plus(a,c) $ \left[ a_1 \! + \! c \; a_2 \! + \! c \; \dots \; a_n \! + \! c \right]$ 1
- a-c minus(a,c) $ \left[ a_1 \! - \! c \; a_2 \! - \! c \; \dots \; a_n \! - \! c \right]$

1

*

a*c mtimes(a,c) $ \left[ a_1 c \; a_2 c \; \dots \; a_n c \right]$ 2
/ a/c mrdivide(a,c) $ \left[ a_1/c \; a_2/c \; \dots \; a_n/c \right]$ 2
\ c\a mldivide(c,a) $ \left[ a_1/c \; a_2/c \; \dots \; a_n/c \right]$ 2

In 4.3 kommen in einigen wenigen Fällen die Array-Operatoren mit Punkten und die Matrix-Operatoren gleichwertig vor, da sie zum selben Ergebnis führen. Eine genaue Behandlung der Matrix-Operatoren im Sinne der linearen Algebra erfolgt in 5.

Winfried Kernbichler 2005-04-26